Five Pillars of Well-Rounded Software Engineering Teams

Most places I’ve worked offer models for periodically reviewing employee performance and having career development conversations, but I haven’t seen great ones for teams and have ended up creating my own over time.

I realize there are several different team-shaping models that cover a range of different intentions from rapid growth to long-range operability, and massive results to sustainable output. I find parts of them fascinating and continue to find points I want to factor into my own mental picture of how things could be. I’m sharing here what I personally subscribe to and continue to iterate on.

image

The five main expectations of an engineering team (and for the individuals on the team) are Plan, Work, Communicate, Grow, and Give.

One level out from the five focus areas mapped out here are the Team Actions that teams should meet with consistency.

The additional levels from there give examples of Individual Actions that help satisfy the team actions. As indicated on certain activities, the scope of those expectations vary for different engineering levels.

Using these to focus on the success of the business and the team will also help each individual be successful. Work is the largest overarching expectation and commonly gets the most attention. Recognizing that the other areas are also a vital part of our work helps scale a healthy team and generate results.

One thing I frequently call out with my own teams is that if the team is collectively meeting their objectives, then the extent of how much a specific expectation of an individual engineer is met by each given member of that team becomes less important. This is true provided that the individual is significantly contributing to the team’s results. This allows a team to play to an individual’s strengths and make space for growth in areas they are developing. Individuals on a team may contribute different amounts of each behavior according to their strengths and the needs of the team for achieving the desired results. And how one individual contributes to a team may be very different than another, and both can be successful.

Highlighting some of the behaviors I look for from my teams:

  • (Plan) Seek a diversity of opinions. No significant decision should be made without some alignment between someone with relevant context, someone with expertise and fresh ideas, a representative from those who will be implementing it, and one from the folks who will be supporting it. The first two roles by definition have to be different people, and the other two could be the met by them or others.
  • (Plan) Scope and dates cannot be set at the same time. Pick which one you’ll set, and adjust the other. Recognize that it is difficult to adjust the people involved, so that should be an orthogonal conversation that affects scope and timeline.
  • (Communicate) Operate in a global, remote-first manner: keep work related conversations in public, easily discoverable and durable channels, capture summaries, balance sync time (including Slack sync messaging), account for all timezones in planning meetings and discussions.
  • (Grow) Set the bar high for excellence. All the catchphrases here: growth mindset, continuous improvement, believing that anything is possible. It is fine to vent provided that you get it out, process it, and move forward. Try things out more than worrying about what will happen when you do – worry is a waste of imagination.
  • (Grow) Have a life! And support others in their efforts to do things outside of work and take care of themselves and their families.

And above all else: BE KIND. Build relationships. Keep conversations going, even when others may stifle them. Especially then.