How to Use Fast Feedback Loops
Being able to clearly and quickly communicate any bugs found in development or production is critical to the success of your product.
Join the DZone community and get the full member experience.Join For Free
One of my favorite mottos is “move fast and break things.” Unfortunately, when it comes to software, we tend to break things and not move very fast. The goal of Agile development is to ship code at a higher velocity. The key is managing the process effectively enough to do so, while not breaking things—or at least, fewer things. In this article, I am going to provide some tips on how you can use the Scrum framework and fast feedback loops to increase velocity and improve quality.
Scrum development timeline by Axosoft
What Is a Feedback Loop?
The most critical thing to creating good software is communication. Feedback loops are mechanisms that are used to validate and get feedback about the software development process. The goal is to get both positive and negative feedback that can be immediately fed back into the process. Doing this as fast as possible speeds up and improves the overall development process.
Types of Feedback Loops
Feedback loops are not all about verifying if the code you have written meets what the user wanted. Although, that is very important. It is also critical to know if your code works and is not full of bugs. Feedback loops are a mixture of daily best practices, automation, and tools. The last thing you want is for your users to be really excited about what you have done, and then be mad when it blows up all over the place.
Being able to quickly voice your progress and ask simple questions to your whole team is an excellent way to quickly share feedback. Simply mentioning what you are working on could spark a teammate to mention potential problems you may want to avoid. The Daily Scrum (sometimes known as the Daily Standup) is a good place to ask for feedback or help from your team so you can keep your project moving forward.
Meet With Product Owners and Users
Nothing is more important than user feedback. The last thing you want to do is spend a lot of time going the wrong direction. Meeting with product owners and users is critical, and it doesn’t have to take a lot of time. Try to avoid organized meetings which can be a big time suck. Instead, utilize email, Slack, etc., to constantly reach out for feedback.
Code Profiling and Tracing
What did your code just do? How does it perform? Developers now have access to some amazing tools that can help answer these questions in real time. As you are writing and testing your code on your workstation, you can get immediate feedback about how your code is performing and what it is doing. These application performance management (APM) tools can show you SQL queries, HTTP web service calls, errors, log messages, and much more. Check out free APM tools like Stackify Prefix, DevTrace, MiniProfiler, and others. They vary based on your programming language.
Unit tests, integration tests, automated web tests, and others, provide a fast feedback loop. One of the apps I work on has over 100 complex integration tests. Anytime I make any changes to the code, I rerun all my tests on my workstation to make sure I didn’t break anything. Those tests are a critical fast feedback loop for me. There is no way I could make changes to that app without them!
Pull Requests and Code Reviews
Pull requests can help ensure that your code doesn’t get merged and deployed before it is ready. When lots of people are checking-in code non-stop, it can be hard to know if you are ready to do a deployment or not. Pull requests also provide a good opportunity to do some quick code reviews. Feedback from your team is essential to finding potential problems before you ship your code.
Validate Performance in Pre-Production Environments
Hopefully, your QA team does a good job of testing your applications. During the QA process, it’s a good time to look for application errors and review overall performance. Application monitoring solutions can help you do this. If your app does not get any traffic in pre-production environments, synthetic tests and load testing can help.
In a perfect world, you want to find software bugs before they get to production. If you need help tracking bugs, be sure to check this bug tracking best practices guide.
Continuous Integration and Deployment
You can only ship code as fast as you can deploy it. Automating how you do builds and deployments is critical. It removes human error and speeds up the process. After you do a deployment if you need to quickly hotfix a bug, being able to check it in and do a fast, new deployment is important. Utilizing continuous integration to run your unit tests on a daily or continuous basis is also a very valuable feedback loop.
Monitor Performance in Production
You just pushed your new version to production. Congrats! Now what? It’s a really good time to monitor production for new errors being thrown in your code. Odds are you will have a few. No matter how much you test your software before going to production, you will always find weird problems in production. Differences in customer data, traffic volumes, and hosting are all hard to test for beforehand.
Application monitoring is critical to finding potential problems as fast as possible. You should monitor overall performance to make sure your application is not running slower, using significantly more CPU, etc. These are potential problems that you can quickly detect and fix if you are using application monitoring best practices.
Tracking Product Usage
Do you know how many customers are using your new feature? Understanding how your product is being used is an important feedback loop. There are a few ways to do this.
You could use something as simple as Google Analytics, but if your app uses REST-style URLs, it won’t work well. If you are using an APM solution like Retrace, New Relic, App Insights, etc., they might be able to provide some insights into how often certain parts of your code get accessed. If you want advanced functionality, try Full Story. It looks amazing.
Every development team and software project is different. Your goal should be to figure out how fast you can go while maintaining high quality, and then go that fast. If going any faster reduces quality, then you have a good idea of where to let off the accelerator. Hopefully, some of these tips and fast feedback loops will help!
Published at DZone with permission of Matt Watson, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.