The science of high-performing teams has fascinated business leaders and coaches for decades. There are hundreds of books on the subject, full of strategies and philosophies that are guaranteed to improve your group. The problem is, as soon as new performance standards become the norm, they are no longer considered high-performing. Teams must always push to find methods of higher performance to keep an competitive edge.
In the world of software development, evidence is now overwhelming that the Agile development methodology (and more recently, DevOps) is a key attribute of high-performing teams. Implementing smaller software development cycles with tighter feedback loops, developers quickly see the results of their work and make adjustments where necessary. Agile and DevOps teams can create higher quality software with fewer errors and in less time compared to teams that follow traditional waterfall development.
Agile development requires a shift in mindset from the traditional software development method. In particular, it requires a shift left. Shifting left means taking processes that usually fall at the end of the software development life cycle (or SDLC) and putting them towards the beginning. Or, it could mean turning a staged process into a continuous process that occurs throughout development. Shifting left is a reference to the use of the Kanban board in manufacturing and software development, where tasks move from left to right as they are completed.
Shifting left helps teams remove bottlenecks that often crop up just before deployment. One such bottleneck for traditional teams is testing. This is why Agile and DevOps teams are quickly implementing an even newer strategy: continuous testing.
Continuous testing is a form of automated testing that tests new code as soon as it is committed to the repository. Results and errors are immediately sent back to the developer, so they know exactly which batch of code caused the problem. Continuous testing helps unify the efforts of developers, users, and operations teams. It also helps managers increase their comfort level when planning the release of software.
Companies mistakenly believe that continuous testing is the same as automated testing, but there is a significant difference. Continuous testing allows companies to assess the risks associated with every software release candidate as it is committed to code. Automated testing involves testing multiple release candidates at the same time, making the cause of issues less clear.
Imagine the following software development scenarios. Anyone with experience working on traditional development teams will know these experiences all too well:
- The lead developer sends the developers a list of bug fixes, feature enhancements, or both. They work on those changes and begin unit testing. Everything works great. When the team integrates the changes, several of them fail, and the team panics because it’s near the end of the project.
- Many of the changes from the first scenario work, but the system slows to a crawl. Before the integration tests, everything was stable. The team releases the changes incrementally. Most pass through without any issues. But then, all hell breaks loose. Everyone scrambles to figure out if his or her module is the culprit. Unfortunately, it may be more than one module that is causing problems.
- The team integrates the changes and everything works wonderfully. Then, it is submitted to operations for release into production. They can’t schedule the changes into production for another two to three weeks. When the operations team finally gets around to it, several modules fail. The development team has already moved on from those development efforts.
Problems like these are not uncommon in software development and can be extremely disruptive. Continuous testing as part of DevOps can significantly reduce and even remove them from your team.
Let’s look specifically at some of the key benefits of continuous testing:
Continuous testing is a crucial component of managing risk. It lets development teams know the probability of success for release candidates, which is the main reason why it’s likely to become the de facto standard in testing disciplines. When equipped with the appropriate tools for continuous testing, teams can keep the occurrences of failure to a minimum. Managers won’t even know most of the failures as teams can quickly address them before the release. This is far better than the hope-and-pray methods associated with traditional software development practices.
Each new iteration of software can introduce a hole in the infrastructure without a process in place to prevent this from happening. Automated testing is a great first step as it can incorporate security concerns as part of the test scripts.
Continuous testing takes security a step further. It handles company policies and determines which modules are allowed access and by whom. In some cases, third-party software such as Microsoft Azure will handle the security for you, but you still need to be alerted when there are failures from these external systems.
When security problems happen on a production level, developers used to be given production access to debug the problems. However, this is not an ideal situation. In most cases, developers need access to the server logs rather than raw access to the server itself. The log files can give developers what they need to determine the cause of the problems. However, they need a robust method of querying these log files.
With continuous testing, developers can see the immediate impact of their code, which means they can move quickly to fix errors and bugs. A free tool like Prefix from Stackify gives developers this power. Prefix alerts programmers to all the calls and can make suggestions on better code practices to use.
The performance of modern applications is determined by a number of components and systems working together. It used to be challenging to monitor all of these components, such as third-party apps and vendors, but it is now possible with the right tools in place. Continuous testing helps developers pinpoint exactly where the failure occurs, which means vendors can no longer point fingers.
How do high-performing team maintain their continuous testing process? There are several components that must work together. Below are some of the best practices for continuous testing:
Developers often test their own code, thanks to sophisticated tools that allow for this. However, if developers are not doing the testing, testers need to be involved throughout all cycles of the project. In fact, in the Agile and DevOps arena, testers are now considered intermediaries between users and developers.
Testing no longer has to be as formal or extensive, since it’s going to be an integral activity throughout the development process. In fact, it’s a best practice not to create extensive tests, as this does not fit well into the iterative approach of Agile. The idea is to test early and test often. The feedback from this process is invaluable.
Developers find themselves constantly drudging through log files. Even sophisticated solutions that monitor applications treat log files as a secondary feature, if at all. The focus for log files should be a core feature. Developers need easy access to log files across multiple components. When a tool can turn log files into structured data, it gives developers the resources to quickly find problems. This feature of logs-as-structured-data becomes a best practice. Developers should be able to query by various metrics (customer ID, etc.), and pull up logs across all systems associated with the software solution.
There are numerous tools for the different components of continuous testing. These tools, however, do not always integrate well with each other. The ideal situation is to have a tool that is multifunctional and is already integrated. A multifunctional tool improves the project drastically across the board.
Retrace from Stackify is a performance monitoring tool that is highly integrated, and addresses the issues surrounding multiple testing tools. It rolls up many of these tools into one, which helps development teams increase the success of deployments. It allows developers to see every impact that their code has on all participating systems and apps. It has become an essential tool in achieving continuous testing benefits.
There are various interconnected processes that make up a high-performing team. Despite what you see in the movies, there is no “silver bullet” or “hack” that can magically turn a losing team into a champion. Instead, high-performing teams require a system, and the discipline to follow it. Agile and DevOps are two examples of a system that help development teams succeed.
High-performing teams also require a guiding principle. In the case of Agile and DevOps, that principle is “shift left”. By moving processes earlier in the SDLC, or better yet, integrating them throughout, development teams can create higher quality applications faster, and get the feedback needed for improvement. Continuous testing is a perfect example of shifting left.
Even as a single process, continuous testing is made up of various components that must work in unison. Team structure, testing schedule, and tools all play a critical role in the success of continuous testing. Agile and DevOps teams must get every piece right to see the benefits.
The challenge doesn’t stop there, however. High-performing teams go beyond continuous testing to create an entire continuous development process. Ready to learn more? Then check out our entire section on continuous software development.
- Web Application Performance: 7 Common Problems and How to Solve Them - April 26, 2018
- Addressing Roadblocks in Cloud Computing - April 24, 2018
- Performance Engineering: The What, Why, and How’s Explained - April 19, 2018
- 4 Metrics to Monitor When Scaling Up and Down in the Cloud - April 9, 2018
- Top Kubernetes Tutorials & Resources for Developers of All Levels - April 5, 2018