Where are your software feedback loops?

Two women conversing at a table

Product management and software engineering are the yin and yang of building software products. In products that users want and trust, both sides of this software duality work together well. In order for software processes to work well, they must be built on top of tight feedback loops. Feedback loops are put in place to […]

Dependency Confusion


A security researcher named Alex Birsan recently wrote about a new type of attack called Dependency Confusion. Alex’s post gives a great overview of the attack, but provides little insight into mitigating this security risk. Here are some ways to identify if your development process is vulnerable to this attack and how to prevent it. […]

How to Build More Product with Less Effort

Kanban column headings To Do, Doing, Done

When building a software product from scratch, there is a lot of work to be done. Development teams start working in many different functional areas to flesh out the product. The most important thing to remember is that the value of this work is only realized when it reaches a customer and is providing value. […]

When to use Microservices and Micro Frontends

Microservices and micro frontends are architecture patterns that are seeing wide adoption across the industry. Despite the large adoption, there is a lot of confusion around the value of the architecture pattern. We hope that by understanding the key value proposition behind microservices and micro frontends, technologists will know when to use these patterns and evaluate […]

Tooling a Python Project: Part 2, Optional Tools

In Part 1 we took a look at the basic tools necessary for any Python project.  Now we’ll look at a couple of tools that add additional structure and can help make your development experience as smooth as possible. Black The proper way to format code is an old argument among programmers (see the infamous […]

Tooling a Python Project: Part 1, Basic Tooling

In this two part series, we’re gong to take a look at some of the most important tools to be aware of when starting a new Python project.  For this series we’ll assume you’re using Python 3 since the Python 2 EOL is coming up in 2020. Let’s dive in. Poetry In order to get […]

Should We Use a Full Stack Development Team or Specialists?

Should we hire full stack developers to build the application or hire specialists for each part?  This is a question that often comes up when an organization starts a new development project. In my experience there is no better team than a full stack development team for any new project.  When starting a new development […]

Refactoring Part 4: Implementing New Functionality

In Part 3 we did some major refactoring and added new tests.  Now that we’ve refactored out everything, we’re prepared to remove our dependence on the UI in our tests, refactor the remaining UI pieces, and implement our feature. Introducing a method seam The first step in removing out dependence on the UI is providing […]

Refactoring Part 3: More Testing

In Part 2 we started adding unit tests and refactoring for our new feature.  Now we’ll finish up the rest of the changes and then move on to separating out the UI code so we can generate the appropriate number of boxes to represent doors.  As a refresher, the changes we need to make are: […]

Refactoring Part 2: Tests and Seams

In Part 1 we took a look at how to get our Monty-Hall simulator into a test harness so we could start refactoring to add N doors functionality.  In this part, we’ll look at how we can refactor and write test cases to make our code more maintainable while making new functionality easy to add. […]