Last month I decided to quit, to stop being a manager/developer. 5 years ago I was looking for a place where I can improve my rails skills and suddenly I stayed at that place for 5 full years :).
Below are the scribbles, I hope to read them again in few years (dang) and see how far I /hopefully!/ grew from there.
1. Seniority != ability to deliver
Vast knowledge about the technology, coding paradigms, years of experience doesn’t mean given person can actually ship good quality code (or even working solutions) in practice. Nowadays I don’t find it strange why in some companies there are obligatory demo days involved during recruitment process - on the other hand market can be so hard it can scare off potential candidates. I guess it depends how big your company is - the marketing/public relation aspects can be important here - you can pull of more if you have good hr-marketing I suppose.
And also let’s be honest here - especially in web development you don’t need to know all graph algorithms (or whatever) off top of your head, it’s usually not what clients are paying for - and at the end of a day often database or even network itself will be your bottleneck anyway.
2. Building teams is hard, maintaining teams is next to impossible
I consider myself lucky. I have managed to find awesome people that decided to work with me for 1-2 years+. In my calender 1 year is a long-term now. Market is very dynamic, people come and go - and that’s a normal thing; if you find some folks that are willing to sail on the same boat with you for 5 days a week - appreciate that.
Look for people that approve your values. I believe sometimes you have to trust your guts - not everything can be quantized. Not every technologically strong person will be a good it, and a bad hire costs a lot. A lot of time, resources, money, and let’s not get into collateral cultural damage.
3. Nobody can tell you how to be a leader
Sadly the ‘general flow’ in companies is that the person with most experience within the company is promoted to be some kind of manager, team leader etc. And I think is is pretty common that (unfortunately) people just don’t get a proper training. So you have to train yourself - and that’s what I exactly did. Did some research, read some books, sucked at being a manager but kept doing it as there was no-one around that was willing too. Started an remote R&D office, starting hiring people (I had no idea how to do it, probably I still don’t), in 2 years grew from 0 to 6, hired 8 total. It was exhausting and I learned quite a lot.
4. Automation is a blessing
Automate tech and automate the process itself. If you don’t have CI - set it up, add static code analyzers, build your own toolkit of apps that will help you and your team ship the code. Configure continuous deployment, build&share scripts or whatever can minimize the manual works that is required on daily basis.
5. Pat yourself on the back
Being some sort of manager&tech-person-at-the-same time is in my opinion very ungrateful job. Coding is easy. Your code works or it does not. If it does not you can usually relatively easy debug and fix it, feel good about it and move to the next thing. Teams on the other hand are quite different. Dealing with global problems, personal problems, unhappy team members becomes a chore. Then you have your managers (and keep in mind - just to keep the big picture in front of you - those managers usually have their own managers), budget strains, product owner(s), requests from teams from different departments, deadlines, overall technology stack (and technology debt) and juggling all of this while trying to avoid bigger problems ahead that only you and few people in the company might be aware of. I had no idea how draining this might be to be honest. So sometimes just pat yourself on the back at the of a day, don’t expect anyone else will.