Every team has a workflow, even if it’s chaotic or lacks consistency. It’s a no-brainer, though, that in the fast-paced world of software development, a clear and well-defined path to guide your work is essential to move efficiently.
Workflows provide just that — the structure and framework that developers need to streamline their processes, collaborate effectively, and optimize productivity. Here’s how we view workflows, and how automating them can help your team focus on tasks that benefit from human coordination while reducing guesswork and minimizing errors.
Workflows refer to the sequence of processes and tasks that guide work from initiation to completion. They bring together various tools, actions, notifications, and best practices to support teams. In the context of software development, workflows define the path from concept to launch, outlining the steps, roles, and tools involved in achieving project goals.
A developer workflow can be complex as it often encompasses the software development lifecycle (SDLC) and includes activities like code changes, testing, peer reviews, pull requests, merging, and deployment. Workflows help developers gain familiarity with the team's processes and tools, improve consistency, and provide a foundation for future work. And, they help teams introduce standardized and easy-to-understand codification to reduce uncertainty and improves processes
Examples of software development workflows
Workflows can incorporate safety measures and coordination, like adding in soak time before deployment, where developers allow a change to live and get exercised in a pre-production environment for a certain duration before promoting to production. They can also be used to implement acknowledgment processes to ensure team members are ready for deployments, providing a safeguard against potential issues.
Workflows can and should be customized to meet individual teams' needs and preferences to maximize efficiency opportunities. Developing them in this way can empower developers to navigate their work with intention and efficiency.
Case in point: Code review workflows at Bitbucket
When my team introduced pull requests at Bitbucket, the then-new practice changed code review from an afterthought to an essential part of the everyday workflow. Initially, we used Atlassian's code review tool, Fisheye Crucible, but it struggled to gain traction as it focused on reviewing code after it was already in production, which was a little like fixing the barn door after the cows had come home. Git-based pull requests opened up a new option — the ability to review code before it was introduced to the mainline.
By shifting the workflow, code review became a prerequisite for work to enter the main flow. Teams established minimum reviewer requirements and defined specific aspects to address during the review. Code review became widely accepted as a safety valve to catch issues and leverage collective wisdom.
Documenting and using these code review practices as a workflow highlighted its value. By transforming review from an optional practice to a must-have, the workflow became a foundational practice and influenced how our teams worked, ensuring code quality. Without embracing a code review workflow, we felt we would become irrelevant in the evolving development landscape. In fact, this workflow eventually became a standard requirement for certifications like SOC-2.
Take an evolutionary approach to workflows
You can see how changing a team's workflow is a significant undertaking that requires agreement and understanding among all team members. Working outside the established norm can lead to disruption and complications.
For instance, a team may evolve its workflow as it grows. Our team at Sleuth transitioned from a single-file pull request release to a "merge safe" label as our team size grew, allowing multiple pull requests to be merged together for deployment. This adaptation to the workflow required consensus and documentation. Once codified, the team recognized the need for automation to streamline the workflow, ensuring consistent behavior and reducing manual effort.
Developers should aim to enhance and evolve their workflows to align with their desired working methods. By establishing an effective workflow, teams achieve greater efficiency, consistency, and clarity in their development processes.
How automations can help optimize workflows
Automation plays a significant role in workflows as they trigger actions based on specific conditions or user interactions. When developers implement automation strategically, it can increase the reliability of the workflow significantly.
Similar to fully automated CI/CD pipelines, automated workflows minimize the potential for errors because every step of the workflow is codified in code or in automation. Think of the amount of toil that automated workflows reduce for developers, and the efficiency gains your team will see as a result. They eliminate the need to rely on human memory and manual coordination, encoding essential steps and configurations in automated systems. They don’t let developers mess up!
Using automation for workflows incorporates the automation types we’ve discussed in previous articles. Automated actions would recognize that something is in staging, when the soak time has passed, and trigger an action in a CI/CD system. Automated notifications would recognize who was part of the deploy and send a message to them directly when their attention is needed. Automated guardrails set boundaries to say, for example, that a team agrees never to promote anything until it has soaked for two or three hours.
We recognize that many of the best teams do these automations individually, but imagine being able to glue many of them together into a workflow that your team can then use to help guide themselves from initiation through to completion. Adopting best-practice workflows quickly and easily can put your team on track to be a powerhouse of engineering efficiency.
Of course, organizations can leverage existing workflow tools like JIRA and CI/CD systems to structure and automate their processes effectively. These tools already provide workflows for specific aspects of work, such as issue tracking or deployment processes, but they cover only a small slice of the process. Workflows that coordinate throughout your toolchain, integrating various systems like Slack and monitoring tools, are more powerful.
What it takes to implement workflows
Implementing workflows can be a comprehensive endeavor as it involves designing a process that spans the entire SDLC. Teams often tailor their workflows to their specific needs, which can span multiple systems and require agreement and documentation rather than full automation.
In some cases, teams may build bespoke solutions, investing significant time and resources to support their desired workflow. Large organizations sometimes develop custom software to address complex requirements and integrate different parts of their processes; however, these custom solutions may involve substantial financial investments and result in disconnected systems that hinder collaboration and efficiency.
Implementing workflows requires a fair amount of effort, but out-of-the-box tools can simplify certain aspects of the process. For example, JIRA offers customizable workflows, and CI/CD systems allow configuration through YAML files. However, more specialized workflows, such as Slack-based approvals or single file workflows, may require additional customization or integrations.
Implementing workflows is worth the effort for developers as they enhance efficiency, promote collaboration, ensure consistency and quality, enable scalability, and support continuous improvement.
We’ve covered a lot of ground talking about four main types of automations for your software development process. You don’t have to do them all, though. Choosing action is the way to improve, and automation is the best way to get there. Just start, see where it takes you, and keep looking for ways to improve.