Growing your tech stack: when to say no
- Local developer utilities (one-person programs, testing tools) are very low-risk. They run on your own machine, though a whole team can adopt them, boosting productivity. If not widely used, switching environments is harder and you might compromise uniformity, but it is often a worthwhile trade-off.
- Deployment infrastructure tools (monitoring, logging, provisioning, building executables, deploying) are a moderate risk. They automate tasks for the whole team, which means the whole team (and deployment) stops if it breaks. But they reduce risk in production/deployment compared to manual set-up and troubleshooting. They constitute a hot area for development and you risk falling behind your competition without them.
- A new programming language is also a moderate risk. Each language calls for new build tools, libraries, dependency management, packaging, test frameworks, internal DSLs. More than one person must learn them, or you get code no one but the developer understands. Getting your team on board, fast becomes your responsibility. You can mitigate the risk by carefully isolating the experimental code so that it becomes replaceable. Consider the tooling and documentation available before you select a language and whether other people have integrated it into a stack like yours (and written about it). The more languages you use, the greater the cognitive overheads when debugging.
- Adding a new database is a serious risk. A stateful system of record is critical to your business: if it goes down, you cannot just rewrite it, business stops until you can do a migration. In the worst-case scenario, you lose data. You can mitigate this risk with replication (backup and restore) and migration automation, which you should integrate and test before data enters the system. You need a dedicated team to maintain the database (monitoring, updating, re-provisioning) as load increases.
Full post here , 13 mins read