Hacker News new | ask | show | jobs
by kwertyoowiyop 1666 days ago
When is the last time anyone ever saw a project that was “under-engineered”?

And aren’t those projects easier to fix…because they are so simple?

4 comments

> And aren’t those projects easier to fix…because they are so simple?

In my experience it can be just as difficult to fix, at least if constrained by backwards compatibility.

Under-abstracted code for example often introduce cross-dependencies which can be hard to break in a backwards compatible manner.

Over the last years I've been working with an audio library that makes several simplifying assumptions, like

- Audio interfaces are never added or removed over the app's lifetime

- Audio is never rerouted between interfaces, or at least the app doesn't need to know about it

- The details of an audio interface, like number of channels or supported sample rates, do not change while the interface is running

- Audio latency never changes and callback timing is always precise, so timestamps are not really needed and a single number is enough

Of course, none of these are really true and adding support for some of them would require rewriting a few APIs and many, many implementations. On the overengineering side, of course it has its own smart pointers, string class, thread implementation etc just in case someone needs to build for a target that doesn't support C++11.

In the world of hardware, which I realize is a parallel universe to the one in this thread where "product" apparently means "app", the answers are "all the time" and "no", respectively.

If someone didn't take the time to do actual "engineering" - which is to say, using mathematics to formalize design requirements (again, possibly a foreign concept to the app-building class) and just YOLOed the design based on intuition, you can end up with something so fundamentally broken in concept that "fixing" it requires a bottom-up redesign starting from fundamentals. A child's drawing of an airplane is not progress towards a blueprint of one!

quite a bit. under engineered as in 'never really tested, is known in general not to work'. usually, yes in theory it should be easy to fix - but since the parent organization doesn't value getting a handle on what's really going on, it never does.