Then
I started working in software development back in dusty 2001. That time, the industry did not have a lot of brilliant IDEs, tools, or languages that make developer’s life easier.
We used to use C++, Pascal, Delphi, or even assembler in scenarios when we needed to build a drastically performant code. We sometimes used a notepad and CLI to test our ideas. It’s true to say, that the code was hard to understand with all of those direct memory access, dereferencing pointers, WinAPI, interrupts, etc.
Now
Today we have a lot of languages with garbage collectors, tasty syntax sugar; we have IDEs that help to debug multi-threading code; we have cloud infrastructure that help to get rid of hardware maintenance. All these instruments were invented to make our life easier, so that we could build better products. However, do our products become better in reality?
I tend to claim No. In spite of all those incredible improvements and inventions, our software products are constantly becoming worse and worse. Why does this happen? Firstly, I would say that software development has become mainstream. It causes negative effects such as quick release cycle, complete ignorance of maintenance costs, POC magically going to production, etc. Secondly, it makes developers to quickly learn new tools just to try or apply them for a product. Thirdly, developers are not motivated to build good products, because they do not see budgets, they do not care about costs. All of these aspects cause that developers are not interested in learning vital principles in software development, such as OOP, DDD, TDD, etc.
I have heard many times from my colleagues that The Big Blue Book written by Eric Evans or PoEAA written by Martin Fowler are outdated. I have observed many times, that object-oriented programming easily becomes procedural programming with a lot of state classes and separate data manipulation classes, just because it is easier to write from scratch. Within dozens of projects, I have not seen that DDD is ever used correctly: almost 99% use so-called anemic domain models. I understand why it happens, it’s just a business. However, it really upsets to see how we do products nowadays, and I thank companies that see those problems and work on fixing them.
Summary
Summarizing all the things mentioned above, I would like to bring attention of community to basic aspects in software development:
- OOP is not just about creating classes. OOP means that we have to treat classes like real objects with state and behaviour.
- Learning DDD and TDD is a must. It’s almost impossible to create efficient and maintainable enterprise products without understanding how to build a domain model that fits business requirements and prevents invalid cases. The Big Blue Book and Patterns of Enterprise Application Architecture are still actual. Use them.
- POCs should be put to trash right after finish. Just grab working ideas and create new projects, paying attention to clean code.
- Do not be eager to use modern tools just because. All tools are just tools – usage must be justified.


Leave a Reply