When it comes to programming, I was always a hobbyist. I grew my skillset and passion on a diet of solving puzzles and hacking things together. If you gave me a self-contained problem that I could code a solution to I’d be your best friend forever. And most of the time, I’ve learned, this is the core of what you need in order to perform well at the average SWE interview. When you get through the door, however, the landscape drastically changes.
I’ve tried to recount below the distinct skills that I feel I lacked most sorely when attempting to take my hobbyist mindset into the working world. The following reflections are, of course, heavily biased to my own experiences. I’ve worked within projects with only a couple of people, startups from 8 to 200+ people, and corporates as large as 50,000, and what I’ve written reflects that journey. Your mileage may vary.
People and communication
Communicating, enquiring, pushing back, asking crucial questions, and sharing insights. Doing all of these without too much ego, and without over-biasing to your own opinions, is very tricky. In the past I often mistook passion for some kind of license to impose opinion. Passion is a wonderful energy, but it can give rise to recklessly dismiss others’ very valid thoughts. Humility, kindness and listening are hard to master, but worth dedicating time towards.
Updates and deadlines
Being asked “how long will this take?” always terrified me. I never had a good answer. I’m better now, in that I take the approach of “Take however long you initially think, then double it”. Even with this, you’ll usually be wrong. The more extraneous or chaotic factors are involved, the more fuzzy the estimate will have to be. Keeping people updated is key. Truly understanding the needs of PMs, managers and all other stakeholders will make your life 1000x easier (and theirs!).
Code comprehension
This, for me, was and remains to this day the greatest challenge. Truly understanding the code written by others — internalizing it as if it were my own — is incredibly hard. I never figured out how to be good at this. Learning through test suites or reverse engineering via a UI or CLI were my favorite approaches until I had to deal with spaghetti architectures with hundreds of classes. There is no magical elixir. The answer is probably time, focus, and some special ‘something’ that I haven’t yet found. Crafting the right questions to ask people is likely crucial here. But sometimes, at least for me, my confusion is so severe that I cannot articulate where to even begin.
Just making it work
For perfectionists, this is hell. But it’s important. Perfect is the enemy of good. The increasingly marginal benefits yielded on the journey towards perfection are rarely worth it anyway. You may not get to work on the things you most want to, but if you are strategic you can carve out a role where you’re able to. And in this role you can give your perfectionism an outlet.
Sharing knowledge and helping others
This comes naturally to some. Other people find this difficult. I tend to love sharing knowledge, but only if I feel confident in my understanding of it. If I lack confidence, I’d rather shut-up and say nothing. but this is also a trap, because in many places of work it’s rare for anyone to know all the things anyway. It’s better to share what you know humbly, hopeful that someone else knows more, than to share nothing at all. Seeking help and helping others isn’t always about Q&A; it’s about spotting gaps in confidence or knowledge and working with them to bolster those areas. I feel like pair-programming (or even group-programming) is an often sidelined but incredibly valuable tool for this.
Performing to others’ metrics
A lot of the time you will value your work according to your own biased reasoning and passions. Sometimes these won’t align with how you’re being judged for that work though. You’ll be pushed and tugged towards towards understanding your work through metrics and expectations that you may not agree with. Finding a place in your heart and mind where you can reconcile these differences is important. Passion, again, can distract you from the sometimes less exciting truth: that you are employed to produce output aligned with an economic motive. Crucially, if you can find a place of work whose metrics and values truly align with yours, your life and work will be happier and more fulfilling.
Making it work for you
The hardest lesson. And one that I often reflect on. There are many types of career available in the world of making software. Finding one that works for you is hard. Don’t lose hope, and don’t be afraid to explore hybrid roles or even other types of work entirely. Life is short. The world is large.
Thanks for reading! Please share your thoughts with me on Twitter. Have a great day!