Engineering

Human Monoliths

Conway's Law states that any organization that designs a system will inevitably produce a design whose structure is a copy of the organization's communication structure. In other words, software architecture becomes a reflection of team structure and communication pathways between teams. If that's the case, then some organizations must be more likely to produce well-designed modular systems, whereas others might be doomed to build monolithic applications. **Human Monoliths** are teams whose structure drives them to create tightly-coupled, hard-to-maintain software. Let's take a look at the different types of human monoliths as well as a few tips on how to avoid becoming one.

Read
Engineering

Systems and Teams: Performance Analysis

For an engineer, analyzing and improving performance of software systems are fairly common tasks. System performance is a well-researched area. We have a number of established performance analysis methods as well as a rich toolbox of techniques to use and trade-offs we can make when designing software systems. There have been numerous times when I've had to improve the response time of an API by optimizing an algorithm, introducing caching, tuning garbage collection, reducing queuing, or trading throughput for latency. Once I started thinking more about team and organizational performance, it became clear that there are many parallels between software systems and teams and that both can benefit from some of the same techniques. In this article, I'd like to look at a few of these similarities and explore how we can improve the performance of our teams and the software that they build.

Read
Engineering

How to Get Better at Estimation

We are consistently bad at estimation and are unapologetic about it. While tasks and projects overrun their estimates by 81% and 122% respectively, engineers often respond by saying that accurate estimation is impossible or not even valuable in the first place. We even come up with half-jokes such as the ninety-ninety rule to portray our inability as a natural law. However, accurate estimation can help a lot with planning, resource allocation, risk management, as well as minimizing resource waste and work in progress. To get better at estimation, we first need to start taking it seriously as a skill that has to be learned and practiced.

Read