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 →

Podcast on Legacy Code Rocks

October 2, 2017 0 comments
Thumbnail image for Podcast on Legacy Code Rocks

Join me and the owners of Corgibytes, Andrea Goulet and M. Scott Ford, on their podcast Legacy Code Rocks where we talk about how to avoid legacy code: https://www.stitcher.com/podcast/legacy-code-rocks/e/51642611?autoplay=true

CONTINUE READING THIS POST →

Name Things Well

September 27, 2017 1 comment

I’ve said that the five code qualities we’ve been discussing are quantifiable. That is, we can create more of them if we want. Let’s discuss how to do this. The one code quality I’d like to focus on is cohesion. To me, it makes the most sense and I can easily see when my code […]

CONTINUE READING THIS POST →

Pairing and Collective Code Ownership

September 20, 2017 0 comments

I’ve been writing a lot recently on pair programming and mob programming and I’ve been syndicating my posts at Dzone.com, which is a web portal for software developers. I’ve received some scathing comments about pairing and mobbing from people who’ve obviously never tried it. If something doesn’t work for you then by all means abandon […]

CONTINUE READING THIS POST →

Collective Code Ownership

September 13, 2017 0 comments

Like many artists I used to sign my work. When I wrote a class or a module, I put my initials in a comment that indicated I was the developer who wrote that code. This was a common practice at virtually everywhere I worked from IBM to small shops that developed financial or banking software. […]

CONTINUE READING THIS POST →

Forget About Velocity

September 6, 2017 0 comments

I wrote about increasing velocity in my last post, but I just can’t let it be. I have to tell you about the dark side of velocity and why I don’t recommend that teams track velocity. Velocity is the amount of work a team can accomplish in a fixed period of time. It’s used to […]

CONTINUE READING THIS POST →

How to Increase Velocity

August 30, 2017 0 comments

Do you want to know a trick to increase your team’s velocity? Now that I have your attention I want to tell you that tricks don’t work. I’ve seen people play tricks and sacrifice quality in order to get something out only to regret it later. So here’s my non-trick trick: Increase code quality today […]

CONTINUE READING THIS POST →

Testability Affects Code Quality

August 23, 2017 0 comments

Why is it that if we all agree that CLEAN code is good to strive for that the vast majority of software as written lacks these qualities? The only answer I can come up with is that we’re so focused on short-term gains that we forget about the long-term consequences. I have to point out […]

CONTINUE READING THIS POST →