In the past, I was part of a project focused on redesigning core business functionality. My approach was influenced by fundamental theory. I ended up redesigning the underlying complex database into third normal form. It had 40 tables. When I presented this to the team, the reaction was mixed. From surprise to frustration, I heard that 40 tables are way too much and we need simpler and scalable design.
In following months, another team approached this problem from fundamentally different manner more focused on code first approach. This team initially produced key-value based database with 20 tables. This solution was finalized for implementation.
Now we are close to the implementation and over last few months, the team working on this project had to add lot of additional tables to address functional and non-functional requirements. Finally, this data model is ready with 51 tables. Lot of core features like data validation and integrity are bolted on to the initial model.
Point of this post is not to turn this into A Vs B design discussion, but to highlight the fact that proven design principals and practical theory like relational algebra; category theory etc. saves lot of implementation headaches and eliminates / minimizes complexity. In my opinion, quite often this proven strategy is neglected for short term gains, inter/intra team dynamics or just lack of respect for theory. What you think? What is your experience?