As a kid, I got into programming largely on my dad’s encouragement. Despite not having any background in tech himself, he correctly surmised that computers will become an important facet of society; the impending wave of demand for computing fluency would have provided all the space in the world for an industry to emerge and thrive. Having leveraged this rise in software percolation in my own career, I’m glad to have heeded that suggestion1.
For the handful of instances when everything lined up to take my career meaningfully forward, there was at least as many times when a missing piece—or three—seemed to stall any possible progression. Whether it was the role I was playing, the team I was assigned to, or just the broader macroeconomic conditions, shit happens. On the flip side, though, I’ve always reflected on which variables in this grand equation I could control, and which I simply had to tolerate and persevere through—hoping, in Calvin and Hobbes fashion, that negative experiences can still be instructive and perhaps even build character.
One key observation, though it may be obvious when stated: I’m better off when my firm values my role.
I came out of school, with a B.A. in Computer Science, with two job offers: one to Applied Materials (a hardware chip manufacturer) and the other for FactSet Research Systems (a professional finance software company). Both companies built software in-house, and needed to maintain and enhance the code that powered their businesses. I ended up selecting FactSet and eventually spent 4 years there, much on account of the colleagues—many of whom eventually became friends—who shared that office in San Mateo. In hindsight, those years were an investment in life, not work.
Since that first job, I’ve held a multitude of positions as both software engineer and manager, for companies that have a wide range of products from direct-to-consumer to tooling to 3-sided marketplaces. In a world where the efficiencies enabled by technology become table stakes for all industries, every firm tautologically becomes a tech company, and subsequently has some need for in-house software teams. The actual experience of working for these companies ended up being significantly influenced by whether the firm itself saw software as critical to its success.
There’s an old career adage: absent any strong preferences for domain or role, stay close to where the money gets made. In other words, all things being relatively similar, strive to join a company’s profit center, not its cost center. A natural extension is then to not only to pick departments that generate money for the company, but also ones where your job function 2 is pivotal to that department’s profitability.
Having the company recognize the importance of your function confers a nice set of benefits and a breadth of positive second-order effects. It’s easier to procure resources and budget for your team; layoffs and restructurings generally impact your team less; you have more say over your own work and those of other functions; at times, you’re in pole position to set the standards of conduct which then gets applied to the rest of the company. Google has a well-known reputation for a strong engineering culture, and I can confirm via my own experience that the company features a prevalence of engineers and engineering practices across everything that it does. It has become a software engineer’s utopia not because of the zany office furniture and geeky toys, but because engineers generally have a ton of authority over what to work on.
All that said, it’s a strategy that doesn’t necessarily optimize for compensation. In fact, my own experience has been that large compensation packages can be a sign that the business is thriving—and joining that company and business unit would be an amazing opportunity—or it’s a warning that many other aspects of the job are subpar and the only way the hiring manager can fill the role is to pay a lot of money. In some instances, it can end up being a trade-off in compensation for job satisfaction—a tamer variant of the bullshit job phenomenon, whereby the non-monetary perks of a job are themselves a form of compensation.
It’s a trade-off I would, and have, happily make.