This article focuses on my idea of developing a team in the long term — some theoretical thoughts and practical suggestions.
The idea is pretty simple: to build one good team and then scale it if you feel good about the results.
A good team is a virtual or real place where people like to be together. That means they do something together, and the result is good, and they know about each other's strengths and weaknesses and use this knowledge to do something together as efficiently as possible.
A good team is independent, and they have some domain knowledge, which might be hard to learn for newcomers or people from other groups. Still, they also have suitable interfaces: to request something from the team or how to use technology or product they are working on.
There are plenty of ways to get there and much more to fail. There are gazillions of articles about the importance of feedback, personal growth for engineers, and other practices that should bring you good results.
I want to focus on my trick. Whole my life, I feel I am not like the others: not better or worse. I find myself often opposed to the majority. No need for a therapist's opinion: it comes from childhood, from the poor and soviet style schooling system, from very irrational thinking and behavior of adults: which is supposed to be very clever and the ideal of smartness.
I recently got a photo from my father of my younger school notebook. There is a note from the teacher with the red ink: "What a notebook is this?" referring to, what, I can only guess now, rock bands logos drew by my, childish, hand on the notebook cover. And right after teacher's goes mine, with several childish typos: 'Its a prety notebok'.
Anyway, no doubt it is within me, and what I often hear from my peers is making me accept that I could be a pain in the ass.
But what if I could use it for good and not just suffer from the consequences?
Naturally, as I built a team, I eventually let them inherit this 'a bit rebellious' spirit. It reflects in how we hate bureaucracy and useless meetings and how we avoid using standard tools that aren't fit for a particular moment; even when this happens, and there is no way to prevent it, we do everything we can to:
a. let everyone know we were forced to do it and why we aren't happy
b. contribute to the tools, so they have a better fit for our needs
So as you can see, team does not go all punk: we are still part of the more extensive ecosystem, but we express a detectable level of criticism and doubt in everything we do, including our own decisions.
It's wrong to say only we are unique. Every team feels this when they work together long enough and cover some domain knowledge and codebase.
So I propose to focus on that feeling and cherish it. Let it grow. Yes, we are part of a giant (probably) company with some culture, etc. But also, some things make us us, special and unique.
You can't make it happen by having moronic team buildings, parties, and that's it. But you can grow this uniqueness right after you have some level of trust among the team, including yourself.
What does it mean to have trust:
Each person is reliable: if you commit to something, you have to deliver results (keep in mind: bad results are also results). And this is scalable to the team. In a way, it's a reputation for being a reliable and dedicated group.
The team is a safe space to share what is bothering you, even if it's unrelated to work. Yes, it might be a bit overwhelming, and daily it's better to keep things 'professional'. However, the team should welcome you as a person, not just a function.
You all care. Or at least the core group is. Usually, it means that team members are arguing a lot with each other. It's risky, as emotions and ego sometimes blow the lid, but a culture of 'silent agreement' or 'blind trust' is much more destructive.
But when you have agreement, or I, dunno how you do it, maybe, majority voted: everyone moves forward synchronized and accepting decision.
And there are many more characteristics of the team with trust. You can easily add your vision.
Anyway, when you achieve it, you can move forward with uniqueness.
When the team has trust inside, it is reliable; you need to add just a bit of specialty spice if it isn't there yet.
Now when it's done, you can scale it to other teams: it's your (one of) growth path as an engineering manager, as I see it. Yes, you leave the nest. You ensure that there is someone who picks up your role, and your next part is to guide this person and, through that person, keep an eye on the team, jumping into the complicated cases as they appear.
I am focusing on that, as I have observed attempts to align many processes and patterns within big companies for quite some years. These efforts are reasonable; however, as often happens, the implementation is heartless and does not count details on the ground level. So it becomes the 'lose sight of the forest for the trees' situation: formality, not common sense, prevails. It's like an attempt to build corporate communism. The best way for a lovely company to become an ugly monster, having only good intentions.
The bottom line is having uniqueness, being special, or even being a bit of a weirdo is a good idea to develop a team.