Where good architecture and code happens
There are a lot of software engineers that love good architecture, clean code, and sufficient documentation. As a one, I can say that it is an ideal of our profession. An as persons trying to optimize the suffering of our daily lives we sometimes ask the question: are there any companies that do this good stuff? Or is this just another Holy Grail that cannot be reached and we are all doomed to wade through the swamps of incomprehensible architecture, code... and the world?
This problem goes far beyond programming as the clash between immediate needs and future needs arise quickly in any discussion on the topic, but let philosophy to philosophers and restate the question in a more usable manner... How to find a company that has the highest probability to maintain a good architecture with a good code?
First of all, one must always realize that nearly all businesses are really interested in making money, not in making anything well done. A vast amount of businesses will sell you crap just to get to your wallet and that applies to food, clothing, our precious phones, games, software... We as software engineers are just employed by the particular business to reach into the wallet in the cheapest manner and hence all the tricks of making the cheapest software possible are used by the business people that (mostly) rule us.
However, in the long term, the developed software should be also sustainable, not just maintainable, but should take a predictable amount (of time and money) to keep functioning, to be changed slightly as the target market changes over time and not to exploit anyone.
So here are some ideas of my and my friend how to find companies that do this. For convenience, the various ideas are grouped by the main criterium.
One criterium to use could be to evaluate the size of the company:
- Small companies (just a few people) typically fight to do the stuff to meet the need and to get enough money for the next salaries. Do not expect much of the good architecture and clean code there as fighting for survival prefers the easy and "temporary" solutions.
- Medium-sized companies (tens to hundred people) typically are already with stabilized cash flow and maintain their market position so there is time, but not many. Some good architecture and clean code may appear here and will attempt to strive, however, this will entirely depend on the luck, capability of the few folks that were there when the company was transformed from the small one.
- Large-sized companies (more than a hundred people) are typically well-off, having money and time to have good architecture and clean code...
However, this is when this criterium falls shorts as we know (or have direct personal experience):
- There are occasionally some small companies that can maintain good architecture and clean code, however, this is mostly in high-yield fields or when they hit a unique niche where there is no other option.
- There are too many large companies that just do not have good architecture or clean code... just the exact opposite! And the situation is mostly getting worse without a great effort.
Can we improve this criterium?
Size to endeavor ratio
We could somehow (at the job interviews for example) consider the overall company endeavor. In other words how much the company does relating to the size of their team, a number of teams...
That is however quite hard to do, but there are some hints about it:
- One product - always a good sign when the company works only on one product building their market and their brand. It's theirs so there come high stakes that the good architecture and good code pay off as everything must work in order to prevent money loss. To evaluate this even in more depth you would have to evaluate the endeavor of the whole business from an economical perspective, which is typically beyond the capabilities of most people.
- Custom development - really a bad sign that there will be haste in delivering and that the company is not managing their brand in what they deliver so why bother with good architecture and clean code... if it works, ship it and invoice it. Some's outliers can be found but the IT outsourcing is out of the most painful traps ever as companies are willing to leave their critical IT infrastructure to someone else whim.
Moreover, this can be peeked into by questions for typical tech debt payment per sprint, number of ad-hoc tasks, medium-sized feature delivery estimates, number of end-user-features delivered per release...
As this is hard to evaluate, are there any other ways how to assess it?
For business people there exists a Growth-Share Matrix (BGG for short) that is used in order to evaluate companies relating their profitability.
This can be used in various ways to serve our purpose of searching companies striving for good architecture and clean code. Though it mostly applies just to companies with their products, not companies doing custom development only. So how does it relate?
- Question marks - the endeavor needs to get fast to the market to claim it, fast coding, ugly architecture, hacky solution... all in place to get there. Some good decisions can happen especially when highly skilled people are there and nobody blocks it. Though the quality is not a priority here.
- Stars - from a question mark the start starts to shine... typically a major architecture decision needs to be taken in order to scale properly, there is not much clean code, but if the technical leadership is skilled then it starts to emerge and direction is set... Though it will take years to get into the state of having a good architecture and clean code.
- Cash cows - the company survived its growth and is now yielding some good revenue... to keep their good architecture and clean code is in fact a major prerequisite. So if the technical leadership is skilled and properly paying (attention to) the tech debt, then this company is ideal for having and writing a good architecture and clean code. Though it may easily get wrong when an incompetent CEO or CTO gets to power and cuts the costs of IT typically with declaring "the product is done, now it just needs a maintenance", one of the biggest lies ever.
- Pets - the company either just does maintenance from low profits or it is just a side product that is kept just for fun or other reasons. Not much is invested there so typically just maintenance happens and would not expect much of the good architecture and good code there.
Basically what you need is to evaluate the company from a lifecycle point of view where it classifies and then answer yourself a question where you like to spend your time extending good architecture and clean code (suggested cash cows) or you enjoy introducing it (suggested stars). If you want to save a position regardless of the shits you work with then choose pets... If you want to get rich, experience startup, try shiny new techs... then question marks are there for you!
From the text above there is one more thing to say, the good architecture and clean code is not between developers... it must be properly backed by the technical managers up to CTO, which is responsible that in all company effort the IT gets the appropriate part of the budget to get a longterm, maintainable and sustainable output... So when your interviews include any higher manager (and it should) this should be what you ask & search for!