How boring should your team's codebases be
Edit: I rewrote this as a blog post of my own, where I expand upon some of the suggestions, might be more readable: <a href="https:&#x2F;&#x2F;blog.kronis.dev&#x2F;articles&#x2F;how-boring-or-novel-should-your-technology-choices-be" rel="nofollow">https:&#x2F;&#x2F;blog.kronis.dev&#x2F;articles&#x2F;how-boring-or-novel-should-...</a><p>Overall, I&#x27;m tempted to agree, whilst keeping in mind that you sometimes definitely need a little bit of novelty, which the author brings up at the end of the article as well. Here&#x27;s a few bits of my personal experience, where some novelty helped greatly in these past few years.<p>Personally, I&#x27;d say that something like 12 Factor apps are a good and supposedly new approach (using mechanisms and approaches that have been around for a while) to let you look at software written in different languages pretty much the same from the outside. For example, you use environment variables for configuration, write lots to STDOUT, don&#x27;t cripple your own horizontal scalability by always reaching for local storage (e.g. when S3 might be better suited) or local application memory (e.g. when Redis might be a good idea). It&#x27;s nice to have those sorts of suggestions in one place and all of the sudden you escape XML or Tomcat setup hell, and can look at Python apps and Java apps similarly from the outside: <a href="https:&#x2F;&#x2F;12factor.net&#x2F;" rel="nofollow">https:&#x2F;&#x2F;12factor.net&#x2F;</a><p>Similarly, adopting containers has been a good solution, both because it allows achieving what people historically didn&#x27;t bother with when having the opportunity of using systemd, but also because all of the sudden your applications are like phone apps - that can be launched in a consistent format on any server that you need. And you get health checks, resource limits, automatic restarts, bind mounts, port mapping and internal DNS, all of which you will <i>never</i> build in environments where the DevOps knowledge or resources (time) are not there.<p>Note: Kubernetes might be too complex for some setups, as HN loves to point you, something like Nomad or even Docker Swarm also still exists and works: <a href="https:&#x2F;&#x2F;docs.docker.com&#x2F;engine&#x2F;swarm&#x2F;" rel="nofollow">https:&#x2F;&#x2F;docs.docker.com&#x2F;engine&#x2F;swarm&#x2F;</a> (just linking this in particular, because it&#x27;s just a small step up from Docker Compose, the pinnacle of simplicity)<p>Speaking of which, infrastructure as code is great! Using something like Ansible is definitely a novel thing to do at first, but cutting off my team&#x27;s write access to the servers and making them use GitOps with code review for the configuration changes has been a solid idea. No more wondering why some random configuration exists, or why it was changed N years ago, now you can just look at Git. No more fat fingering bad changes, and even if you did something like there&#x27;s also code review. No more risks like Knight Capital of partial deploys and if something like that were to happen, you&#x27;d get a CI notification about what&#x27;s wrong. Just describe what you need on the server and let those hundreds of actions execute every morning (or after every commit&#x2F;merge) automatically, ensuring a mostly consistent state - and way more lazily than learning Nix&#x2F;Guix: <a href="https:&#x2F;&#x2F;www.ansible.com&#x2F;" rel="nofollow">https:&#x2F;&#x2F;www.ansible.com&#x2F;</a><p>Furthermore, adopting the &quot;ingress pattern&quot; where all of your apps are in some internal overlay network, but talk to the outside world through instances of Apache&#x2F;Nginx&#x2F;Caddy&#x2F;Traefik is brilliant! No more wondering about how to set up SSL certificates in each of the different application runtimes or even framework versions. No more worrying about setting up rate limits for each application individually, no more worrying about context paths for how things are deployed - you can configure all of that in your web server, even if you don&#x27;t use a Kubernetes Ingress controller.<p>Oh, and forget something like jQuery from the old days, especially when you&#x27;d integrate with numerous low quality plugins that wouldn&#x27;t even work that well half of the time. Just use something like Vue with PrimeVue&#x2F;PrimeFlex or any other premade component library, with Pinia for state management. You avoid the trouble of using React with Redux (though React Query is nice) or the complexity of Angular, while still getting the benefits of writing small, mostly self-contained application components. No more thousand line JavaScript controllers, no more messing around with global state, or god forbid using something like AngularJS. And with JSX, it actually ends up feeling more convenient to write front end code, in addition to Vue getting hooks right, better than React IMO: <a href="https:&#x2F;&#x2F;vuejs.org&#x2F;" rel="nofollow">https:&#x2F;&#x2F;vuejs.org&#x2F;</a><p>But the actual applications? Most of the time, they should be more boring. Using Java? Just go for Spring Boot or Dropwizard; something like Quarkus or Vert.X are nice, but not quite ready yet. Using Node? Look at Express.js, it does everything you need. Python? Django or Flask. PHP? Laravel or Symfony. Ruby? Rails. Every time I&#x27;ve seen someone go for a non-standard solution or actually writing their own framework, it&#x27;s been an utter dumpsterfire. Good luck debugging some uncommented code that has not enough tests when there&#x27;s a production outage and the few code comments that you might stumble upon are in Lithuanian or something.<p>Databases? As a rule of thumb, go for PostgreSQL or MariaDB&#x2F;MySQL. If you need data storage, use something S3 compatible. If you need key-value storage, use Redis. If you need document storage, either store JSON in your RDBMS or cautiously go for MongoDB. In each of these spaces, there are one or two established options and using anything outside of those should only be done when you have person-years to throw at every problem, e.g. the expertise and the $$$ to innovate.<p>In most circumstances, just use what has worked for other people well, as long as their circumstances are similar to yours. (a bit long winded, but just felt like writing a bit today)