Things you should never do aka Never rewrite your entire software base. I’ve seen this on many occasions. You feel tempted to rewrite the whole app. This time you’ll fix all the problems, this time you’ll write it in some new shiny language, this time it’ll have new features. But in the end, it takes waaaaaaay longer than you anticipated. Resist the urge to rewrite the whole app, instead, improve it incrementally.
Chapter 11 - Plan to Throw One Away. Seems contrary to the second system effect, but it’s a bit different. When you are creating a totally new system, you’re going to make a lot of mistakes while you learn the ins and outs how it should operate. The first time around may not be the best, so learn to iterate and fail fast.
Chapter 16 - No Silver Bullet. Don’t believe the hype. A new language is not going to solve all your problems. If anything, you’ll just exchange one set of problems for another set. New technology will not be the answer. That is not to say some new technology will alleviate some pain points, this is very true. Think how Docker has made it so much easier to run different systems together and package up your app to run anywhere.
Joel was a prolific blogger 20 years ago. He’s still pretty good, but I would argue he doesn’t do a lot of programming as Founder of StackOverflow.
Things you should never do - We already touched on this, but it bares repeating, never rewrite your whole app. Personally, I’ve been guilty of just this thing, many times. Usually on the frontend since a new cool framework comes out every week. One of my sites began life as an Angular app, was totally rewritten in React, now I’m in the long process of rewriting it in Vue. I don’t learn. In your mind you think “This code base is a mess, I need to start over, but this time I’ll do it all right. You won’t. In reality, you’re going to rewrite some front end apps, it’s pretty much unavoidable, but be smart. Try to figure out what can be abstracted out or piece mealed. Small apps, it’s not a problem. Big apps, you’re asking for danger.
The Joel Test (2000) - This an ad hoc list that Joel came up with, but it’s a good guideline that you can use to evolute the health of a company delivering software. Sadly, I’ve seen many companies check all these off, when in fact they really don’t do them.
As web apps became more prevalent and the idea of writing apps that could scale without effort spread, we needed some guidelines to accomplish those goals. Heroku (Adam Wiggins) wrote the 12 Factor app outlining some of the parameters of well designed apps. I remember coming across these guidelines many years ago as an accomplished PHP dev and not really understanding them. Yet, in Node.js, they make perfect sense. It just took some time for them to sink in as I adapted them into my work flow. The Config one is big in my opinion, I’ve seen too many devs storing creds in code that’s checked into source control.
This is a simple guide to those that think they might want to learn a language in 24 hours. Think long term. There are many languages to learn and it takes years to master them. Go ahead and enjoy the journey, one step at a time.
Software is a difficult animal to tame. This long essay identifies the pitfalls inherent in the process and gives suggestions to avoid or minimize some of the pain.
Software development is still a young industry and it is difficult at scale. It evolves, but also has a rich history of well established principles. You can either learn these principles The Hard Way™, or find these nuggets of wisdom to guide your way to better software development.