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 answer the question: How does a software product team know that they are building the right thing? Often times failures in a software project can be attributed to missing or slow feedback loops.
Software Engineering Feedback
Software Engineering answers the question: How do we build the software? The most important feedback loops in software engineering are around ensuring software quality throughout the Software Development Lifecycle (SDLC). Software teams lacking good feedback loops leak product defects to end users resulting in users no longer trusting the software and increased customer support load.
Automated Testing
There are many different levels of automated testing from unit testing to end-to-end testing (see “the Testing Pyramid”). The great thing about automated tests is that the feedback loop can be as tight as we want. Any single change to the software can have tests run against them. The feedback loop is only as long as it takes to run the test suite. Automated tests should be run as needed in a local development environment, but run as often as triggered in a Continuous Integration process.
Continuous Integration
Continuous Integration is a process that will build the software in a centralized environment that is separate from a developer’s own workspace. This ensures a repeatable build process as well as provides feedback to the developer as to whether the code the developer has written is dependent on something specific to their environment (manually installed library, operating system, files that have not been checked in, etc.). The most important feedback and the origination of the term integration is whether the code an individual developer writes works with the code from other developers. A good CI process relies on developers integrating code into a trunk branch frequently.
Code Reviews
One of the most valuable feedback steps in the software development process is code reviews. Modern software version control management tools like Github have great code review interfaces that streamline the code review process. Code reviews facilitates experience and knowledge sharing within a team. This process allows developers to make sure the code is structured well and provides another opportunity to identify potential quality issues. When code reviews are taken seriously, developers take the time to review and critique their own changes before submitting for review.
Manual QA
Automating testing is an important part of tight quality feedback loops in a software process, but there is no complete substitute for manual QA. Actually walking through an implementation with a critical eye is a skill and a role that must be filled regardless of the size of the organization. Manual QA works best when the QA role is an integral part of the team.
Static Code Analysis
Static code analysis tools are a cheap and easy way to address quality issues that may not be readily detectable through existing automated tests. With static code analysis, the code is inspected to find common unhandled issues that may rear their heads unexpectedly.
Security Vulnerability Scanning
Security Vulnerability Scanning are tools that automate analyzing software for security issues. Some tools use static code analysis to discover issues while others probe running software. Adding automated security analysis to a software process is another cheap way to discover security issues that could be costly to software organizations.
Product Management Feedback
Product Management answers the question: What do we build? The most important feedback loops in product management revolve around validating that what we have built helps to solve the problem of the user and is useful.
Usability Testing
One of the quickest ways to get valuable feedback into your PM process is to put a newly developed feature in front of a user that has not seen it before and ask them to complete a specific task in the product without external instruction or guidance. Running usability tests against even the simplest feature will yield incredibly valuable feedback. Those who have not added usability testing to their software development process will be amazed at how many assumptions are made during product design and implementation. People approach problems in completely different ways and without this feedback, it is hard to understand where user adoption breaks down.
Net Promoter Score
How do you boil down the reception your customers have to your product into a single metric? The Net Promoter Score clarifies whether the product you have built really excites people to the point where adoption grows through word of mouth. Do your customers enjoy the product to the extent that they are willing and eager to tell others? Phrased differently, by telling others about your product, an individual is taking a risk that who they tell will view it negatively. What is the perceived risk of an individual user telling their friends about your product will reflect negatively? Does the reward of telling others greatly outweigh the risk?
Product Usage Analytics
When surveying users and talking directly to them, they are bound to say nice things (especially if they know you are from the product team). Measuring actual usage will give a clearer picture on what users actually do and will shed light on parts of the product that may not be providing value to the existing user base.
Product Hypothesis Testing
Lean Product is a subject all its own, but when building a product, formalizing the method of developing a hypothesis around an improvement and the desired outcome takes the guesswork out of product management. Product Management is both an art and a science. The art is the hypothesis, but without the science of evaluating the hypothesis, the art may be fruitless.
The Space Between
PM and Engineering interact often and the feedback loops between them go both ways.
Product Owner Acceptance
The handoff between engineering and product in an agile development process is in PO acceptance. At this step of development, a PO will review the implementation of a story and ensure that what is built by engineering is what was asked for.
PM/UX Review
After PO acceptance, it may be beneficial to get newly developed features in front of PM and User Experience (UX) stakeholders for additional feedback that may not be raised during PO acceptance. The agile software development process starts with stories from PM/POs about what should be built. A demo allows the engineering team to tell the story of what they have built. If all goes well the stories should be the same and PM and engineering are in alignment.
Continuous Delivery
Continuous Delivery extends the practice of Continuous Integration by taking the product artifacts built in CI and layering on additional automation of quality stages, environment promotion, and ultimately delivery to the customer in production. By automating the deployment to test environments, PM can quickly evaluate the state of the development of the product at any time. By automating the deployment process to production, the software organization can release to end users quicker and more often resulting in tighter product feedback loops.
Towards Better Feedback Loops
Establishing these tight feedback loops through the software development process takes time and energy up front but pays dividends immediately. These fundamentals hold true regardless of if you are in a large organization where PM and Engineering are separate departments or a small team where a handful of people take on multiple roles.
To guide your own process improvements, ask these questions:
- When do we find software quality issues? Do most get reported by end users, automated tests, or internal manual QA?
- How long does it take to get feedback on the software features that we are building?