Changeable Code

January 17, 2018 0 comments

So, what are the practices that support changeability in code? There are surprisingly few, and I’ve written about them extensively here in this blog, in my book, and I discuss them in detail in my courses: inject dependencies, embody the SOLID principles, keep code quality high, and understand design patterns… There’s a lot to it […]

CONTINUE READING THIS POST →

Doing More of What We Love

January 10, 2018 0 comments

Developers love writing code. It’s what we’re good at. It’s what we do. But all sorts of things get in our way: Meetings. Reading and interpreting specifications. And the worst time-sink of all—debugging. Most of us would rather do anything other than debugging, but that’s where we end up spending a lot of our time. […]

CONTINUE READING THIS POST →

Don’t Be Scared to Touch Legacy Code

January 3, 2018 0 comments

As Frank Herbert said in Dune, “Fear is the mind-killer.” He could have been talking about legacy code. As soon as we fear touching legacy code, we won’t do it. As a consultant, I know that merely giving my clients tools and techniques for working with legacy code isn’t enough, I also have to help […]

CONTINUE READING THIS POST →

Flying Blind

December 20, 2017 0 comments

The way most software is developed—designing entire programs on paper and then typing them into a computer in their entirety before they run—is like flying blind. Software is virtual. We can’t see it or touch it. The only feedback we get is when we compile and run our program. But on a Waterfall project that […]

CONTINUE READING THIS POST →

Change Your Mind, Again

December 13, 2017 0 comments

When I was a kid I was told that it was a woman’s prerogative to change her mind. For some people, though, changing your mind can be seen as wishy-washy. We like to stand by what we say. We like to be right. But giving yourself the freedom to change your mind is one of […]

CONTINUE READING THIS POST →

Think Small

December 6, 2017 0 comments

The key to unlocking agility is to think small. The whole purpose of building software in time boxes is to help us get better at scope-boxing, which is working in smaller pieces—breaking large tasks down into smaller tasks. I’m not a big believer in using story points. It’s better to be able to break down […]

CONTINUE READING THIS POST →

Domain Language

November 29, 2017 0 comments

Software is a model. We’re used to thinking of models as physical models that occupy space, but software represents a different kind of model, not a physical model but rather a behavioral model. Behavioral models take place in time rather than in space. You can think of them as black boxes where some input comes […]

CONTINUE READING THIS POST →

Writing Good Tests

November 15, 2017 0 comments

As Misko Hevery, the author of AngularJS, says in his outstanding Google Tech Talk series “Clean Code Talks,” most developers assume they know how to write a good test but they don’t. Knowing how to write a good test is paramount to being successful with TDD. Tests must be unique, expressive, and independent—easier said than […]

CONTINUE READING THIS POST →

Early Automation Experiences

November 8, 2017 0 comments

We didn’t do a lot of automated testing as an industry back in the late 1980s, but I did. I was working for IBM on one of the first hypertext implementations, which later became HTML. Our authoring system created very complex data structures that required us to do extensive testing to validate they were correct. […]

CONTINUE READING THIS POST →

Changeability

November 1, 2017 0 comments

What does changeability mean in the context of software? Software is soft so shouldn’t it all be changeable? Not exactly. It turns out we have to build changeability into code, but this is rarely done. To do this we have to understand the nature of software and the nature of change. Software doesn’t behave like […]

CONTINUE READING THIS POST →

An Object Model

October 25, 2017 1 comment

If you were to draw out all the objects in your system and their relationship to each other at runtime, that would be a graphical representation of your object model. Object-oriented programming is about modeling the behavior of entities. It is a programming paradigm that, when used correctly, helps us build resilient systems that are […]

CONTINUE READING THIS POST →

Acceptance Criteria

October 18, 2017 0 comments

Acceptance criteria are simple tests to tell us when we’re finished implementing a feature. Knowing when we’re done building a feature is extremely important to developers because we’re not always sure how robust a feature should be. We don’t like it when our code breaks in the field so we want our code to be […]

CONTINUE READING THIS POST →

Use Examples

October 11, 2017 0 comments

Requirements have gone from lengthy specifications that state “The system shall…” for dozens of pages, ad nauseam, to a single sentence story. But stories aren’t meant to capture all the details needed to build a feature, so where do those details come from? Alistair Cockburn describes user stories as, “a promise for a conversation.” Stories […]

CONTINUE READING THIS POST →

Developers Love Development

October 4, 2017 0 comments

We software developers are a fortunate lot. We love what we do, and a lot of the time, when we’re actually building software, we’re very happy people. Unfortunately, this isn’t universally true since so many software development projects require developers to do a lot of other things aside from writing code such as sitting through […]

CONTINUE READING THIS POST →