A long time ago, after I finished high school, I enrolled in a Social Sciences program. I spent quite some time studying philosophy and philosophers such as Jean-Paul Sartre and Plato. I always had a great interest in that field, but I eventually changed paths and moved into Systems Analysis and Development. Interestingly, today I realize that many of those concepts are still present in the way I think about software.
When I was studying Sartre, one idea that always caught my attention was that existence precedes essence. Bringing this into software development (by adapting the idea), I like to think that a system exists because someone has a problem that needs to be solved. The architecture, the patterns, and even the choice of technologies should emerge as a consequence of that need, not as the starting point. Very often I see discussions beginning with "let's use microservices" or "let's use this framework," when perhaps the first question should be: what problem are we trying to solve?
Plato also makes me think about this when he talks about the World of Ideas. Before there is code, a database, or APIs, there is already a business domain, with its own rules, processes, and needs. Our job as developers is not to invent that domain, but to understand it and represent it as faithfully as possible in software. Maybe that's why concepts like Domain-Driven Design make so much sense to me.
From that perspective, DDD's Strategic Design reminds me precisely of this search for Plato's "World of Ideas." Before writing any code, we try to understand the essence of the domain: what the truly important concepts are, how they relate to one another, and what language best represents that reality. It's as if we were trying to see the "ideal form" of the business before materializing it in software.
Tactical Design, on the other hand, is the moment when that idea takes shape in the real world. Entities, Value Objects, Aggregates, and Repositories don't exist simply because DDD says we should use them; they are the concrete representation of the understanding built during Strategic Design. Just as, for Plato, the objects of the sensible world are imperfect manifestations of the Ideas, our code is also an attempt to represent, as faithfully as possible, the essence of the business domain.
In the end, I find it interesting to realize that ideas written more than two thousand years ago still help us understand modern problems. Perhaps software architecture has less to do with choosing frameworks and more to do with understanding the essence of the problem before thinking about the implementation. And, for me, that continues to be one of the most interesting aspects of software development.
Top comments (0)