Working in teams
Published: 12 Feb 25 11:04 UTC
Recently I've been thinking about how my team functions compared with other teams in my "division"(?) and how the team dynamic/ways of working have changed over time.
With my admittedly limited experience to date, I believe that:
Software engineers require
strong teams
to beeffective
.
What does it mean to be effective
?
In my opinion, being effective means (non-exhaustive):
-
Exploring and understanding a bounded problem space
-
Being able to thoughtfully design a solution
-
Working towards a clear set of outcomes to achieve
These are all outcomes/artefact focused - delivering something.
It is important to our employers and ourselves to be effective as software engineers.
At the end of the day, we are being paid to deliver solutions, not write pretty/clean code.
But I believe there needs to be supporting structures to enable effective development.
What is a strong
team?
I believe there are interpersonal factors that are required for a team to be effective (again non-exhaustive).
-
A culture that encourages knowledge sharing and learning, not blame and secrecy
-
Most team members are willing to shoulder the work if someone needs a hand
-
Insulation from organisational noise/politics
-
People get along
-
Sustainable work pace
What about the rockstar 10x solo developer?
I'm talking about the fabled "ninja" developers that can (and do) do everything. I have worked with these people in the past. I was previously in awe, but now I feel pity, if anything.
I think extremely effective developers do exist. But not because they do all the work.
I think the 10x developer that consistently does everything exists because of weak team structures.
I think a team culture that encourages learning, sharing the load and works sustainably should not continue to rely on one person. This smells like organisational learned helplessness to me and is a major personnel risk.
The developers that I've met that I would classify as 10x spent most of their time unblocking and upskilling everyone in the team.
They didn't have to shoulder the load all the time because they helped everyone else in the team get to a level of capability where that was never necessary.
Why is any of this important?
I'm assessing the areas that my current team could work on.
I spend a lot of my time at work. I want to get better at what I do. I want to enjoy what I do.
In my current team, the team dynamic is quite strong.
But I'd like to try foster better effectiveness. At my current level, that would most effectively be achieved by asking lots of questions to really flesh out the problem space. Exploring the edge cases. Writing and diagramming. Socialising changes.
Things that I guess are not as sexy as Rust or functional programming.
Longer term, I believe my future in this industry is in people management. If I make that far, analysing and actioning this sort of thing is probably what I'll be paid the moderate bucks for.
Back