10 years mark
We are the Thursday 2nd of October 2014, it's my first day as a professional software engineer.
I like symbols, because for good or bad reasons they force us to take a step.
Today it's been 10 years I have started to be paid to work on software.
To emphasize a bit more, working on software involves more than producing (or shipping) code and attending to never-ending (which seems to be a competition to determine who is able to stay awake the longest).
The bright side
Along these years, I have worked as software engineer within 5 companies working closely with people from 19 countries.
Software engineering is a team sport, you can't do it alone, so I'd like to thank (in the order I've met them) some of them for the influence they had on my practice (even though it took me more or less time to realize it):
- Fabrice: how to lead a team (finding the balance between autonomy and support), having technical influence over hundreds of people without authority
- Giles: how collect feedback from your subordinates, genuinely caring from them
- Cyril: the hardest part as a leader is to build the right team
- Frederic: how to provide feedback and be useful beyond the code
- Ousmane: discover stoicism, which helped me every day since
- Thierry: what QA is really about (spoiler, it's not to tell developers they are wrong), and why they should participate into the design phase
- Raphael: leadership when you are in a highly bureaucratic environment, how to make things go forward when nothing move
- Matthieu: how to frame any technical discussion, focusing on the core problem, the issue which can make or break the system
- Benoit: how to run a FOSS community
- Florian: how to structure a project which drifts
- Iannis: how to reframe discussions, to sum-up the main arguments related to the subject
- Pierre: how to sell your decisions to non-technical people
- Ioannis: how to focus and elaborate, how to mentor someone
This job also requires you to be involved outside your work-time, I'd also like to thank them:
- Damien & Jean-Paul: how to plan, organize and run a conference
- Haikel: how to run a community of practice, a code retreat, a workshop
- Émilien: how to be a freelancer
- Florent: how to run a local community
- Colin & Anthony & Nolwenn: how support your pair during pair/ensemble programming sessions
Note: aside of that, I've met a lot of people which I've loved to talked to, helping me to grow as a person, to name few of them, Hugo, Clément, Jean-Paul, Marc, Florence, Frederic, Karine, Carla, Nina, Nicolas, Franck, Giles, Ousmane, Lubos, Xiao, Benoit, Raphael, Antoine, Rémi, Felix, Florian, Arthur, Nolwenn, Adrien, Iannis, Romain, Franck, Ioannis, Pierre, Émilie, Jeremy.
On the environment side, I went through a very large set of them:
- From 10k to 5 employees
- From French administration to startups, not to forget manufacturing company and consulting companies
- From 20 years-old legacy project to green field with no product vision
- From low level embedded system to highly distributed system
- From impacting few users to millions of people
- From generated nothing to millions each year
I'm pretty proud of this diversity.
The dark side
Some people
A long time ago, I was really interested in psychology and self-help book (loosely related), and I recall more or less a sentence:
Getting older is inevitable, growing is a choice.
Along these years, I have been:
- Insulted: I was responsible for running the CI, I have spotted a bug, in order to save some time, I have suspended a gigantic change-set which would fail (to add some context, a CI run took 4 hours, and the version control system was locking the files, preventing anyone else to submit changes on them), I have emailed him (which have been reviewed by one of my co-worker) with a patch. In reply, he insulted me in an email, with my N+2, N+3 and the HR.
- Insulted then harassed: I have joined a company while I was recovering for severe anxiety (a side effect of a medication), I wasn't full of enthusiasm. Three weeks later a new team lead joined, after few weeks, he was still struggling, at some point, he asked a question, I didn't have the answer, he shouted an insult, that I was preventing him to do his job. Then he started to harassed me, and convinced my manager to do so.
- Harassed: at some point I was leading a team for few months, my boss at the time wanted the team to grow, I have done all the hiring work (interviews, etc.), among all of them, I have interviewed one of my boss' friends (I didn't know it at the time, I also didn't know that he got access to our product codebase and the interview exercise before the interview), he failed the interview, so I have rejected his application, 15 minutes later, my boss called me to say he was hired. Anyway, he had only few years of experience than me, every morning he was spending 2 hours in the channels saying the code is bad (without any solid arguments), so I was wasting my morning to explain over the decisions made (while they were documented). On another hand afternoon were dedicated to privately tell me that I was too harsh in reviews (which took me five times longer to write).
- Threatened, harassed, then insulted: I have joined a project as leader, I was really involved in it (working 50-60 hours a week for months), at some point, I have had a good job offer, he started by threaten me to drop the project, then telling me that I was so bad at my job (he came with a long list of discussions we had, but only with the original rant, not the conclusion) it's the best I can ask, and I stayed (it was stupid). During the following months he was systematically talking O2O with my subordinates, so all the direction I was giving were dismissed. Then he started to ask me if I was right after each meeting, he then cut my stock options (which were in my contract) arguing that I was planning to leave anyway. When I finally submitted my resignation, nothing... for two weeks, then he talked over me in meetings, insulted me a first time before the end of my notice period and another time 1 month after I left.
While I don't think I have been in toxic cultures, none of these perpetrators had been in any trouble after that, as far as I know.
Food for thoughts: I have read some day that culture is defined by the worst behaviors you tolerate.
Tactics
Given all of that, here are few tactics I have found:
- Never let an opening for a counteroffer: from experience, either they'll do one, then you could ask why they didn't do it by themselves, or it'll be worse
- Be inflexible on your boundaries: it's better to be clear right now, rather than letting the go farther and farther until you break, a small disagreement now is better than a fight later
- Inquire on the team you'll be in, people matter equally to the project criticality
- There is no tradeoff between compensation and growth opportunity
- Focus on the team, not on completely hypothetical, outside your control, change that may happen anytime soon, projects change, teammate don't
- Never say 'no', never say 'yes': most of the time, you are at a point where you have already more work than you should, a 'yes' would be irresponsible, a 'no' would upset so much they could be nasty, simply expose the situation and ask to re-prioritize
- Focus on power dynamics: I've never encountered a situation where power dynamics are very unbalanced and everything goes fine
Regrets
For a long time now, I'm trying to have more remorse than regrets, for the moment, I stick to it.
In addition, I have recently crossed Jeff Bezos - Regret Minimization Framework, which can be sum-up as follows:
When I'll be 80, what are the thing I'll regret
I have few opportunities (job offers), I regret having turn down:
- AWS Berlin: it would have been a great opportunity, especially because I would have had all stock options when the COVID-19 hit (and Amazon stock price was really high), turned down by fear of failure
- Soostone: a great opportunity to do some Haskell abroad, turned down because I feared my English wasn't good enough
- IOG: I actually failed my first interview because I misunderstood "Simple Haskell" and I didn't show my full knowledge of Haskell, they were kind enough to propose me another team, turn down by fear of being stuck
- Nova Discovery: actually, with COVID-19, I have found a great confort with remote work, going back to on-site was overwhelming to me
To be more general, I have few decisions I wish I did differently:
- Staying when I wanted to leave (see above section): not so long ago, I watched an interview of Uncle Bob where he stated that good traders are not the one who take good positions, but the one who left bad position earlier
- Focusing on Haskell, don't misunderstand me, Haskell is the best language to build quickly reliable flexible systems, but if you want a remote, flexible, highly paid job, you'll have to work really hard
- Working extra hard: at some point you can be good enough, aside of my 40-50 job, I invest 10-20 hours each week, writing, reading, experimenting, I can produce high-quality outputs in product, backend, infrastructure, database, but it does not mean my salary is multiplied
Conclusion
That's it for the first 10 years, they were interesting, only 40 to go.