Blog Posts
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...