Building Advanced Software


Team-Driven Developer

A newsletter with tips and tools for building software as a team

A complex system is not the same as a system that delivers advanced functionality.

  • Complexity within software refers to the characteristics of a software system and its ability to change over time.
  • Functionality refers to the capabilities a software system exposes.

In my experience, we often overlook this distinction more than we realize. I’ve seen engineers brag about how complex their system was as evidence of their skills or their team’s capability.

We also tend to think of these characteristics as orthogonal, but I disagree.

We can't really build an advanced system if we've already built a complex one.

Team-Building Exercise

Quick caveat: I'm still very much learning how to implement and act upon the thoughts in this week's article. These are some of the ways I've been doing so recently, but it's all still a work in progress!

If you have any other ideas or feedback, please reply to this email!

While the shift in language might seem pedantic, this week's exercise is about shifting your language when describing functionality versus the characteristics of the system that supplies that functionality.

  • Try to refer to functionality along a spectrum of basic vs. advanced
  • Refer to the systems along the lines of complexity, maintainability, and cognitive load

You can't always do this tough. No one will fault you if you describe a user feature request as complex.

However, make sure you view it as a complex problem and try to focus on how to simplify the problem so that it becomes manageable.

What I've found is that being intentional with this language acts as a guide in documents when describing changes we need to make to a system to achieve some new behavior.

  • e.g., if someone reads "basic functionality" (or something similar), they can put on their "think about the behavior" hat
  • Conversely, if someone reads "highly complex, they start thinking about how the system is trying to implement that capability
  • This highlights when a seemingly basic feature add is creating complexity, and more thought or refactoring might need to be applied to the system

I'm still developing my thoughts and ways of working through this too, so your mileage may vary.


Here are some more resources from me to help you build better teams!​

  • 📕 Code Review Champion - My book on code reviews will help you become a world-class code reviewer. From giving kind feedback to navigating conflict, this book can help anyone wanting to sharpen their code review skills.
  • ❓​Questions for Devs - Building a team takes more than catching up about your weekend at standup. I've used these questions to build relationships with my team and push past the same old surface-level conversations.
  • ​📋 Pull Request Template - Maximize your efforts in pull requests by giving context right at the beginning of a new pull request. Copy and paste this template into your repo, and voilà!
  • 📊 ​Code Review Metrics - Start measuring how your team tracks against a few common code review metrics. This python script will pull your GitHub pull requests and generate a CSV you can slice-n-dice to get the data you want. It also has graphs! As this is an open-source project, your contributions and feedback would be great!

Other Creators I Recommend

Image for Daniel Schaefer

Daniel Schaefer

Subscribe if you are a software developer that has the technical skills, but you're looking for opportunities to enhance your soft skills to advance in your career.

Image for Looking for your next tech job?

Looking for your next tech job?

You're in the right spot. I'm Dr. Kyle Elliott, the founder and tech career coach behind CaffeinatedKyle.com, and I love giving away free resources that help to ensure your job search and career success.

Join 7,435+ fellow job seekers who have downloaded my free Job Search Launch Guide.

113 Cherry St #92768, Seattle, WA 98104
Unsubscribe · Preferences

Dan Goslen | The Team-Driven Developer

Learn the tips and tools for building software as a team! Every other week, I send a long-form article, a team-building exercise, and resources to help you build better software teams so you can build better software.

Read more from Dan Goslen | The Team-Driven Developer

Team-Driven Developer A newsletter with tips and tools for building software as a team We've recently started a group at Webflow to enhance our existing code review process.And it made me think of an older article I wrote all about the point of pull requests. In a nutshell, pull requests aren't the same as a code review, but they are a common channel to help code reviews run smoothly. I rewrote and added some parts of the article based on the discussions we were having as a group, and wanted...

Team-Driven Developer A newsletter with tips and tools for building software as a team If you’ve ever joined a new team, tackled a legacy codebase, or stepped into an unfamiliar domain, the feeling can be overwhelming. There’s too much to know—and not enough time to learn it all. That’s why I use a model I call traversing the knowledge graph. It helps me orient quickly, pull in the most relevant context, and start contributing with confidence. In this post, I’ll describe: How I think and...

Team-Driven Developer A newsletter with tips and tools for building software as a team You’re staring at your editor. The code should work, but you’ve been fighting an error for a full day. You can’t figure out the problem no matter what you try. Or you’ve been staring at an empty file, wondering what code to write. You’ve got a vague Jira ticket, a lack of context, and a codebase that is difficult to understand. You’re blocked. Now, what do you do? It’s tempting—easy, even—to ping someone...