How i almost destroyed my career in software tech
This is an expose about all of the things i did that made it almost possible for my career in software development to hit the lowest point of no return.
As with anyone else's career, my career was never a straight path. It had some false starts and some impulsive detours. It started properly in 2016. My career struggled, stabilised and peaked in the 2020 but went downhill after that until this year.
I went into the labor market unprepared and focused mostly on technical competence and money. I had the wrongest mindset and world view (i.e. beliefs) anyone could have. Apart from being deeply naive and didn’t have the privilege of being guided by someone who had experience in the private sector.
All the lessons i learnt and outline in this article were learn’t the hard way. It is for this purpose i write. So, you can learn from me what i didn’t learn from anyone.
Earlier in my 20s, i had the wrong approach to life. I was too serious, too rigid and lacked self-awareness. The only things i had going for me were the motivation and drive to succeed in software tech and a can do spirit. I amassed a lot of knowledge and applied myself to being competent on the job.
However, i ignored areas where i was weak. I didn’t see the need to be flexible and easily approachable. In my mind, being flexible meant being susceptible to losing focus. I took myself too seriously. I had to be the very best software engineer technically.
I remember many scenarios where comments on my PR (Pull Request) disgusted me. I felt such PR comments questioned my competence (Lol— 🤣). I would get really upset if i had to clean up after another engineer (who should know better) especially cleaning TS (TypeScript) errors or code formatting issues. I also felt that whoever was questioned my non-idiomatic methods didn’t know enough of the programming language and needed to go skill up.
All these were a hinderance. I was wrong on all counts. I don’t want you to be wrong especially if you’re just starting out.
The right world view is essential for success in the corporate world. The wrong world view will get you running in circles. When i was in my 20s and starting out in the corporate world. I had a set of beliefs that were wrong.
As follows:
- I believed the world was a meritocracy (No, it isn’t)
- I believed that hard-work alone pays and you’ll be noticed (No, it doesn’t)
- I believed that people who are independently-minded and apply critical thinking are more welcome in the corporate world (No, they aren’t)
- I believed one can get far in your career by being more knowledgeable/intelligent than by being less stupid (Errr, no one cares!).
- As an IC (independent contributor), I believed i could have a net positive effect on an already dysfunctional team without antagonising anyone even by mistake only if i tried harder (Nope, you can’t! — You’d most likely antagonise your manager/boss than anyone else)
- I believed you can create the best impression with people by just being the guy that does the most work and being very loud about it (Not at all!)
- I believed communication skills don’t matter that much in a work setting (Oh boy, they matter most!)
- I believed that being a specialist is worth more that being a generalist long term for the good of your career in software engineering (Nope! — best to be both a specialist and generalist)
- I believed that in Africa, you can find more people like you who are as interested in the craft of creating fault-tolerant, robust and correct software with little technical debt as much as they are interested in making lots of money (Unfortunately not so! — Most people are in it for the money and that’s fine)
- I believed that i had to be one type of software engineer (a top-down type of engineer who never skimmed over lots of details and wanted to understand much of the process and context to do a good job). A good number of times, it’s important to be a software engineer that can brute forces their way to a solution and uses lots of shortcuts to improve their productivity.
The Merit vs Perception dilemma!
The world seems to be a total meritocracy on the surface. A lot of people tell you “Work hard with discipline and consistency and you’ll succeed”. Nobody ever really goes further to tell you that this is a half-truth. You also need to have an unfair advantage, be liked and perceived as better by others in order to succeed (These 3 things are vital and not optional). If no one is convinced that you are valuable and good to have around, even with all your hard-work and discipline, success will mostly elude you.
The world is a social place first and foremost. It is also a place where interests converge and diverge regularly. Much of the world doesn’t run on logic and rational thought. We see it in news items, politics, economics, psychology and in human interaction.
Merit is the last thing being considered wherever there is a human exchange. Perception is the first thing being considered. You are always being evaluated and measured against an ideal whether you know it or not. Now, this ideal may differ from person to person based on their level of exposure and beliefs but it is the invisible hand that guides that interaction.
There’s a saying in my tribe (Igbo) that translated to English says: “People eat food with their eyes first before they eat with their mouth”. So, before you lead with what you have to offer, make sure what you have to offer is wrapped in a nice package. It’s the package that will be seen first anyways.
It’s a cliche: “Hard-work pays!” but does it really ? In my experience, valuable work is what pays. Hawkers in traffic and elsewhere as well as teachers would be the richest people on the planet if hard work really paid. However, I am not saying hard work isn’t vital or important. I am saying it has to be channeled with some leverage so that outcomes compound.
If many people do not find a job valuable enough to them in real-time or in a short time period, they won’t pay a lot of money for it. The amount of value that a job has is determined by how many people want/need it and how often/well they need it as well as its’ immediate ramifications for them.
Teaching is a very important job. If we didn’t have teachers in schools at all, society would grind to a halt literally. But, teachers get paid very little because their work isn’t considered of immediate value to the schools (the school don’t generate extra revenue in real time just because of the teachers’ exceptional work). Also, their work is totally manual and can’t be easily scaled or be delegated such that their output compounds. Perhaps with the advent of AI and say shift rotation for teachers in schools that might change in terms of compounded output but for now it’s not optimal.
Hard work that doesn’t compound through leverage will always be paid/compensated the least. It’s probably unfair but that’s life. Valuable work on the other hand compounds output. It’s important to work hard in the beginning but work smart too afterwards.
Being too different should be on a tight budget
Charlie Munger once said that “Being overly contrarian in the workplace gets you booted out”. I didn’t believe that until recently. It turns out that Paul Graham of YC fame had written about the same topic in this essay.
I am a natural contrarian who likes to think for himself. This means there are many mainstream beliefs/ideas i won’t completely subscribe to (I was once called “individualistic” by a boss of mine — that was his way of saying: “i was too different and independently-minded”) until i have exhaustively made my findings on them. I analyse a lot but not too much. I usually go back to evaluate my experiences and actually learn from them. All these are not bad qualities. However, in a workplace, they can work against you big time. I didn’t know this and i learnt the hard way.
In a workplace, there has to be strict order for things to work a certain way and for progress to be made at a specific speed. Democracy usually has no place in a work setting for this reason. Bob Taylor and Steve Jobs were both forced out of Xerox Parc and Apple respectively for exactly the same reason — they both reasoned differently and wanted their companies to go in a new (hitherto) unknown direction than the one which the higher ups were used to. Conventionally-minded people fear the unknown and fight it yet they also get promoted faster than most in the workplace and quickly become C-level executives. It should come as no surprise if you have read this Paul Graham essay.
If you are someone who makes use of critical thinking and can spot issues in a process faster that other (or better than a few people can), you would (by implication) elicit a lot of friction (over time) with your colleagues who don’t share your “enthusiasm” or much care about a better and more correct way to do things. If there’s a lot of bureaucracy laced within the hierarchy of the office, the harder it might be to get buy in.
This attitude doesn’t bode well in traditional workplace environments, where climbing the corporate ladder often requires conformity and alignment with established norms and ways of doing things.
In my 20s & early 30s, i sometimes felt the need to say out loud what i thought about adopted company processes. There was this time i wrote an entire treatise in the company #general channel on Slack about why certain aspects of the SCRUM process were suboptimal (Hei God! — 😆). The company already used SCRUM and so my post was largely ignored and for good reason. If anything, it was supposed to be an in-person discussion with perhaps my boss or the product owner. Yet definitely not a message to the entire company lacking existing context.
Now, there are workplaces where being contrarian might/does work well in your favour because it is a place filled with accountable, high-functioning achievers and doers. But, these workplaces are very few. If you are lucky enough to be in one, then go for it.
Otherwise, you may not have a choice than to play along even if you know a better way. Still, emotional intelligence and workplace allies can also get your ideas heard even in a company that seems not to welcome original thinking or critical thinking. More on workplace allies later!
Being a solution-oriented, proactive person who regularly steps outside his/her comfort zone and willing to question processes and suggest alternatives as well as improve team efficiency will always get you noticed. However, you have to ensure you have a manager or C-level executive who is in your corner for this to work well for you else it may just be a target on your back to kick you out the door.
If you have target on your back, you are going to get side-lined in promotions (perhaps). You are going to be given weird nicknames (I was once given the nickname: Ifeora-JS 😁 because i introduced a better way to structure jQuery code by creating a small code library nobody had used before which i documented using lot’s of code comments and tried to share the details using a documentation wiki (this contained the motivation on why i chose to create this code library in the way i did and its’ benefits). Lastly, you are going to be ignored when next you wish to share an idea/solution.
I later realized that the reason i was mocked (the Ifeora-JS thingy) was because this was interpreted as me wanting to be seen as “smart” (smartest guy in the room aura) instead of what it really was: suggesting a better way to do things.
So overall, ensure you are never in this situation. If you are like me and you notice the workplace doesn’t reward such, you need to suppress that part of you during working hours. Go with the flow and with the established process. How you feel about it doesn’t matter especially if you are an IC (independent contributor).
I had to develop an ownership mindset in order to be promoted once in 2022. My only regret is that i didn’t develop it earlier.
Also, a word of advice: You see that all-hands meeting you don’t like attending, pay attention to it and understand what every other department is doing/contributing and see how your work can help them. In my case, i wrote code to help the marketing team, product team & customer success team. You’ll become a valuable member of the company so quickly, you won’t believe it.
Majoring in the lesser minor
You get farther in life by being less stupid than by being more intelligent, knowledgable or smarter. As Charlie Munger once said: “invert the problem and you’d be much better off”. You get less stupid by actively learning from other peoples mistake and also your own mistake.
This is more important than acquiring much more knowledge of maths, women, science or philosophy.
Being stupid is more costly than being less intelligent. No one cares much about how intelligent you appear to be. You could certainly fool people into thinking your are smart and intelligent but a stupid person fools no one.
Much about progress in life is avoiding stupid detours and pitfalls than doing remarkable things repeatedly.
Furthermore, it is still important to be knowledgable as that makes you less stupid (as i stated earlier). But focus on being knowledgable about life than about abstract or book-y things.
Dealing with dysfunction & the silent rules of corporate
There was a time i thought that it was possible to thrive in a dysfunctional team where everyone is only about themselves. Joining a dysfunctional team is more common than most people think. The hallmark of a dysfunctional team is lack of trust and camaraderie and the willingness to throw each other under a bus (P.S. this doesn’t include being a team player in the face weaponized incompetence and sneaky mediocrity).
When you join a company newly, there are certain unwritten silent rules of corporate that you should know (“unwritten” because it’s not in any employee handbook and “silent” because nobody tells you except maybe your mentor/friend/family member who has worked in corporate before you). In my 20s didn’t have a mentor or anyone who told me about this. I didn’t know there were unwritten silent rules. So, i learn’t the hard way!
The first unwritten silent rule is: Shut up for the first 6 months after you join a company and observe everyone else while you do your job. This allows you to pick allies more reliably and avoid moving in the wrong direction even by mistake. This strategy works even in a company filled with dysfunctional teams. It also helps you navigate the hidden or obvious politics, because you really have to play the game!
This rule is the first one i flouted at most companies i worked in including the one i was promoted at. It came with dire consequences. I was very outspoken, sometime having no filters (especially if i had politely and gently brought up a pressing issue multiple times in the past) and often forceful in my approach to be heard. I felt i needed to exert myself from day one so everyone knows i am not a push-over and doesn’t overstep a boundary with me (Lol — 😂).
I was 24 years of age, naive and lacked tact (a.k.a emotional intelligence in this case). The problem was trying to do it by myself. A bit daring yes but dumb! In a workplace, you need allies if you are ever going to heard, get your suggestions/ideas approved or get a raise/promotion. You need 2 types of allies: peer allies (on the same level as you) and boss allies (higher ups).
Trying to go it alone will leave you exhausted, frustrated and defeated.
Never attempt to fix/influence a dysfunctional team to become functional by yourself. It’s a fools errand. There’s probably something you don’t know about the situation. The team may be dysfunctional by design or by decree (what we call Oga-driven Development in Nigeria 😬). The only way to probably fix the dysfunction is to gather allies over a long period of time and gain higher authority by way of promotions.
The second unwritten silent rule: Always appear cooperative even when you might want to share an opposing feeling. It is very vital whether it be as part of a written communique or message or when verbally responding a query or false accusation. Remember the famously anonymous surveys HR sends out every quarter maybe ? Ok, i have said too much already (😎). On to the next point!
Communication be everything for all its’ worth!
Communication is everything. In this age and time, being a master communicator is more vital than ever. If you cannot communicate well and cannot tell stories, you are going to be a footnote somewhere somehow. When people ask: “Which is more important for career growth; hard skills or soft skills?”, the correct answer is both.
In my teens and late 20s. I had always known something was wrong but i couldn’t put my finger on it. Growing up with childhood trauma that i didn’t even know about until i turned 32, this made me struggle at almost every workplace i was a part of. When you don’t have the right emotional regulation and a temperament that is work-friendly, it’s never going to go well when relating with people.
Sometimes, “village people” might just be unresolved traumas.
Therefore, it is very important to develop your communication and story-telling skills. A great bonus would be to develop your speaking skills while you’re at it.
However, you cannot be good at communication if you lack emotional maturity and control. All the communication courses and books in the world won’t help you.
A jack of some trades & the master of one!
It is important to specialise eventually especially in software tech but my mistake was specializing too early.
To be clear, i now believe it is important to be both a generalist and specialist in this world. I know a lot of people say you can either be one or the other. I say why not both ?
In the early days of my career, i wanted to be master of everything i committed to learning. It wasn’t enough to just know it on the surface. I had to learn the basics well and deeply which made me so knowledgable.
Over time, i found that this wasn’t working for me as i would be asked or tasked frequently and infrequently to do something outside my area of concentration for mastery. This will have me scrambling and racing to learn something entirely different for a short period just enough to get the job done.
Eventually, i would move on and all that i learn in that short period of time would vanish from my memory due to lack of practice and retention activities. This led me to decide earlier in my career not to expose myself to such short periods of learning, doing, and dumping. I wanted the consistency of sticking to an area of learning and doing until mastery. I so badly wanted to be a specialist first.
In my mind then, this was a great decision. It would turn out to be a decision i partly regret. Being a specialist is good. Yet, for the most important roles in life that truly make one extremely valuable, being a polymath or generalist is better. But, the world truly belongs to specialist-generalists!
Form my own experience, it is easier to become a specialist-generalist by first becoming a generalist than by initially focusing on being a specialist.
Being a generalist before becoming a specialist makes your skills more transferable in diverse unique ways. This is as opposed to being a specialist first and being stuck when the environment/market now requires you to be more of a generalist.
Finding a tribe that fits with my creative frequency
I believed it was possible to find software engineers who were interested in the very things i was interested in (and like-minded in the way i was interested in stuff). Specifically, the things that pertained to a love for the craft of creating software, experimenting with logic a lot and being a builder of tooling.
For a long time, i didn’t find my “tribe” because i think i was too interested in how things worked on very granular levels and also in building tools from scratch while improving them. Well, in Africa (where per capita incomes are low) very few persons are interested in that sort of thing.
Here (in Africa), people want to make money legally (or illegally) without being too invested in the process. I think this is fine but i would wish that more people were like me and not less.
I spent an unhealthy amount of time looking for this “tribe” of mine that i kinda lost myself. This is a mistake i won’t soon repeat.
The two-in-one type of engineer
If you are a software engineer who has been around the bloc for a while you’d know (or notice) that there are 2 broad categories you can place engineers based on how they problem-solve.
You have the bottom-up engineer and the top-down engineer. A bottom-up engineer typically employs very little methodology and is more focused with making it work now without understanding a lot of details. This approach emphasizes starting from the ground level, focusing less on (or skimming over) the details and functionalities of these smaller parts that make the larger system work. The bottom-up engineer is content to dive into the muck and dig (or brute force) his/her way out by trying a lot of things quickly towards a solution
A top-down engineer is the opposite. This type of engineer pays a lot of attention to detail and isn’t just interested in getting things to work but understanding how and why things work the way they do and why doing it in certain other ways may be problematic. This engineer is very methodical in their approach to problem-solving usually able to avoid issues (or find interesting workarounds and fixes) by understanding things on a deep level.
It turns out that i am a top-down engineer through and through. This has led to me being disliked and outrightly ignored by colleagues, team members and co-workers.
The book Software Engineering at Google talks about this briefly in Chapter 6. 👇🏾👇🏾👇🏾👇🏾
Fortunately or unfortunately, in every company i have worked for, bottom-up engineers outnumbered top-down engineers. However, since i didn’t know about this difference in styles of approach in my 20s (earlier in my career), it almost ruined a lot of collaboration at work.
I always wanted to get a fuller understanding of things before proceeding and my team mate only wanted to brute-force his/her way towards a solution. I felt brute-forcing took more effort and time than knowing the things deeply. So, while i am off trying to dig directly into the source code or documentation, my team mate, now frustrated with my approach, simply moved to another bottom-up engineer who could help him try many things quickly to land on a solution.
I usually got the “Omo, you are wasting time…” feedback from the other bottom-up engineers i worked with. 😂😂😁 they couldn’t tolerate me and my approach mostly.
Now, my mistake was not understanding that both approaches had merit and deserved to be entertained under specific conditions/context. But, insisting that my approach was always the best one.
Over the years, i have learnt to become both and switch when the occasion calls for it. This maturity has made me a better engineer.
Conclusion
The truth is that all these lived experiences have taught me and made me reflect more on my path and what carries more leverage where it concerns career progression.