Domain Logic and SQL (2003)
A long-form article entitled: "Domain Logic and SQL"
A website on building software effectively
Visit martinfowler.com → On Hacker News Jun 2009 – Oct 2026
Software Engineering 66Career & Management 20Tech Industry & Business 15AI & Machine Learning 13Society, Policy & Culture 10Systems & Performance 8
A long-form article entitled: "Domain Logic and SQL"
Where did the common image of the socially-awkward, white, male programmer come from?
Five patterns to help Single Page Applications fetch data from remote sources
CQRS (Command Query Responsibility Segregation) is the notion that you can use a different model to update information than the model you use to read information
Sometimes it's a good thing to be writing code that you expect to throw away in a couple of years time.
Defining the microservices architectural style by describing their nine common characteristics
LMAX is a retail financial trading system that can handle that can 6 million orders per second on a single JVM thread. The business logic runs in-memory surrounded by disruptors using event sourcing.
The rise of agile methods (particularly XP) makes some people wonder if there's any role left for software design. I argue that this change shifts from planned to evolutionary design.
Capture all changes to an application state as a sequence of events.
Good developers’ caution about agentic development comes from knowing that built isn’t the same as working in production.
Object-Relational Mappers get a lot of hate from people who misjudge the complexities of the task.
Recent events highlight our need to take serious measures to counter lies that are undermining democracies.
There are only two hard things in Computer Science: cache invalidation and naming things -- Phil Karlton (bonus variations on the page)
a bliki entry for Snowflake Server
Explaining the difference between Mock Objects and Stubs (together with other forms of Test Double). Also the difference between classical and mockist styles of unit testing.
Feature Flags can be categorized into several buckets; manage each appropriately. Smart implementation can help constrain complexity.
Don't try to build a single, unified model for a large domain. Instead DDD advises us to divide such a domain into many bounded contexts with explicit relationships between them.
Every developer integrates their work into mainline at least every day.
Inspired by the strangler figs in Australia, a strangler fig application gradually draws behavior out of its host legacy application
"If it hurts - do it more often". Good advice if the amount of pain raises exponentially with the time between actions, such as for integrating software.
Write most of your tests at a low level (unit tests) with a few broad-stack tests, eg via UI. UI tests tend to be fragile and slow.
Explaining the Dependency Injection pattern, by contrasting it with Service Locator. The choice between them is less important than the principle of separating configuration from use.
If you use an object-oriented domain model, and you don't put behavior in your objects, you're missing out on most of the benefits of that pattern.
Find out what kinds of automated tests you should implement for your application and learn by examples what these tests could look like.