There is no perfect system, it’s all about the tradeoffs

Dear new developer,

I want to build perfect systems. There’s something so beautiful about a perfect bit of code that solves a problem elegantly and succinctly. Especially if it comes with a set of unit tests and great documentation.

But, every time I start to work on any real world problems, tradeoffs come into play. Let’s take the example of a simple website that is going to display some information about a business and will occasionally be updated. Some tech tradeoffs to consider when thinking about what to build:

  • how prominent is the business?
  • what is the brand of the business?
  • how often will updates occur?
  • how large does the website need to be?
  • what is the business trying to achieve (a simple online presence? leads/future customers? lowering customer service request frequency? some other business goals?)
  • who is going to be doing the updates? how savvy are they?
  • what is the budget?
  • what is the timeline?
  • who is available to do the work?

Every one of these has an effect on the kind of system that you build. A website for a local jeweler that just wants to have a web presence, show store hours and highlight occasional sales is going to be built one way. A website for a newspaper that needs to be updated regularly and stand up to occasional large spikes of traffic should be built in another fashion. They both might be pretty simple sites, however. You need to find out what the goals are and that will inform the tradeoffs that you have to make.

The point is not that one site or technology is better than the other, it is to acknowledge and make sure everyone is on the same page regarding the choices. (These choices can evolve over time. I have worked on several sites recently that were implemented in perfectly good technologies for their time, but now are aged.)

This letter was inspired by this twitter post (thanks Samuel).

Sincerely,

Dan