4 ms·
It's kind of amazing that "over engineering" in software means the exact opposite of what the term should mean. To me, engineering is taking a problem and the
by miltondts 6y ago
It's kind of amazing that "over engineering" in software means the exact opposite of what the term should mean.
To me, engineering is taking a problem and the corresponding constraints and building the solution that satisfies it with the least amount of resources.
"over engineering" in software is about trying to make something adaptable? Or maybe just satisfying someones sense of beauty.. Or maybe it's just about programmer convenience at the expense of customers/user experience and hardware resources..
- ironmagma 6y agoIt's also a bit of an abuse of the term. Overengineering in engineering (mechanical, civil and other similar disciplines) means building a component to withstand more than the absolute minimum. So, a bridge you'd want to be overengineered by a factor of 2 or 3 at least, whereas airplanes are hardly overengineered (lower factor of safety).
- miltondts 6y agoAh I was not aware of the general term and its' meaning. As you say, quite the abuse of the expected meaning.
- Ma8ee 6y agoBut isn’t that how the term is used? The system is over engineered when it is built to scale to a million concurrent users while we current only have a hundred. Or when it is built to handle use cases that no one has required.
- ironmagma 6y agoIn this context I read it more as being excessively complicated to some unspecified end rather than engineered to withstand a load way larger than necessary.
- Ma8ee 6y agoOften it is excessively complicated because it’s divided into dozens of services to be able to scale, or having extra abstraction layers to deal with imagined future requirements.
- ironmagma 6y agoSure, but the fact that those requirements are imaginary instead of real is why it’s not actual overengineering. Overengineering is done with a specific dimension of scalability in mind for something that probably will happen, and there’s a budget for it too, etc.
- darkerside 6y agoI use the term to describe the introduction of unnecessary abstractions in the name of hypothetical future use cases. For example, using an enumerated collection of values where a boolean would suffice. It could also refer to building resilience to load before it is necessary. Example, distributed databases with failover and recovery capabilities for a side project. Poke holes all you want, those are bad examples, but they should illustrate the point. Over engineering is a real phenomenon.