I’m a fan of analogies. I love them. One I’ve come to hold dearly is that, software engineering is an art-form.
This statement can be misinterpreted, however. Where software engineering is an art-form, software engineers are indeed the artists. But rather than being artists spending years working on masterpieces, we’re actually artists for hire, or “commission”. I therefore see software engineers as more akin to say, a comic book artist.
If you think about comic book artists, they have a set deadline (the publication print date) and are usually paid a fixed amount for their work.
Software engineers are the same. We usually work on projects with a finite budget and timescale. We can’t spend months or years writing and re-writing code, trying to achieve the most perfect codebase. This is something I’ve come to appreciate with a large project I’m currently working on. Therefore, we need to work within limitations to ensure projects are delivered on time and on budget.
Going back to the comic book artist analogy (I told you), a comic book artist has creative control of the work they deliver, but they are also trusted to deliver on time. Comic book artists sometimes have to forgo the ideal panel they have in their head as it may take too long to draw. They may have to opt for an alternative panel or perspective. Therefore, the “ideal” solution to a software project may not be the best.
Most software engineers have good intentions—as do I—when thinking about the “perfect” solution. But sometimes, good intentions can have bad results. For example: re-factoring CSS to Sass three-quarters of a way through a project after using a pre-built theme. The intention is good, but will add to development time (and also the blood pressure levels of other developers on the project).
It’s because of this, most developers and engineers inheriting a project will pour through a project and snigger. It’s easy to ridicule without knowing the reason behind decisions. It’s also important to set out on a solution that can be delivered within any budgetary or timescale constraints.
Above all, remember: sometimes shit just needs to get done.