The Birth of Legacy Software – How Change Aversion Feeds On Itself

Here's a common pattern that I see play out very often in software teams: There is a need to change the existing system behavior to accomplish new functionality.  The software engineer looking at the task realizes that the existing design isn't well suited to the change needed. They suggest design changes and refactoring, as part … Continue reading The Birth of Legacy Software – How Change Aversion Feeds On Itself

Abstractions Are In The Eye Of The Beholder

One of the most common debates I see, is on the right level of abstraction to use when coding. The line between over-engineered and unnecessarily-verbose is a very fuzzy one, and is the source of never-ending debates. Unfortunately, this debate is unlikely to ever get resolved. For one simple reason. There is no universally right … Continue reading Abstractions Are In The Eye Of The Beholder

Alert Fast

A dichotomy I often see in many different teams and projects, is the dilemma between “failing fast” and “failing gracefully.” Here’s a simplified example of what I see far too often, and gets to the core of the dilemma. public String generateGreeting() { try { return “Hello ” + getName(); } catch (Exception e) { … Continue reading Alert Fast

SSH Considered Harmful – Why you shouldn’t be using raw ssh sessions

No, there hasn't been any new vulnerability found in SSH, nor am I denying the usefulness of SSH as a building block in the dev toolchain. This article is about why you shouldn't be (and how you can avoid) using raw SSH sessions for development work. Here’s a little story. I spent many years working … Continue reading SSH Considered Harmful – Why you shouldn’t be using raw ssh sessions

Rethinking Software Testing: Perspectives from the world of Hardware

The conventional view of Software Testing The hardware and software worlds may seem poles apart, and in many ways, they indeed are. But there’s a wealth of knowledge that each can learn from the other. Despite the seemingly massive differences in the final product, they share more in common than you might expect. Computer engineers … Continue reading Rethinking Software Testing: Perspectives from the world of Hardware

An Alternative to Dependency Injection Frameworks

I have a confession to make. I hate Dependency Injection (DI) frameworks. My very first job as a Software Engineer involved working with a very complex system that powered a ~100 person hedge fund. We made extensive use of Dependency Injection… but only via Constructor or Setter Injection. We did not use any DI frameworks … Continue reading An Alternative to Dependency Injection Frameworks