Developing Software at the Speed of the Cloud

Developing Software at the Speed of the Cloud

          
Title image

Developing Software at the Speed of the Cloud

  • Add To Interests
  • SAVE CONTENT
  • PRINT
  • PDF

  • Ahead of the Curve
    Related Articles
    Smashing Functional Silos

    Software has traditionally been developed sequentially, with the waterfall serving as a rough metaphor for its progression. Separate groups conceive, design, build, test, put into operation, and maintain software, with each group waiting for the previous group to complete its work.

    This setup is fraught with high transaction costs. Participants can spend more time sitting in meetings and managing handoffs across organizational boundaries than writing and testing code. Disputes among these groups are often discovered late in the game and have to be resolved by senior executives.

    Cloud development organizations are flat. Many of their functions report to the same manager. In addition, engineers in cloud teams often develop, test, deploy, and maintain their own software or service.

    In this setup, individual contributors have a better sense of how their decisions affect the overall development and release of software, so there are fewer slowdowns and do-overs. As one cloud manager put it, companies “need to have a single throat to choke for each service.”

    Leadership Structure

    In many traditional software organizations, executives lead specific functions or disciplines, such as development or testing. An unintended consequence of this type of system is software complexity. To paraphrase Conway’s law, software mirrors the organizational context in which it is created. Software takes on the mishmash that results from trade-offs, handoffs, poor communication, and competing organizational power bases. Most perniciously, there is little sense of ownership. In fact, a static plan, which is often out of date shortly after it is written, determines the outcome, rather than intimate customer connections. The final decision maker is much closer to the CEO than to the development teams.

    In cloud development organizations, executives tend to head cross-functional product teams, rather than functional silos. All the functions required to deliver the product or service report to them. (See Exhibit 1.) In addition, these leaders are responsible for revenue realization and the overall approach to marketing, sales, and channels. When they need to adjust to changes in market or customer demand, they have the authority to marshal resources without time-consuming and wasteful negotiations with other parts of the organization.

    exhibit

    New Roles and Responsibilities

    Conventional wisdom and practice dictate that software teams separate development, testing, and operations functions. To use a reference from Top Gun, developers are akin to “Maverick,” the creative risk-taking leader played by Tom Cruise, while testers fall into the background as “Goose,” his reliable sidekick. This division of labor was ostensibly created to promote accountability for each type of activity. Instead, it caused management overhead.

    Conventional wisdom is wrong. Cloud teams have developed a software engineering role that is responsible for not only writing but also testing and deploying features. The idea of relinquishing operational control to traditional developers can be daunting, so cloud teams build automated guardrails to ensure that testing and deployment are of high quality despite democratization of control. They have found that the productivity and quality gains of this organization design typically outweigh the risks. After all, who better to fix the code than the person who helped write it?

    As developers take on more of a traditional testing role, a new “end-to-end quality engineering” role has emerged. Engineers in this role continually replicate and test the customer experience to ensure that the user interface, speed, response time, and overall quality are delighting customers. This role is crucial as customer environments become more complex and fragmented. Software teams need to ensure that their software works on public clouds, private clouds, on-premises servers, desktops, mobile devices, and multiple operating systems. The end-to-end quality engineers have this responsibility before, during, and after launch.

    The product manager’s role is also fundamentally changing at cloud companies, as software engineers assume more responsibility for scheduling and managing development. The product manager is no longer responsible simply for “hitting a date” but also for the business and operational success of the program. He or she has to take on a more strategic, analytical, and technical role. The product manager defines hypotheses and features that can be tested, prioritizes their development, and continually monitors actual usage of those features. This manager is responsible for informing and training sales and marketing personnel, setting up partnership programs, developing a pricing framework, and monitoring pricing realization.

    The role of data scientists is also becoming more prevalent at cloud companies. Their sole responsibility is to interpret the incoming stream of information. Unlike developers, they are not biased in favor of specific features and serve as honest brokers to determine which emerging trends will have the biggest impact. (See Exhibit 2.)

    exhibit