Coupling and Testability

May 24, 2017 3 comments

I can learn a lot about the kind of coupling in a system by listening to how people talk about testing it. If someone says, “I couldn’t test that without instantiating half the system,” then I know they have some coupling issues. Unfortunately, most systems I have seen—and most systems I know other people have […]

CONTINUE READING THIS POST →

Pathologies of Tight Coupling

May 17, 2017 0 comments

We continue our conversation on code qualities with a discussion of why tight coupling is undesirable. Again, I want to stress, as I did in the last post, that we’re not striving for no coupling in a system. A system with no coupling is a system that does nothing. We want the right kind of […]

CONTINUE READING THIS POST →

Quality Code is Loosely Coupled

May 10, 2017 2 comments

While cohesion, which was the subject of the last three posts, is about the internal consistency of a class or method, coupling is a code quality that looks at the relationship between entities. There are two distinct forms of coupling: loose coupling and tight coupling. One is good, the other isn’t—and I always forget which […]

CONTINUE READING THIS POST →

Cohesion and Testability

May 3, 2017 0 comments

I feel like I try to go around and get developers to do little things that will make a big difference in their work. For example, if you need to add some behavior to your system, rather than putting that behavior into some pre-existing entity, you should probably create a new class for that new […]

CONTINUE READING THIS POST →

Pathologies of Uncohesive Code

April 26, 2017 0 comments

Uncohesive code is code that either has too many responsibilities or has poorly defined responsibilities. Typically, it’s code that tries to do too much. Poorly cohesive classes are difficult to understand and maintain. They’re harder to debug and more difficult to extend. The bottom line is the more issues a class has to deal with, […]

CONTINUE READING THIS POST →

Quality Code is Cohesive

April 19, 2017 2 comments

The first code quality we’ll discuss is my very favorite: cohesion. Cohesive code is highly focused code that’s straightforward and easy to read. I like cohesion because it’s the easiest one for me to spot, but I recognize that that’s not true for everyone. People have told me that cohesion is actually the hardest for […]

CONTINUE READING THIS POST →

Keep it CLEAN

April 12, 2017 0 comments

I like dirty martinis and R-rated movies but my code is one place I always want to keep CLEAN. CLEAN is an acronym I use to remind myself of the five key code qualities that I’ve found to have the biggest impact for improving the maintainability and extendibility of code. Before I describe exactly what […]

CONTINUE READING THIS POST →

Quality in Software

April 5, 2017 2 comments

Quality is a word we throw around a lot, but without much consensus on what it really means. And it can mean different things in different contexts. Quality in software is very different—the word has a fundamentally different meaning—from quality in goods or services. This is because software is fundamentally different than goods or services. […]

CONTINUE READING THIS POST →

Beyond Waterfall Software Development

March 29, 2017 0 comments

Developing software in short sprints requires a different approach than traditional software development, though it seems strange to call something only a few decades old “traditional.” Winston Royce coined the term “waterfall software development” in 1970 and he said in that very same article that we shouldn’t use it because it doesn’t really work. Many […]

CONTINUE READING THIS POST →

Finding the Right Metaphors

March 22, 2017 0 comments

In his book, Domain Driven Design, Eric Evans said that there really is no such thing as complexity, complexity happens when we diverge from our models, when we use metaphors inconsistently, and I tend to agree. Very involved systems can be easy to understand as long as they adhere to an appropriate set of metaphors. […]

CONTINUE READING THIS POST →

Perspectives

March 15, 2017 0 comments

Our job as developers is less about being clever or finding efficient algorithms and more about simply perceiving the problem and representing it as accurately as possible. This is an exciting shift in software development because it means our goal is really about understanding. Once we understand a problem everything else can fall into place […]

CONTINUE READING THIS POST →

Avoiding Integration Hell

March 8, 2017 0 comments

Perhaps the most important yet easiest to implement of all the software development practices in Agile is continuous integration. Continuous integration is simply creating an infrastructure where the code that is being built can be integrated into the project immediately. One of the biggest challenges when writing software is the dependency relationship between the code […]

CONTINUE READING THIS POST →

The Importance of Technical Practices

March 1, 2017 0 comments

Software development has undergone many revolutions over the last few decades and the way we build software today is fundamentally different than the way we did just a few years ago. Our industry is maturing and we are beginning to pay attention to the quality of our work. No longer is just fulfilling the specification […]

CONTINUE READING THIS POST →

Two Big Things

February 22, 2017 0 comments

I’d like to say that there are two big things we must achieve in software development. We must build the right thing and we must build the thing right. Building the right thing starts with what the customer wants so they can gain value from our work. The way we build the right thing for […]

CONTINUE READING THIS POST →