Blog Postsrss feed

Taking Change to the Limit Mar 30, 2024

Software provides incredible opportunity for change. But the difficulty and consequences vary dramatically and often proportionately to the size of the change. So what happens as we consider taking the mathematical limit of change down to zero? more...

Reconsider Code Collapse Mar 21, 2024

There exists a common code editor feature masquerading as a benefit, but is actually aiding and abetting terrible code. It stands off to the side of each and every file, ready to mask a mess. And all too often, it does its dirty work automatically. more...

Resilient Programming Jul 18, 2020

Conventional wisdom holds that in order to work effectively, you need to eliminate distractions. Interruptions can be particularly bad on software developers, as described in numerous articles, blogs, and even comic strips. But this is only one side of the equation. Are there things one can do to be more resilient to distraction? more...

Feedback Distance Dec 17, 2019

Getting feedback is critical for developing software. We need it at multiple levels, from code reviews to monitoring production systems. Feedback speed is important, but it can be difficult to measure how long it takes to get feedback due to the high degree of variation inherent in the processes. For example, UI tests often take significantly longer when they are failing than when they are passing. So can we measure feedback in some other way? more...

Making Technical Debt Visible Jul 10, 2019

One of the problems with technical debt is that it is effectively invisible. Usually only the coders can detect it, and even they can't always see it clearly. So how can we make it visible for other people, so they understand the impact? Without that, how we can make effective business decisions? more...

No Perfect Architecture Mar 1, 2019

What sort of software architecture should you be implementing? When looking at industry trends, blogs, conference talks, and the like, it is easy to think that other companies have everything figured out. You'd be forgiven for wanting to copy the success that others are having. But there is no perfect architecture. Everything is a set of tradeoffs; there are only good and bad fits for a context. more...

Testing HTTP Calls Jan 18, 2019

Making HTTP calls to get resources or call APIs is a staple of software development. But if you do not properly abstract the request construction and response handling from the HTTP library that you use, it can be extremely difficult to test. more...

Managing Technical Debt Dec 21, 2018

Technical debt is a widely known metaphor which helps us think about how technical issues hurt our ability to deliver business value via software systems. But knowing the concept is different from actually managing technical debt. Unfortunately, many software teams know that they have technical debt, but don't know what do to about it. more...

Tightening Feedback Loops Oct 12, 2018

Feedback is the information we get back from the world in response to doing something. Without feedback, there is no way to know whether we are accomplishing our goals. more...

Avoiding Secondary Work Jun 29, 2018

An important lesson I've learned at Pluralsight is that when we let ourselves get too busy we create additional work for ourselves. This additional work is a form of non-valuable meta-work which I refer to as secondary work. It gets in the way of doing the work that actually delivers value. more...

Reducing Risk by Deleting Code Apr 20, 2018

One of my favorite activities as a software professional is to delete code. Over time, I've learned that this is one of the best things I can do because the ideal amount of code is no code at all. more...

Leaning into Eventual Consistency Feb 23, 2018

Distributed systems are hard. They have a lot of moving parts with complex interactions and are inherently multi-threaded. To make them work, there is often some form of eventual consistency at play. Embracing this can make software development easier. more...

Forms of Temporal Coupling Dec 1, 2017

Coupling is an important concept in software development because it limits the ability of software to change. Temporal coupling is a kind of coupling where code is dependent on time in some way. It is particularly insidious because it is hard to detect unless you know what you are looking for. more...

Architecture and Architects Oct 6, 2017

The software industry has always held a basic assumption that architecture is important. By association, the role of architect has always been esteemed important. But unfortunately, it isn't always clear what architecture is or what an architect's job should be. more...

Mob Programming Jun 2, 2017

When I joined Pluralsight, I knew going in that it was going to be a different kind of company. They were already practicing things that I'd been learning about and struggling to implement in my prior company, like TDD and continuous delivery. But I didn't realize just how different my day-to-day work would be until I found that my team was doing something called mob programming. more...

Continuous Code Reviews Mar 17, 2017

Code reviews are generally accepted as good thing in software development. Some of the benefits include improving quality, sharing knowledge of a system, and promoting collective code ownership. more...