A Taxonomy Of Software Companies
The type of software company you work for has a massive impact on your career. In the last article, we saw how your approach to interviewing can hold you back in your career. Working for the wrong type of company can have a similar effect. Working for the right type of company can act as a force multiplier. It can push you further than your skills alone could. And it can also provide on-the-job training. Or an environment of constant learning and development. Or in very broad terms, it can “open up doors”.
There’s, unfortunately, no one way of describing a company. Rather I’ve highlighted seven distinct ways to speak about tech companies. Each is a choice the company makes. Some are neutral, but many do have material career implications for you. I also want to share what I think are the “good” choices. I hope this information will prove useful to you.
I’ll reiterate my assumptions from the last piece. You’re a software engineer with some years of experience. You want to get the most out of your career. You’re based somewhere in Europe, the US, LatAm, or so. Life is going OK for you and you want to optimize your long-term career. If this is not you, then you may or may not get something out of all this.
Profit Center Vs Cost Center
Profit centers are those departments that help the company make money. Think sales, marketing, or developing new products. The focus here is on impact and ROI.
Cost centers are those that exist to support the profit centers. Think accounting, facilities maintenance, or “traditional” IT. The focus here is on keeping things running. Or avoiding regulatory trouble. Or generally keeping costs down.
You can be an engineer in either a cost center or a profit center as you can see. It’s a bit tricky to figure out if a role is in a profit or a cost center without actually being in the company. For example, software engineers are in a profit center at a modern fintech like Revolut or Wise. But they’re in a cost center in a traditional bank. But software is eating the world and every company is increasingly a tech company. In the future, we’ll be speaking of the degree of alignment with the primary goal of the company.
My first piece of advice is to aim to work in a profit center. You want to work in a division/team/project aligned with the way the company makes money. Which is part of the strategy and can actually drive it. Which sets goals, rather than being set goals.
Stable Vs Fast Growing Vs Going Down
Stable companies tend to grow in a predictable fashion YoY. Think 10% this year, 7% next year. Most companies are like this, whether small or big, startup or established brand. This means that projects, teams, promotions, budgets, or headcount tend to follow these predictable patterns too. As a result, some things are rather zero-sum. If your project gets approved, then another project won’t be. If Alice gets the promotion, then Bob won’t. And so on. The bigger companies here tend to have a lot of procedures, rules, and foolproofing in place. It’s a good place to learn how to do things the right way, but career development tends to be rather random.
Fast-growing companies grow fast. Duh. Think 3x this year, 2x the next year. They’re usually startups that have achieved product-market fit. Of course, everything else needs to scale up too. Teams, projects, headcount, complexity, etc. But it’s all positive-sum. The pie is getting bigger, so there’s room for funding for both projects, and Alice and Bob can both get promoted. Yet, scaling like this is taxing. Rules and procedures are ill-defined and folks are learning as they’re going. In healthy setups, it’s a place where you can grow and take as much responsibility as you can handle. I’m unhealthy setups the chaos works against you and you end up with burnout and not much to show for it.
Some companies are not growing though. It can be a sudden fall or a slow decline. The long-term outlook is not good though. But there are a lot of interesting experiences and also opportunities. When other folks are leaving, there’s also a chance to take on more responsibility.
Fast-growing companies are the most exciting in my view. They’re starting to become more common in Europe as our startup scene is becoming more mature. And they’re not so rare even in Eastern Europe. After being in both slow-growing and shrinking ones, I much prefer these ones. But there’s a lot to learn at mature companies too and some experiences you can only get there. There’s also a good bread to eat by applying the learnings of big companies to scaleups in need of structure. So a tour of duty in a stable company, followed by one in a scaleup or startup is quite attractive.
My second piece of advice then is to bias towards fast-growing companies, then big stable ones. Avoid shrinking companies, and avoid smaller stable places.
B2C Vs B2B Vs B2G
Business to consumer (B2C) companies build products for the general public. Think Apple, Google, or Tesla. These companies know their users in aggregate, via metrics, funnels, or segmentation. Figuring out what to build takes a deal of experimentation and A/B tests. It’s the developers and product managers themselves which drive this.
Business to business (B2B) companies build products for other businesses. You can then target small and medium companies (SME) or large companies (Enterprise). Think Atlassian or Slack. These companies have a good grasp of their user base. They are sales-driven many times. Work comes out of requests from clients. Or via adopting the new developments of a competitor. Sometimes even major work can come out at the request of a single client.
Business to government (B2G) companies build products for governments or other state-backed entities. Think Palantir or Boeing. These companies should have a very good and deep grasp of their customers. The work itself is very custom to the particular client.
Big enough companies will many times have a B2C and B2B component. And huge companies have all three.
There’s interesting and worthwhile work across the spectrum. And while the nature of the products will vary quite a bit, the biggest variation occurs in the way product management is done. This affects how you as a software engineer experience building the product. As a telling example, in a B2B environment is common for a feature to be “done” when it is released in production and clients are using it. Whereas in a B2C environment that’s only stage one. Stage two is the analysis of the impact on the client base. If it’s not satisfactory then the feature is further tweaked and experimented with. If the impact continues to be negative, the feature will ultimately be dropped.
There’s no prescriptive point here, but make sure you understand the nature of the product going in. I’ve seen plenty of devs from a B2B background frustrated by the natural drop of a feature by a B2C company.
Product Vs Project
Product companies develop their own product and sell it to customers. The customer can be a person, a business, or a government. The incentives of engineering are aligned with the successful delivery of the product. This in turn is aligned with the success of the company. It is the team itself that handles the product management.
Project companies develop products for their clients. In most cases this means some internal use-case. But especially when selling to governments the end user can be a regular person. The incentives of engineering are not always aligned with the successful delivery of the product. Or with the wider success of their client. The product management is with the client and control is one-way.
Again, many big companies end up doing both. Think of IBM which both builds a large set of technologies and then uses these in their various services projects.
There are interesting experiences on both sides of the divide. But I’ve observed a rather strong correlation between a great career growth experience and working in a product company. And I’ve rarely seen folks transition from product back to project companies.
Software Vs Non-Software
Software companies build and sell software. That is, the software itself is the product. As a software developer, you are most aligned with the value generation in the company.
All the others and by far the majority are not software companies. Software acts as an enabler and they still need software developers. Quite a lot sometimes. Examples range from traditional IT in a bank to the software that powers cars. But even ride-sharing companies like Bolt fall into this category in the end.
On paper, as a software engineer, you should join a software company. But in practice, some of the coolest stuff out there happens when applying tech to the real world. What you want to search for are companies that have embraced the software tech company approach. And subsequently treat engineering like these companies do. And not like some secondary concern.
Big Tech Vs Others
BigTech is an umbrella term for the biggest technology companies out there. It is the FAANGs most visibly. But also any large multinational like Adobe, HP, IBM, Intel, or Samsung. But not necessarily large consultancies like Accenture or Cognizant 🤷. These companies are big and mature and very rich. There is all types of work to be had here. From cut-of-the-mill internal tools to Nobel-prize winning research.
By some accounts, BigTech hires about 5-10% of the global software dev workforce. That still leaves about 90% who work in non-BigTech (OtherTech?).
Folks have glamorized working for BigTech, and especially the FAANG companies. They are seen as the best employers . And in a certain sense, they are. But they don’t have a monopoly on cool projects, smart people, crazy compensation, or anything else you’d want out of a fulfilling career.
HQ Vs Local Hub Vs Outsourcing Vs Remote
Working in the headquarters of a company means working closest to where the power center of the company is. Like the CEO or other key execs. If a company is the Roman empire, then the HQ is Rome. Being here has an impact on career progression, choice of projects, etc. But it’s also a very crowded place.
Working in a local hub of a company means working in another office, which is not the HQ, but is close enough. All companies above a certain size have multiple sites. Primarily so they can tap into all the great talent across the world. There are pros and cons to being on such a site for an engineer. But the smartest companies know not to limit career growth or access to cool projects.
Working in an outsourcing fashion means working for a separate company. Usually somewhere in a low cost of living country. It happens on a project basis de facto. But you’re integrated into the bigger company and their teams. It can feel like it’s a product company many times. Regardless, there’s still a gap between the outsourcing hub and the other sites of the company. Projects and career progression are usually limited, at least within the client company.
Working remotely means being away from any big office. Sometimes there isn’t anyone else in the country. Traditionally, this has been a choice for folks looking for flexibility. But there was always an understanding that some other things were sacrificed. With the rise of remote work during the pandemic, this is more and more not the case.
Where you work relative to HQ is a much more complex decision here. It ties in with many other questions of how and where to live your life. But as long as you have a choice, my third piece of advice is to aim for HQ or local hub work. And to avoid the outsourcing format. And to understand the implications of being remote.
Conclusion
That’s it. You have seven ways to look at the immense variety of software companies. There’s more to discuss of course. I haven’t covered industry, locale, or working in “challenging” spaces (AdTech, gambling, adult, etc). But you should now have some new vocabulary to speak about software companies. As well as my take on what the better options are.
What sort of company to pursue depends a lot on you. I have my own biases and abilities which shape my view on the best.
But I do believe there are three pieces of advice I can leave you with which are close to context-free. They are:
- Work in a profit center. Do not work in a cost center.
- Have a bias for fast-growing companies, and then for stable big ones. Avoid small and stable or shrinking ones.
- Go for HQ or local hubs. Avoid outsourcing ones. Understand the implications of being remote.
Of course, that’s not the end of the story. To summarise the advice at the end of ”Seven Anti-Patterns For Your Developer Job Search”:
- Look at the team and project you’ll be working on, not just the company.
- Look for the highest performing collective that’ll have you.
- Always be on the lookout!
Anyway, that’s enough from me. Thank you for reading this far! If I’ve managed to get you excited you should know that Bolt is hiring. You’ll be working in a profit center in a fast-growing company. We are a B2C product company and we take our tech seriously. Check out our new engineering site too for some of the interesting things we’ve been up to. Till next time!