Bits and Pieces

Stop Anticipating

I generally find that developers engage in one of two different activities when it comes to making future changes: they either anticipate or accommodate. Anticipating change comes from a good place, a place of caring, but can be ineffective and stressful. I spent much of my career trying to anticipate code changes so that my …

Read More
Bits and Pieces

Use Flexible Feature Flags

In my last post, Stop Hitting Yourself, I described (long-lived) branching in version control as an anti-pattern. It’s something we want to avoid. But then what are the alternatives to branching for integrating code as it’s being built into a production system? We can’t let half-baked features slip out into production. If we do, the …

Read More
Bits and Pieces

Stop Hitting Yourself

If there was a button on your computer that said “DO NOT PUSH,” would you push it? If you push the button and a hand comes out of the monitor and slaps you on the face, would you push it again and again? Of course not! But then why do you continue to use branching …

Read More
Bits and Pieces

Outside In or Inside Out

Most of the time when we’re building software, we’re thinking inside out. We focus on the behavior that we want to create, and build the system up from that. We do this because we’re anxious to get at the heart of the problem and solve the core issues. But there’s a problem with this approach …

Read More
Bits and Pieces

Be the SME

SME stands for Subject Matter Expert. This is a key role in the development of software. The level of understanding one must have to write software is very deep. Developers have to become SMEs when they work on a project. In my career as a software developer I have learned tons of things in many …

Read More
Bits and Pieces

Why Nine Practices?

My new book, Beyond Legacy Code, Nine Practices to Extend the Life (and Value) of your Software is out. I guess one obvious question is: Why nine practices? I wanted to organize the book around core practices because this would let readers jump around in the text and focus on the practices that are most …

Read More
Bits and Pieces

Be Anthropomorphic

I have had the good fortune of working on two dolphin research projects in my life so far.  Dolphins are highly intelligent and their brains are, on average, larger than ours. I like to say that I have the privilege of working with the two most intelligent species on the planet, dolphins and developers. When …

Read More
Bits and Pieces

How Open-Closed are you?

Of the handful of programming principles that I live by, the Open-Closed Principle is perhaps the most important. I consider the Open-Closed Principle to be the central goal of all software development and what we should be striving for when doing development, beyond just getting our features to work. I was talking with Jim Shore, …

Read More
Bits and Pieces

The Single Responsibility Principle

The Single Responsibility Principle says that any entity, whether a class, a method, or a module, should have a single responsibility. But what is a “responsibility” and how big is it? Is a feature a responsibility or a task or what? I like how Bob Martin defines a responsibility. He says any entity such as …

Read More
Bits and Pieces

Don’t Test Private Methods

I often get the question when teaching developers test driven development (TDD), “How do you test private method?” The short answer is you don’t, but there’s also a longer answer that Michael Feathers gave in his book, Working Effectively with Legacy Code. Certainly, you could test private methods, and I’ve seen developers do all sorts …

Read More
Bits and Pieces

Go Deep Rather than Wide

When defining, building, and testing a system, we can go deep or wide. Deep means taking a vertical slice that provides functionality across layers of a system, end to end, which enables a feature. For example, we may enable a user to log in, which would include the client-side UI all the way to the …

Read More
Bits and Pieces

Don’t Write for Reuse

Reuse. This was the promise of object-oriented programming. Back in the early 1990’s we were told to move from C to C++ because it promoted reuse. That was wrong. The way to reuse code is through delegation, by calling a piece of code. Delegation has been around since assembly language so OO languages didn’t introduce …

Read More
Bits and Pieces

Don’t Show me your Private Parts

What’s a private method, why use them? Their purpose is to hide implementation details, the way we accomplish a task. We generally don’t want to share these details so we limit its scope and who can call it. Use private methods to share common implementations so a service can have different APIs for different client’s …

Read More
Bits and Pieces

Seven Strategies for Creating Better Names

Naming is a central part of programming and vitally important. Everything has a name and the name we give something should reveal something about what it does. The difference between good names and bad ones is a key factor in the maintainability of the software we write. Here are seven strategies for creating better names. …

Read More
Bits and Pieces

Seven Strategies for Vanquishing Waterfall

What makes a software development project Waterfall and what makes it Agile? Different people answer this question differently. For a lot of teams, Agile is having a daily stand-up meeting and working in two-week sprints. For other teams, Agile is doing all of the practices in Scrum, Lean, and XP. Which is right? I say …

Read More
Bits and Pieces

Seven Strategies for Fostering Innovation

True innovation means pioneering into territory no one has ever been in order to discover something new. Not everyone can do this but fortunately for the rest of us some can. Still, it can be helpful to find ways of supporting innovation. Here are seven strategies for fostering innovation. 1. Believe it’s possible There’s a …

Read More
Bits and Pieces

Seven Strategies for Growing as a Software Developer

People end up as software developers from a variety of backgrounds. Regardless of how we became software developers, if we want to stay on the leading edge of the industry we must be constantly learning and growing as developers. Here are seven strategies for growing as a software developer. 1. Do your own project Having …

Read More
Bits and Pieces

Seven Strategies for Burning Down Risk

Developing software is risky and expensive. Software is formless and hard to understand. Subtle interaction can cause software to affect seemingly unrelated components. A good development process focuses on mitigating risk by finding problems early, before they become showstoppers, and while there’s still time to resolve them. 1. Integrate continuously Creating a system that can …

Read More
Bits and Pieces

Seven Strategies for Measuring Value in Software

Software is different from tangible goods and it must be measured differently. The tasks that developers do are different from day to day, so we can’t directly measure productivity in any meaningful, normalized way. I often advise teams not to measure velocity because it can send the wrong message and give management the wrong goals. …

Read More
Bits and Pieces

Seven Strategies for Effective Daily Stand-Ups

The daily stand-up meeting is an important part of Scrum. It helps the team work together and gives everyone a sense of what the team is working on. Daily stand-ups don’t always have to be in person. I worked on a remote team that did our daily stand-up online through a wiki. While this was …

Read More
Bits and Pieces

Seven Strategies for Higher Fidelity Communication

Communication skills are essential for everyone but there aren’t a lot of places to go to learn about them. Most enterprise software development is a team activity and communication skills are a vital part of working on a team. Here are seven strategies for higher fidelity communication. 1. Know your outcome Getting clear on the …

Read More
Bits and Pieces

Seven Strategies for Helping People Get What They Want

It’s human nature to want to help others but we may not always know how. We offer solutions to problems with the best of intentions but sometimes the solutions we offer are taken as if we are telling others what to do. What we really need to do is help people find their own solutions, …

Read More