Skip to content

CRUD vs Task Driven: Are You Losing User Intent?

What happens when everything in your system just becomes an update? You need to cancel an order: change the status. You need to approve something: change the status. Some workflow completes: just change the status. Everything becomes an update. And it can feel great because it is simple, but you have lost one really important thing: intent. You know what changed, but you do not really know why it changed. You can try to infer it, but you do not really understand what the user was trying to do and why they were trying to do it. That is where… Read More »CRUD vs Task Driven: Are You Losing User Intent?

Multi-Tenant Best Practices Can Backfire

You have a multi-tenant system, but you discover a pretty horrible bug. How can that be? You followed all the best practices! Your HTTP API places a message on a queue to generate an invoice. A background process picks up that message and executes it. Everything looks like it worked. There were no exceptions, no failed database calls, and no errors in your logs. However, something went horribly wrong. The request was supposed to execute for tenant A, but what actually happened is that it executed for tenant B. The wrong tenant. YouTube Check out my YouTube channel, where I post all… Read More »Multi-Tenant Best Practices Can Backfire

Avoid API Breaking Changes

Have you ever changed your backing data model and then all of a sudden all your clients explode? It’s not because you broke your code. You broke your contract. Most times API breaking changes occur because you’re exposing your domain model or data model. You’re not just sharing data. You’re leaking implementation details. What you can do instead is start treating your API like an anti-corruption layer. That does not mean making seven different layers of DTOs. YouTube Check out my YouTube channel, where I post all kinds of content on Software Architecture & Design, including this video showing everything in this… Read More »Avoid API Breaking Changes