> I think you can under engineer and still use a pragmatic functional style.
I actually believe this, and tried in some occasions for my personal projects.
When you develop the code further, you need to touch everywhere. It starts very neat and being extremely tidy at first, but when you need to add some significant features, the design breaks down pretty badly.
Then, to save the architecture, some significant refactoring runs are required, and boy, these refactorizations are expensive both time and design-wise.
If your project will not add new features over time and relatively compact, under-engineering can deliver pretty nice results. Otherwise, designing with some headroom and flexibility goes a long way.
I actually believe this, and tried in some occasions for my personal projects.
When you develop the code further, you need to touch everywhere. It starts very neat and being extremely tidy at first, but when you need to add some significant features, the design breaks down pretty badly.
Then, to save the architecture, some significant refactoring runs are required, and boy, these refactorizations are expensive both time and design-wise.
If your project will not add new features over time and relatively compact, under-engineering can deliver pretty nice results. Otherwise, designing with some headroom and flexibility goes a long way.