Say What, Why, and for Whom Before How

Describe What You Want Not How to Get It

So much of good software design comes down to separating the WHAT from the HOW. WHAT we want should be expressed in the interfaces of the services that we create. It should clearly state WHAT the service provides, the parameters that it needs to take in, and the value that it returns. Our services should …

Read More
Say What, Why, and for Whom Before How

Help Developers Understand Why and for Whom

The traditional ways that we describe how to build something, whether it’s a blueprint for an office building or the specification for a computer program, it always involves a document that describes WHAT to build and often includes information on HOW to build it. However, these documents are often missing critical information on WHY these …

Read More
Say What, Why, and for Whom Before How

Use Development for Discovery

Before you begin to build a house and break ground on the foundation you better have a blueprint and know exactly what you’re going to build. In physical construction, we really need to plan things out ahead of time to ensure that we have the right materials at hand and that things come together as …

Read More
Say What, Why, and for Whom Before How

Be the SME

I’m kicking off a new series of blog posts based on the Seven Strategies sections in my book, Beyond Legacy Code: Nine Practices to Extend the Life (and Value) of Your Software. The next seven blog posts will each be based on a different strategy from the section in my book called on Seven Strategies for …

Read More
Say What, Why, and for Whom Before How

Why Practice 1: Say What, Why, and for Whom Before How

In honor of the 10th anniversary of this blog, which I first started under the name Techniques of Design and then became To Be Agile, I’m starting a new blog series. Actually, I’m starting nine new blog series, a series on each of the nine practices from my book, Beyond Legacy Code: Nine Practices to …

Read More
Off-Topic but Interesting

My Ten Favorite iPad Apps

I’ve been so happy this year with my MacBook Pro and my iPhone X that I haven’t really missed having an iPad. But as soon as I got my new iPad last week all that changed and I wondered how I ever lived without it. Here are my top ten favorite apps for the iPad. …

Read More
Off-Topic but Interesting

My Ten Favorite iPhone Apps

I’ve been a fan of iOS since I got an iPod Touch to manage my to do list and it ended up managing my life and my work with it. I’ve found several amazing apps for my iPad/iPhone/iPod over the years. Here are my top ten iPhone apps: 10. Phone Yes, I occasionally use my …

Read More
Off-Topic but Interesting

My Ten Favorite macOS Apps

I’ve been a Windows developer since 1988. The version of Windows I started with was just called Windows. It was before Windows 286 and the popular Windows 3.1. Prior to that, I was an OS/2 developer and much of my code for the graphics system got consumed by Windows. So, when I switched from Windows …

Read More
Announcements

Announcing the Ten Year Anniversary of My Blog

Yes, it was on December 5th, 2008 that I wrote my first blog post. Over the next decade, I would write hundreds of posts on agile software development principles and practices. If you haven’t checked out this free resource, I encourage you to do so by visiting https://tobeagile.com/blog. I’ve recently recategorized my posts so it’s …

Read More
Bits and Pieces

Object Thinking

We refer to object-oriented programming as a paradigm or way of thinking because it’s more than just a set of techniques and practices. It’s a different way of modeling behaviors. It’s not necessarily as easy to learn as the syntax of a programming language. Object-oriented programming is subtly different than procedural programming and it’s easy …

Read More
Rants

The Virtues of Laziness

Ok, I admit it. I am lazy. But laziness can be a virtue. I think it is humanity’s basic laziness that let us create computers in the first place. Computers take the drudge-work out of many tasks. My basic laziness has motivated me to find better ways to build software because I simply got tired …

Read More
Refactor Legacy Code

Rebuild or Refactor

Sometimes, when an important project is going poorly there’s a desire to start over. Sometimes this comes from management but often this comes from the developers themselves. They say if they only had a second chance and could start over then they can build the right system. But that almost never happens. Take it from …

Read More
Rants

Buy or Build

One question that I hear a lot of people asking is whether they should buy or build the software that they need to run their enterprise. This is often a difficult question to answer. One thing I can say having lived through many major software purchases is that the main cost was understanding a system …

Read More
Write the Test First

More on Test-Driven Development

One of the most valuable development practice that has become popular recently is test-driven development. When done correctly, unit tests can dramatically drop the cost of maintaining software while increasing its value. All the things that management wants and needs from the processes that are built around software development are embodied in this simple practice …

Read More
Refactor Legacy Code

Code Transformations

A lot of poor designs can be attributed to sticking with an existing design as changing requirements show us the need for a better one. Oftentimes, an initial design is just a stab in the dark. We might not know enough to make an informed decision but we have to get something done, so we …

Read More
Say What, Why, and for Whom Before How

Work Through Examples

One of the biggest challenges in building software is specifying what needs to be built. A blueprint captures all of the valuable information we need in order to build a building and details such as the tensile strength of the material and how to build a foundation are available through other sources. Blueprints have no …

Read More
Bits and Pieces

Making Code Testable

I believe that testability is one of the key characteristics of good, maintainable software. But what do I mean by testability? Testable code is code that’s written in such a way that it is independently verifiable. It has a well-defined programmatic interface and it can be fully tested based on that interface. Testable code receives …

Read More
Bits and Pieces

Complex Systems

When I look at the systems around me I noticed three kinds. There are simple systems, there are complex systems, and there are complex adaptive systems. Most of us are familiar with simple systems. They have a direct cause and effect relationship that can be easily traced. Other systems are less direct. Complex systems are …

Read More
Bits and Pieces

Trade-Offs

Of course, we want the best of all worlds. We want our code to be clear and performant and extendable. But what happens when benefits are at odds with each other? What happens when, for example, in order to gain some clarity and improve maintainability we have to sacrifice some performance? Of course, the answer …

Read More
Collaborate

Pair Programming Pointers

Pair programming is the one Extreme Programming practice that I get the most pushback from both developers and managers. Most of us have experience programming as a solitary art form and we’ve done it alone. We figured out a bunch of things for ourselves and we don’t necessarily feel comfortable doing our work in the …

Read More
Refactor Legacy Code

The Stigma Around Refactoring

Refactoring is a critically important concept in software. Anyone involved in the software industry should understand exactly what refactoring is and why it’s valuable. Refactoring is not just the redesign of code. The redesign must behave exactly in the same way as it did before. In many situations, this also means bug-for-bug compatibility as well …

Read More
Refactor Legacy Code

Read, Write, and Refactor

A couple of years ago I got to realize a lifelong dream when I became a published author. I was surprised to learn that many of the skills that I gained in becoming a good software developer were actually useful to me in becoming a good writer. Like code, prose should be well-encapsulated and cohesive, …

Read More