Mark Pearl

Notes based off research paper available here

Think back to someone you’ve worked with that you thought was a great software engineer.

Great software engineers are people who are passionate about their jobs and are continously improving; who develop and maintain practical decision making models based on theory and expertise; who grow their capability to produce software that is elegant, creative, and anticipate needs; who evaluate tradeoffs at multiple levels of abstraction, from low-level technical details to big picture strategies; and whom teammates trust and enjoy working with.

With personal characteristics many felt that the attributes were intrinsic to the person-formed through their upbringing-and were difficult (if not impossible to change).

Personal Characteristics

  • Perseverant
  • Self aware
  • Hardworking
  • Aligned
  • Curious
  • Executing
  • Risk-taking
  • Prideful
  • Systematic
  • Adaptable
  • Creating
  • Productive
  • Self-reliant
  • Focussed

Decision Making Characteristics

  • Knowledgable about their technical domain
  • Knowledgable about customers and business
  • Knowledgable about tools and building materials
  • Knowledgable about engineering processes
  • Models states & outcomes

Software Product

  • Elegant
  • Creative
  • Anticipates needs
  • Makes tradeofs
  • Attentive to details
  • Fitted
  • Evolving
  • Long-term
  • Carefully constructed


  • Creates shared context
  • Creates shared success
  • Creates a safe haven
  • Honest
  • Manages expectations
  • Walks the walk
  • Raises challenges
  • Personable
  • Asks for help
  • Well mannered
  • Acquites context
  • Does not make it personal
  • Mentoring

blog comments powered by Disqus

Want to get my personal insights on what I learn as I learn it? Subscribe now!