HACKER Q&A
📣 caprock

Are most software engineering decisions subjective?


Occasionally I'll hear someone refer to some particular aspect of writing code and assembling software as "more art than science". That view is expressed in seemingly arbitrary situations.

Is it possible the vast majority of decisions, preferences, best practices and so on are subjective?


  👤 lioeters Accepted Answer ✓
Yes, because the phrase "software engineering" is just a euphemism.

As a discipline and an industry, we don't have (or use even if we had) objective measures for things like code complexity, effectiveness of design patterns, when we should use or not use them. Like in the arts, some scientific and mathematical concepts are useful, and in fact form the foundation of software - but what we do is definitely not a science, and not engineering.

It's also an unresolved question whether "engineering" is the right approach to software development.

IMO, most successful software projects are "grown", and only in a lesser sense designed or engineered. And many projects fail due to being "over-engineered", whatever that means - but we know it when we see it.


👤 codingdave
Kind of - Suppose there are 100 ways to do a thing -- 80 of them will be wrong, 15 of them would work but have some problems, and 5 would work perfectly fine. Throwing out the 80 is science. Throwing out the next 15 is experience. Choosing amongst the remaining 5 is totally subjective.

(Those number are clearly made up, but illustrate the point.)


👤 potamic
Yes! All decisions are subjective. I do not think it is exclusive to software engineering, let engineering alone. There are two questions you can ask about any decision.

1. What should I do right now to solve this problem?

2. What will I wish one year from now that I had done to solve this problem?

The first one is relatively easy and won't see much debate. It's the second one which is complicated and the reason for debates usually, because you have to predict the future. All bets are off when you try to predict the future, nobody can do it. The best we can do is to let wise old men take the decisions with the hope that they have seen enough little more of the past and that the past sometimes repeats itself.


👤 binbashthefash
Yes, because each decision is based on a previous decision, often made by someone else. Sometimes, someone 5 steps back made an awful decision which necessitates making another decision that may also be wrong, but wrong in a way that could leave the next person able to make a correct one.

If I walk into a room and someone asks "how do I deploy this app to the edge" there's 1000 answers that will either be right or wrong depending on decisions about that apps design that were made long ago but will still impact how I have to deploy it.


👤 nivertech
The field which adopted methodologies like Agile, Scrum, and SAFe is clearly not an exact science, nor an engineering. It's more similar to "soft" sciences like for example social sciences.

It's still a very young field, in addition to being a moving target, so maybe it's too early for it to be formalized like more traditional engineering disciplines.

It doesn't mean that you should stop reading books or case studies, start ignoring industry best practices, or disregard your own professional experience.


👤 solumos
yes, in the same way architectural building decisions are subjective. It would be bad to design an office building if you were supposed to design a school, and it would be bad to only have one door to a school and no windows, etc. Does it matter if you use bricks or steel or aluminum or glass or concrete for the exterior? Not as much.

generally there are requirements that you need to meet, constraints that you need to work with and known anti-patterns to avoid but there's a lot of freedom in the implementation