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
Announcements

Discussing Beyond Legacy Code on Agile for Humans

Listen to a great interview with me, Ryan Ripley, and Woody Zuill on [PODCAST] Agile for Humans where we discuss my book, Beyond Legacy Code, the software industry, and many other topics: http://ryanripley.com/beyond-legacy-code-with-david-bernstein-and-woody-zuill/ (11 Mar 2016)

Read More
Rants

Getting Started Writing Beyond Legacy Code

Most fundamentally, I wrote my book because I wanted to make the world of software development accessible to many more people outside the software industry. I had accumulated a lifetime of experience as a software developer. In that time, I had come in contact with many individuals who I would consider to be outstanding developers. …

Read More
Rants

A Billion Here, a Billion There

In a 2002 National Institute of Standards and Technology report entitled “The Economic Impact as Inadequate Infrastructure for Software Testing,” software defects costs nearly $60 billion annually in the United States alone. This report is often misquoted assaying that software bugs cost $60 billion but software bugs likely cost industry and consumers much more than …

Read More
Rants

First Principles

A first principle is a principle that is so fundamental that we can infer other principles from it. The Golden Rule is an example of a first principle, “Do unto others as you have them do unto you.” This is a first principle because many of our laws, our code of ethics, and even our …

Read More
Rants

Do This Because

Newton said we stand on the shoulders of giants and that’s certainly true for me. Many of the ideas that I have drawn on for *Beyond Legacy Code: Nine Practices to Extend the Life (and Value) of Your Software* came from a range of other sources both within the software industry and outside of it. …

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
Rants

Crossing the Chasm

In his book Crossing the Chasm, Jeffrey A. Moore discusses what he calls the technology adoption life cycle for new products. He describes five distinct phases that innovative products go through based on the five different kinds of adoptors. The technology adoption life cycle applies not only to new products but also to anything new …

Read More
Announcements

Discussing Metrics that Matter

Check out the video roundtable I was in yesterday: Continuous Discussion-Metrics that Matter: http://bit.ly/1WODPZJ (26 Jan 2016)

Read More
Rants

What is Waste?

A large part of the success of the lean manufacturing movement was its call to eliminate waste. Deming introduced the concept that waste in manufacturing came from excessive inventory. Inventory was considered waste because it tied up capital and required that it be kept in storage until it was ultimately sold. But what is waste …

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
Rants

Why I Wrote Beyond Legacy Code

I wrote Beyond Legacy Code: Nine Practices to Extend the Life (and Value) of Your Software because I noticed two major disconnects in my experience as a developer. First, the more challenging technical practices such as test driven development and refactoring, were not being as quickly assimilated by teams as some of the simpler Agile …

Read More
Rants

How to Define a Successful Software Product

People define success differently. This is not only true individually but we define the success of products or projects based on different criteria, too. To the Standish Group, success is about predictability. They define the success of a software project as one that is delivered on time, on budget, and with all the features and …

Read More
Rants

Just Telling Teams to Self-Organize Doesn’t Work

“Continuous attention to technical excellence and good design enhances agility,” is one of the principles of the Agile Manifesto. In retrospect, at their ten-year reunion, at least some of the original authors of the Agile Manifesto felt they didn’t state this strongly enough. I believe technical excellence doesn’t just enhance agility, it enables it. Cobbling …

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
Rants

More Reasons Why Agile Works

Clearly, the success rate of Agile projects is higher on average than Waterfall projects. I propose that we can trace some of this success back to technical practices. In Waterfall development, there was no incentive to write good code. Developers got once chance to write a feature and once it works the feature was never …

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