March 19, 2020 // By Andy Schwarz
It's become cliché to say we're in unprecedented circumstance, both in our work worlds and society in general. New phrases have entered our vocabulary (e.g. Social Distancing, among others), and if you are a leader or active participant in large, mission critical software development efforts, you are probably navigating a whole lot of additional issues that make your work that much more challenging and stressful.
In my work at Magenic, I've been fortunate to work with the kind of nimble, distributed development teams that have spent years dealing with a variety of trying circumstances: market collapses, terrorist attacks, typhoons, earthquakes, and yes, now viral pandemics. Throughout these experiences, we've built some solid best practices for distributed software delivery that have allowed us to keep running at capacity, and share that productivity with our customers.
In this post, I want to share some of those advantages to help you and your development teams adapt to these changing circumstances and realize the benefits with your projects and teams. Let's look at some of the major points through the traditional lenses of people, process, and tools.
What was initially thought of as a means of remaining cost competitive, distributed teams and remote work can help negate the risks of all manner of challenges. The proverbial, "not putting all your eggs in one basket" means that one is able to adapt to these outside circumstances without sacrificing teamwork, velocity, or code quality.
- PEOPLE - to achieve this, you need the right people in the right positions. We start with a dedicated "Sprint 0" team: A Dev Manager with experience in coordinating teams of all sizes, and serving as an effective liaison with the Product Owners at our customers; An Architect who can work from the outcomes of a backlog workshop to shape the technical solution, design patterns, and coding standards by which the development team will deliver consistent and effective code; A Business Analyst to help break down Epic-level requirements into developer-ready user stories; Additional specialists (e.g. User Experience Designer, Digital Product Consultant, DevOps Architect) that can bring their expertise to bear, specific to the needs of the project. In addition to the leadership this team provides, the development team (Consisting of one or more pods with a Dev Lead, Developers, Quality Engineer, and Testers) is designed to work in a distributed fashion, thus allowing adjustment in capacity as needed throughout the life of a project.
- PROCESS - A consistent planning and software development process is key to any team's effectiveness… even more so when that team is geographically distributed. Long gone are the days when one could "throw work over the wall" to a black-box offshore partner and think value will be the result. To be effective, teams and customers must work as a highly collaborative unit, and frequent, detailed communication is critically important. Magenic has embraced the Scaled Agile Framework (SAFe) as our process of choice, as it helps assure that those critical communications do occur, but also embraces a shared responsibility for success among all participants. This helps a lot in breaking down US vs. THEM thought patterns, that often result in finger-pointing or blamestorming when real challenges arise. Other processes and methodologies can certainly be effective, so long as they are consistently applied and all are on board with driving to success. SAFe has advantages, both in fostering collaboration, but also in delivering value throughout, with velocity as a key measure sprint by sprint, program increment by program increment.
- TOOLS - Having development tools, process management tools and infrastructure that allows distributed teams to collaborate freely and deliver their best work (and measure it) is worth its weight in gold, but it's also worth evaluating your projects goals, to be sure that it will similarly empower your customers with similar capabilities with their own business needs. Development tools with an Integrated Development Environment (IDE) that ties in to your process tools (whether Azure DevOps, JIRA, Confluence, Bitbucket, or others) will help in streamlining the development of code, facilitating its effective review, providing more comprehensive quality testing, and ultimately speeding its timely deployment. Of course, in setting these tools up, you’ll want to ensure security (access/provisioning; Multi-factor authentication where possible; secure VPN; etc.). On the project goals side, what patterns, best practices and/or infrastructure have you put into your solution that will empower its end consumers to weather the storms ahead? Have you considered on-prem vs. cloud-first infrastructure? Does your project include lift-and-shift of some legacy systems that support the new development effort (and what hurdles such a lift-and-shift may introduce)? Sometimes, taking a small step back and doing an application platform rationalization can help an enterprise identify opportunities for substantial improvements in both quality and service to their end customer with minimal changes in the software code itself (okay, the work is not always trivial, but such a rationalization helps ensure you always get the greatest impact for your investment).
Moving from collocated to distributed can seem overwhelming at first glance, but getting the right people, process, and tools in place can allow you to continue to deliver for your customers without compromising in quality or velocity.