Software is everywhere, quietly shaping the systems we rely on every day. I’ve spent over a decade immersed in this world, starting as a developer, then evolving into a designer of software that aims not just to function, but to solve real, meaningful problems. Along the way, I’ve learned that great software starts with asking better questions, not just writing better code.
This site is where I share what I’ve learned about domain modeling, software architecture, and problem discovery, share practical insights, and examine how software can be designed with greater precision and purpose. I write about patterns, principles, and practices like Language-Driven Design, Exploratory Domain Discovery, and Orbit Software Development.
There are threads I’m following, concepts growing quietly that may soon take a more public form.
I’m currently working on Language-Driven Design, a book that explores a paradigm shift in how we model and design complex systems, by treating the language of the domain as the foundation of both understanding and architecture.
Exploratory Domain Discovery is a method I’ve been developing to guide teams in navigating complex problem spaces, prioritizing deep understanding and adaptive modeling over premature precision.
I’ve also been developing Orbit Software Development, an agile approach to building software that centers on evolving goals, continuous learning, and the natural alignment of teams, architecture, and intent.
A collection of newly documented design patterns, each distilled from real-world challenges and crafted to address recurring problems with clarity and precision.
Design Pattern
This pattern advocates separating an entity’s transient state from its long-term status to clarify modeling and avoid ambiguity in domain behavior. download
Design Pattern
It encourages treating business behaviors as first-class data, enabling introspection, scheduling, and dynamic orchestration of logic. download
I’m pleased to introduce the Sequencer Pattern, a new design pattern I have formalized to model values that progress step-by-step within a set of boundaries. This pattern is a concept from my upcoming book, Language-Driven Design.
From the ticks of a clock to currency rollovers, animations, and simulations, this pattern gives a name and structure to something you’ve likely built many times before.
Read the full article and see the code examples here:
Code Smell – Hubristic
This smell highlights the confusion and complexity that arises when a model or component takes on multiple, unrelated responsibilities.
As an amateur musician, I enjoy composing and experimenting with sound, it’s a creative outlet that helps me think differently and reconnect with rhythm and emotion.
Listen to my Setar improvisation on SoundCloud👇🏻
I explore architecture that begins with intent. In Goal-Oriented Architecture, software is shaped around the goals it exists to achieve, not just data structures or workflows. This perspective brings clarity, alignment, and purpose to system design, making every part of the codebase traceable to real-world outcomes.
Read more: The Four Angles of Software Design- Language, Model, Domain Experts, and CodeEric Evans’ DDD has always been an inspiration and game changer for me. This book has played a huge role in shaping my mind as a software developer on how to think practically, effectively and constructively about this field, and sharpening my modeling and design lens in this field as a key driver of “discovering better ways to develop software”!
As a DDD expert and teacher, I launched DDD School as a startup to educate, consult and share my thoughts, learning and experience in modeling and designing software development
I’ve been working on writing my book titled Language-Driven Design. At its core, the book explores the profound impact of language on how we think and perceive the world around us. This idea has deep roots in philosophy, particularly in the study of the relationship between language and thought. Language-Driven Design (LDD) emphasizes the central role language plays in how we understand, design, and architect software. It argues that the words we choose, both in code and in conversation, shape not only our solutions but also the way we conceptualize problems in the first place.
Exploratory Domain Discovery (EDD), introduced by me, is a collaborative and powerful approach to understanding complex domains by exploring their core concepts and cyclical patterns.
Unlike traditional modeling techniques, EDD starts from the desired outcome and works backward to uncover the main point that drives the domain, enabling teams to build shared understanding and make strategic decisions with clarity.
Software Model is a constant conversation with domain experts and with code. DDD fundamentally centers around the model as the key to bridging the gap between a real-world problem and its software solution. In DDD, the model isn’t just a blueprint; it plays a crucial and active role throughout the entire design and development process. Crucially,…
When Data Becomes Behavior In my experience designing complex software systems, I frequently encountered challenges where changing a simple field value affected the overall behavior and logic of an object or module. Initially, these designs were data-driven, meaning those values were just stored as simple fields. Over time, as different behaviors were implemented based on those…
A Look at a Subtle yet Impactful Code Smell Intro In software systems, clarity of intent and separation of responsibility are foundational to maintainable code. However, we often encounter situations where a single method, class, or component takes on more than one role. This is what I refer to as the Mixed Responsibility Smell. At first…
Introduction Let’s be honest, for all human-kind creatures in the world handling dates in is harder than it should be! The following content is inspired by Eric Evans on one of his brilliant talk at DDD Europe 2018 I’ve spent years building systems that rely on time: payroll platforms, accounting tools, HR modules, and international…