Article updated September 2020
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 implement DevOps and use the Scrum framework with 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 consistently share feedback. Simply mentioning what you are working on could spark a teammate to mention potential problems you may want to avoid.
Getting your team together for consistent face-to-face meetings, even if you’re all working remotely, can provide valuable and collective project visibility. 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 Stakeholders and Get User Feedback
Nothing is more important than user feedback. The last thing you want to do is spend a lot of time going the wrong direction. Similarly, it will serve you well to involve any stakeholders who have the authority to change foundational aspects of the project.
Avoid executive bottlenecking while also providing transparency into ongoing projects through tools like GitKraken Timelines, that make planning and communicating project timelines and milestones easy and enjoyable.
Meeting with stakeholders and users is critical, and it doesn’t have to take a lot of time. Try to avoid consistent organized meetings, which can be a big time suck. Instead, utilize communication tools like Slack to constantly stay in touch. Community Slack channels that encourage users to submit feature requests and bug reports can be great for collecting user feedback.
Discussion in the GitKraken Slack Community
Consider utilizing project management tools, like GitKraken Boards, that integrate with Slack so your team can stay on track of tasks as they come up in daily conversations.
Code Profiling & 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.
Additionally, monitoring tools, like Grafana are able to natively support dozens of databases from multiple sources. Generate heatmaps, histograms, geomaps, customized dashboards, and more.
Pull Requests & 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.
Get more information about pull requests in Git and how to use PRs to level up your workflow in this intermediate Git tutorial video.
A pull request is essentially a request for someone to review your changes before they’re finalized.
Pull Requests in the GitKraken Git GUI
As a Git client, GitKraken goes one step further with support of pull request templates from GitHub, GitLab, and Azure DevOps repositories. See how pull requests can be enhanced through templates.
Get started with pull requests using the GitKraken Git client today.
Continuous Integration & 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 and need to quickly hotfix a bug, being able to check it 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.
Typically, continuous integration (CI) involves merging code multiple times per day into a shared repo, then building and automated testing are carried out. Popular CI/CD tools in the DevOps space include Jenkins and Travis CI.
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. And thankfully, testing tools have emerged on the market that make things much easier on QA teams.
Testing frameworks should be used to provide high-level guidelines for creating and designing use cases across teams. Some testing tools popular for DevOps-focused developers include JUnit, Jest, Selenium, and PhPUnit.
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!
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.
Azure is a Microsoft tool that gives you a ton of transparency into your applications, infrastructure, and network. Get more monitoring tools to consider for your DevOps strategy.
Azure Monitor by Microsoft
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!