Software Engineering

I am of the opinion that any code that does not have accompanying automated tests should be considered inherently defective. When we write code we have certain notions of suitableness in mind. Tests are a way to express those notions in a way that others can run, and examine, independent of having to delve into…

Read More Tests Should Not Be Optional

Microservices are popular with many teams. But, software development patterns are still in flux around this architectural pattern. In the last several years the space has matured a lot. Still, too many teams produce poor implementations. Microservices are often placed in contrast to Monolithic applications. That comparison is instructive, but it is also naive. Microservices…

Read More Microservices Will Mess Your Team Up

I read a story over on Hackernoon by Jonny Asmar — Javascript Has Already Won. The premise is that Node.js and JavaScript have become so far reaching that it has won out over other programming languages. Unfortunately, this entire line of thinking is nonsense. Not because JavaScript can’t do all the things claimed, but because there is…

Read More JavaScript Can Not Win

When we are young we ask a lot of questions. As a father of five, this fact is not always my favorite thing about my kids. But, kids’ inquisitive natures is one of their strongest tools for learning. It’s a cliche that “there is no such thing as a dumb question.” But, why do we…

Read More Ask Questions — Even “Bad” Ones

Several months ago I wrote about my personal principles of software engineering. That post was informed by a talk a watched by Peter Campbell. Since then, I have been reflecting how to align various ideas I have been addressing independently up to this point. To help bring these various ideas together I want to start…

Read More Defining Principles for Software Engineering

In a microservices system data tends to get spread out. Without a consistent mechanism for handling identifiers it can become increasingly difficult to follow how data flows through the system. And, it can become problematic to even know what data is being dealt with. In many monolithic applications a database tends to act as the…

Read More Identifiers in Microservices Systems

This is the second installment in a short series on my experiences applying Clean Architecture to Ruby on Rails. The first part provides some helpful context for this installment. Working on Green Field projects is often very enjoyable. Such projects come with few encumbrances, and lots of room to explore. They can be really good…

Read More Applying Clean Architecture to Ruby on Rails: Green Fields

On the team I work with at Nav we’ve got three different projects running that have all been experimenting with Clean Architecture. My project in particular is a green field effort where Ruby on Rails was chosen as the starting point and applying Clean Architecture in this context has been really instructive. Many of the…

Read More Applying Clean Architecture to Ruby on Rails: First Impressions

I recently watched a presentation by Peter Campbell from 2016’s O’Reilly Software Architecture Conference in London. The presentation was titled “Architecture as Belief.” The talk’s emphasis was on identifying and discussing the fundamental principles that underly decision-making as software architects. Peter did a very good job identifying that software architecture is not primarily about making…

Read More Principles of Software Engineering