Designing Microservice Messages: A Primer

When you move from monoliths to microservices, and your services aren't 100% isolated from each other, eventually you need your microservices to communicate. They need to expose their capabilities to other applications and systems, and when you get to this point, you need to design their means of communication. Microservices doesn't prescribe a specific mode of messaging (nor should it), and I personally like the presentation "Messaging and Microservices" (slides) [Read More]

The Gemba Walk for Designing Software

The Gemba Walk is a common lean practice for understanding a current process as-is before taking any action to improve that process. Traditionally, you'd see this in lean manufacturing, where you'd walk through a process, in-person, to understand the purpose, process, and people involved in creating some sort of value or product. For whatever reason, the "Gemba Walk" is dismissed more or less from lean software engineering as a means [Read More]

Respawn 2.0 released

A small release for Respawn but there's a breaking change in the underlying extension API, hence the major version bump. A couple things added here: Support for MySQL Support for Amazon RDS (from a bug fixed) The API change was added so that database adapters can specify the quote character to use. With this, we now have 4 databases supported: MS SQL Server MS SQL Server Compact Edition PostgreSQL MySQL [Read More]

Trunk-Based Development or Pull Requests - Why Not Both?

Trunk-Based Development movement is often proposed as the alternative to Git Flow. I understand this distinction - managing streams of work through long-lived branches can be trouble. For those new to TBD, it can look like this means throwing away all branches and everyone commits literally to trunk. Typically this comes out as "feature branches are bad". But I've seen the opposite - it's not that feature branches are bad, [Read More]

MediatR 4.0 Released

The last major release of MediatR brought a simplification in design. Instead of having several different IRequest types and IRequestHandler implementations with several flavors, MediatR would try at runtime to determine how a single IRequest should resolve to different IRequestHandler implementations (synchronous, async, async with a cancellation token). In practice, this proved problematic as not all containers support this sort of 'try-resolve' behavior. MediatR relied on try...catch to resolve, [Read More]