Challenges of Adopting Agile in Combined Hardware and Software Environments

By Zubin Irani, cPrime CEO

While the benefit of Agile has been noted by those within firms that create embedded software, or firmware, the practical application of it to combined hardware and software development has been difficult to envision. But waterfall methodologies create at times extremely lengthy development cycles (years, for complex systems), and this has caused decision makers to search for ways to reduce time-to-market without sacrificing quality.  These same decision makers must first work with the challenges unique to their industry, when determining which methodologies and project frameworks would work best.

Challenges unique to a hardware/software development

One of the challenges for combined software and hardware development is that software can normally be developed fairly rapidly, and the development broken down into smaller chunks, or iterations. Hardware, on the other hand, may require three to six months or more to show a working component or feature. If the software must wait for the hardware to be created for final testing, this can create testing delays.

Kevin Thompson, PhD, PMP, CSP, and the Agile Practice Lead at cPrime states, “Historically, the view was, ‘Let’s make the hardware first, then develop the software, and get it to work well’. The problem with this approach is that it takes a long time, and at the end, the hardware might not work, which creates a whole new set of problems.”

Hardware must also often follow strictly defined process models, meet compliance standards, and it can be difficult to make late changes (which would be prohibitively expensive) to hardware. The priority for embedded software, for example, would be to write the hardware drivers first, to allow evaluation of the new device and to allow testing1.  Testing is more complex when software must work within a small physical space, and time itself perfectly to prevent race and other timing issues, requiring testing at some point on the physical hardware2.

If problems occur, with waterfall methods it can be difficult to determine which is at fault:  the hardware or the software. Because hardware often isn’t available until near the end of a project for actual deployment and testing, virtual versions of the hardware such as mocks, simulations and emulations may be developed, if the budget permits3. But this is not the same as testing on the real hardware, under live conditions where heat, movement and other environmental impacts must be taken into consideration, and reliability under these condition ensured (because you really do want your auto safety brake system to work, even on a bumpy, icy, wet road).

Problems with Waterfall for Embedded/Firmware Software developers

The problems with waterfall can be summed up as “technologies, customer requests and market realities change faster than waterfall can keep up with.” This is certainly true when complex projects that use waterfall have been known to last for years. By the time the embedded software is integrated with the hardware, the original project specifications may have changed enormously –or the technology may be outdated.

Other common waterfall problems include features being built that are never used, late product delivery, and the inability to prioritize development to what the customer really wants, especially as time goes on.  “Customers often don’t know fully what they want, until actual work on a project is started, and they can see and preview features,” says Dr. Thompson.  This is especially true when an entirely new type of device is being developed, with no actual way of knowing exactly how the product will work.  Requirements during projects of this type evolve, as the teams come to understand the technology and the device, and as they develop the device and demonstrate it to the customer4.

In spite of the rigid processes, designs, specifications and tests used by waterfall, the resulting software quality may end up being lower than with Agile, which tests every build from the beginning, and employs continuous, integrated testing throughout. When using Agile practice, the resulting software can be so reliable that it is used to help determine if a hardware defect is present, instead of the other way around.

Special Challenges for Agile Implementation in Combined Software and Hardware

A major problem seen when companies who create hardware and the software that runs it face when trying to “go Agile” is that they often attempt to take methods and practices developed for software (such as Scrum, an Agile project management framework), and try to use it for everything, including hardware development.  Scrum is based upon Sprints of relatively short lengths (two weeks to 30 days), with highly defined tasks that must be completed during the Sprint. The nature of software development makes this an excellent framework for rapid progress; but Scrum isn’t necessarily the best framework for hardware development.

If the products are in a highly regulated industry, then the documentation must follow industry requirements for specification and design, as well as normal testing and functional requirements documentation.  This makes it extremely difficult to use Scrum by itself, since the processes for hardware are frequently much more rigid, defined, and design-oriented than those normally defined by Scrum.

On the software side, because software must interface, communicate with, and control hardware, development issues using Agile are more complex for combined software/hardware projects, and the Stories (definition of the functions for a specific feature) that the software developers define for each Sprint are accordingly more complex.

Large projects with large amounts of dependencies can be even more challenging.  One method of dealing with hardware that isn’t ready to test, is to decouple software and hardware development, via an abstraction layer, to allow software development to continue more rapidly.  The challenge is to find a method that allows the rapid development of software, with concurrent development of the hardware, that can best meet the requirements of each process.

Solution: Use Different Agile Approaches for Software and Hardware

One approach for companies who develop hardware and software to consider is using different methodologies for each. “Scrum works very well for software development,” says Dr. Thompson, “while hardware development can be better managed with an approach developed for non-software Agile projects, such as Commitment-Based Project Management (CBPM).”

With CBPM, instead of working on a Sprint timetable, which may be unrealistic for the delivery of working hardware features, the team members each make a personal commitment to develop one hardware feature by a specific date. The team meets regularly, for accountability that they are on target. Progress reviews, with any corrections needed, take place at regular intervals.

If hardware production falls behind, re-planning occurs to address any roadblocks and implement changes to get things back on track. Both Scrum and CBPM are team-oriented approaches, and can improve communication both internally among team members, and with the Product Owners (team member who represents the stakeholders, ensuring that development create the features they want). While the Scrum master (development facilitator) will assign hours to Sprints for software development, the individual hardware team members will define the work that they must complete to meet their commitment by the time they specify, using Performance Against Commitment (PAC) charts to show progress. Both methods allow Product Owners and end users high visibility into how things are going, and where things are going next5. Problems that arise can be addressed quickly.

With CBPM, the emphasis is on delivery of at least a component or piece of the hardware that works, in order to allow the development or testing of the software that will work on it. This is very different from waterfall, where the entire hardware must all be built first. While Scrum for software is based upon two to four-week Sprints with small portions of the software completed at a time, hardware development requires a different approach.

Dr. Thompson says, “The question must be, “What are the basic, smallest chunks of hardware functionality that I can deliver? Can I split the hardware up, so that it’s somewhat modularized? And for each of these ‘modular’ deliveries, what’s the best, the most Agile way to deliver the work?” This transformation in thinking, and the use of CBPM, is at the heart of using Agile in a non-software environment such as hardware production. Instead of defining a four-week Sprint, CBPM has a continuous execution of the project. The goal isn’t a completed Sprint (and associated tasks), but instead, to show actual progress. The result is faster velocity.

With Agile, both hardware and software features are broken down into smaller chunks – only the methodology is a bit different for each. Once software is working, it can be deployed either on any available hardware “modules”, or in a test or simulation environment. This allows the early identification and fixing of race issues and bugs that arise, and reduces the amount of “fixing” and lengthy hours reworking that must occur during late integration.

For CBPM, the Product Owners, or users, collaborate in defining when the deliverable is completed. This differs from Scrum, where “finished” is defined as completing the backlog for that Sprint. Monitoring of progress can performed in the manner that works best for both the hardware team and the Product Owners, with a performance against commitments chart created to show progress.

By the time the software is tried out on the hardware, with Agile the software quality problems are often resolved, and the only issues are related to integration. This is because with Agile, the code is tested, and these tests then help with the design of further code. These tests in themselves become part of the documentation for the system6. Automated regression testing allows the addition of new features or alterations to existing code with more confidence, since issues are revealed quickly.

A significant benefit of Agile for embedded software development is that because the Sprints are shorter, it is easier to create more accurate project completion estimates. This allows for improved risk management. The nature of Agile prevents or reduces technical debt, and performance goes up. A concrete example is a three-year long Agile embedded project studied in Europe, where the Agile project team out-performed 95th percentile “top” waterfall development teams7.

Working Both Together: What It Looks Like 

The exploration required at the beginning of each Agile project is the perfect time to divide responsibilities between software and hardware development teams and to define the processes (Scrum or CBPM) to be used by each. As the system is architected, with its subsystems, and the interfaces for communication between hardware and software are defined, the decision whether to use an emulator, or other approaches for testing are made.

The goal is concurrent work, with hardware creating components, and software developing and testing, at times independently of the hardware at first, and then on the hardware components as they are developed. This requires a large amount of collaboration between engineering, design, developers and Product Owners (who provide feedback). As Stories are implemented, first in smaller ‘chunks” or subsystems/modules, and then with larger, more integrated parts of the whole, the system design will begin to evolve, and to incorporate Product Owner and user feedback into the design.

Daily Scrum meetings help facilitate communication among software team members. Once the Sprint is completed, a Sprint retrospective helps to identify what went right, what didn’t, and how to improve things during the next Sprint. Meanwhile, the hardware teams are using performance against commitment to communicate progress, as well as regular team meetings and “map days” to create project commitments8.

When working on a hybrid project, such as hardware/software, it is important to realize that the processes will be different for each. Hardware will more naturally fall into a waterfall type process, while software will fit into a Scrum methodology. Constraint-based Planning will identify the critical milestones in one project, on which the other depends, and plans the latter around the former9. If the software is ready well ahead of the hardware (which is common), the development team can continue to develop new features until the hardware is ready, and then deploy and test the software on the hardware as it becomes ready.

hybrid project

Hybrid Project Example

cPrime: Challenges Met, and Benefits Enjoyed

cPrime has worked with numerous clients in a combined software and hardware production environment. “We’ve seen the best results when management supports the transition to Agile,” says Dr.Thompson. “All transitions to a new process involve issues, and you need to plan carefully to execute the transition itself.”

This is why when helping companies go Agile, cPrime consultants first meet with key decision-makers, to clarify exactly how the transition should occur, with agreement among all parties. The basis of the initial transition plan is an Agile assessment. Then, team members are defined, including cPrime Scrum and Agile experts who have helped firms that employ hardware and software technologies make extremely successful transitions.

Our firm has found that a phased approach to transition, with small changes that reflect a focus on implementing Agile methods that bring the greatest return first, works best. Staff are taught by on-site consultants how to create user Stories and define “done” for Scrum; or in using maps to define delivery dates, and user feedback as criteria for done with hardware development.

“cPrime offers the companies we work with the benefit of the fact that we understand how things are supports to work,” says Thompson. “We’ve done coaching in transitions, and have worked with companies that have hardware/software networking devices.” The result is improved velocity, improved morale, and improved customer satisfaction.

To learn more about cPrime’s Enterprise Agile Transformation solutions. Contact us at learn@cprime.com.

Sources

  1. Punkka, Timo. “Agile Methods and Firmware Development,” paper for the Helsinki University of Technology, Software Business and Engineering Institute
  2. ibid
  3. Michael J. Karlesky, William I. Bereza, and Carl B. Erickson, PhD. “Effective Test Driven Development for Embedded Software,” April 2006.
  4. Punkka, Timo. “Agile Methods and Firmware Development,” paper for the Helsinki University of Technology, Software Business and Engineering Institute
  5. Esque, Timm J. “Commitment-based Project Management,” available online at  http://ensemblemc.com/wp-content/uploads/2011/10/2010-Ensemble-paper_Commitment-Based-Project-Management.pdf
  6. Michael J. Karlesky, William I. Bereza, and Carl B. Erickson, PhD. “Effective Test Driven Development for Embedded Software,” April 2006.
  7. Abrahamsson. Information Technology for European Advancement (ITEA) Innovation Report, “Speeding up embedded software development.”
  8. Esque, Timm J. “Commitment-based Project Management,” available online at  http://ensemblemc.com/wp-content/uploads/2011/10/2010-Ensemble-paper_Commitment-Based-Project-Management.pdf
  9.   Thompson, Kevin, “Scrum in the Enterprise: How to Manage the Common Issues of Scrum Projects,”

http://www.cprime.com/articles/Scrum-in-the-enterprise.html

cPrime Inc, Launches Agile & Scrum Project Management eLearning Courses On-Demand.

cPrime Inc., a leader in Project Management and IT Certification training courses, announces the launch of new online, on-demand training courses in Scrum & Agile Methodologies.

Foster City, CA.  March 10, 2010 – cPrime Inc, announces a new online on-demand project management eLearning course for Agile & Scrum. Introduction to Scrum for Project Managers is an online project management training course designed to increase productivity while improving the predictability of software projects. The course is tailored for Project Managers, Program Managers, PMO Directors and staff who manage projects and processes.

Other online courses & webinars worth agile PDUs:

A Peek Inside Agile: Understanding Scrum & Kanban
Rapid Estimation for Agile and Conventional Projects
Validating & Monitoring Performance Metrics in Agile
Continuous Integration and Release Maturity Model

Introduction to Scrum for Project Managers provides a unique combination of traditional class room teaching and online learning to give students a real-life training experience through pre-recorded and indexed instructional eLearning modules.
In addition to learning the Scrum Methodology, the course also provides 1 PDU of credit recognized by the Project Management Institute, (PMI®).

The desire for fewer failures and speedier success is driving the rapid adoption of the Scrum process framework. Scrum is designed to improve the responsiveness to customer needs by reducing waste and reducing time to market.

Interest in the Scrum process framework is exploding as companies discover that Scrum enables them to manage software projects with greater reliability and improve responsiveness to customers. This class introduces the skills that project managers and team leaders need to perform the basic steps of a Scrum process for software development.

IDC research indicates that 70+% of software development failures are due to poor gathering and management of requirements, while a 2008 study by QSMA Associates showed that projects organized for agile development deliver products 37% faster to market, with 16% greater productivity, than industry averages.

Course topics include instruction on the three Scrum roles, the three Scrum meetings and the three Scrum artifacts. Project managers and team leads learn the basic planning, tracking, and management skills. Product Managers learn how to develop and prioritize requirements and team members learn how to estimate and break down work.

Learning on-demand is the new convenient alternative to classroom learning. Classes can be taken globally as long as an internet connection is present. These courses adapt to the most demanding schedules and provide the skills required to make a Scrum project successful.

For additional information on the news that is the subject of this release (or for a sample, copy or demo), please call 650-931-1651 or visit http://www.cprime.com/training

About cPrime:
cPrime Inc, focuses on relevant project management and IT training courses for Project Managers, Program Managers and PMO directors. cPrime Inc, is a PMI® Registered Education Provider and provides the understanding, preparation, and real world experience to help you achieve industry recognized certifications, earn professional development units (PDUs) and advance your career.

Contact:

cPrime Inc,
650-931-1651
http://www.cprime.com

###

Introduction to Scrum: Benefits and Practices

by Kevin Thompson, Ph.D, PMP, CSP

Scrum is a lightweight agile process framework used primarily for managing software development. Scrum is

  • lightweight because it has few prescribed elements
    • Three roles: Team, Scrum Master (often a Project Manager), Product Owner (often a Product Manager)
    • Three meetings: Sprint Planning, Daily Scrum, Retrospective
    • Three artifacts: Product Backlog, Sprint Backlog, Burndown chart
  • agile because it maximizes responsiveness to changing customer needs
  • a process framework because it is not a process, but a collection of practices and concepts around which a process can be built

For those who are not already “doing Scrum,” the key question is not, “How does it work?” but, “What are the benefits?” This question does not have a unique answer, because it depends on who is asking. Benefits to developers, project managers, and salespeople are different.

This article identifies key benefits of Scrum, and the Scrum practices that produce them.

The Benefits of Scrum

Different stakeholders want different things from a software development process.

  • Developers want to write code, not documents.
  • Quality Assurance engineers want to create test plans that ensure product quality, and have high-quality code to test.
  • Project Managers want a process that is easy to plan, execute, and track.
  • Product Managers want features implemented quickly, with no bugs.
  • Services and Support personnel want to know exactly what is in all product releases, and have a reliable means to satisfy customer requests for bug fixes and enhancements.
  • Sales personnel want to know what is “in the pipeline” for future releases.
  • Customers want all of their feature requests and bug-fixes done quickly.
  • Executives, Program Managers, and PMO personnel want to know exactly what is happening, and what is planned to happen.
  • Everyone wants happy customers.

The list seems long, but the key points are few:

  • Team satisfaction and productivity are maximized when effort spent on non-deliverable items (e.g., internal documentation) is kept to a minimum.
  • Maximizing quality at each stage minimizes re-work at following stages, and maximizes product quality seen by customers.
  • Responsiveness is best achieved by fulfilling customer requests quickly.
  • Project status and plans should be visible to everyone who has an interest in them.

Thus the best real-world development process devotes as little effort as possible to artifacts the customer doesn’t value, provides relatively bug-free code at the start of testing, delivers all relevant information to everyone who needs it, and fulfills customer requests quickly.

It is no coincidence that Scrum was designed to satisfy these points.

How Scrum Provides its Benefits

The following sections describe how Scrum practices produce the desired benefits.

Team Satisfaction and Productivity

The “team” consists of the development and Quality Assurance engineers who do the hands-on work of creating a high-quality product. Team members generally find their greatest satisfaction when they can do work that is rewarding.

  • For developers, this means designing and writing computer software.
  • For QA engineers, this means defining the exact criteria for success through the test cases they develop.
  • For all team members, this means producing something they are proud of.

Productivity goes hand-in-hand with eliminating unnecessary work. Scrum addresses team satisfaction and productivity by emphasizing work that is valuable (as a deliverable) and rewarding (to the team), and de-emphasizing what is not (non-deliverable artifacts).

In practice, “non-deliverable artifacts” usually consist of internal documentation about product requirements and design, which customers do not see or value. Scrum projects do require some written documentation, but minimize it by relying as much as possible on real-time communication between people. Thus a Product Manager will write brief requirement descriptions (called “Stories”), and elaborate on the details as needed in discussions with team members.

The requirement for effective real-time communication means that one of the following must be true for all team members, Product Managers, and Project Managers (in order of decreasing desirability):

  1. All are in the same building
  2. All are in the same city
  3. All are in time zones that overlap at least four hours per day
  4. All are willing to spend hours per day outside normal working times (e.g., transoceanic teams).

The last three cases can only be made to work if real-time teleconference and Web-conference capabilities are available on demand.

Maximizing Quality

Teams implement Stories to the requirements, in a very literal sense: An implementation is not complete (a story is not “done”) unless it satisfies the requirements, as defined in the test cases. While test-driven development is not required for Scrum, test cases do define whether the requirements have been met, and no story is complete unless it passes all of its test cases. If bugs arise, developers fix them until the tests succeed.

This practice ensures that each Story implementation is bug-free, with respect to the requirements, at the time of its completion. It does not prevent regression bugs, so additional testing is necessary after all development is frozen. However, the quality of the product going into regression testing is higher than is the case for products going into the final test period for waterfall projects, and high quality ripples through all stages of the process.

Maximizing Responsiveness to Customers

Responsiveness means providing turnaround to customer requests in a manner that is consistent with customer priorities. Since instant turnaround is not possible, the next best thing is to respond quickly to high priorities, and less quickly to low priorities.

The only way to deliver any new feature or bug-fix quickly is to work in short development cycles, which is why the basic unit of Scrum development, the “Sprint,” is typically 2-4 weeks in length. Longer cycles, composed of two or more Sprints, are also common and often referred to as “Releases” (which is not a Scrum term).

Productivity and job satisfaction both require that people are productively employed, not sitting idle, which means that parallel work for team members is the norm. The two strategies for parallelizing work on a set of Stories are

  • Parallel work on serial Stories. The whole team collaborates on one Story, until completion, then begins work on the next.
  • Parallel work on parallel Stories. Each team member works on a different Story, until completion, then starts on another one.

Since Sprint lengths are “time boxed” (have rigidly-enforced durations), and unexpected problems can occur, it is often not possible to complete all work planned for a Sprint. For this reason, it is critically important that Story development be serialized as much as possible. This allows us to deliver, say, eight of ten planned Stories when only 80% of the expected work can be completed. In contrast, the parallel-Story strategy might produce no completed Stories at all in this case, and deliver zero value to customers.

The need to serialize Story development implies another important Scrum concept: Ranking. The set of Stories planned for a Sprint is called the Sprint Backlog, within which Stories are ranked (sequenced) for implementation. The Product Manager (say) is responsible for ranking the Stories, so that the most important ones are done first. (The Sprint Backlog is a subset of the larger Product Backlog, which contains all un-implemented requirements.)

The combination of short development cycles and ranking of requirements maximizes responsiveness to customer needs.

Providing Transparency

“Transparency” means that all steps, inputs, and outputs of the development process are visible-but to whom?

In the narrow sense, as typically described in books on Scrum, transparency applies to the internal membership of the team, the Scrum Master, and the Product Owner, as they need to know the status of the project every day. In this case, and for co-located teams, transparency may be provided by posting index cards or sticky notes with the current Story and task status, along with the current burndown chart, in a public location. The Scrum framework essentially guarantees this level of transparency.

(A “burndown chart” is a bar or line chart showing, each day, the amount of this Sprint’s planned work that remains to be done. The ideal progress is indicated by a diagonal line, trending down to zero on the last day, against which the actual state is compared.)

Transparency in the wider sense means that every stakeholder who has a need for project status information has immediate access it. “Status information” includes not only the status of the current Sprint, but the content of past Sprints or Releases, and the Product Backlog. The Scrum framework does not provide a standard practice to meet this need, but it provides excellent an excellent foundation for meeting it.

Transparency for stakeholders and distributed teams can be achieved via agile project-management applications (e.g., Rally or ScrumWorks), to which all team members and stakeholders are given access. These applications store all requirements and task definitions, track work status, and provide sophisticated reports. They enable distributed teams to collaborate, and allow stakeholders to query for the information they need, without adding a burden on the team or Scrum Master.

Conclusion

Scrum is designed to optimize team satisfaction and productivity, product quality, responsiveness to customers, and transparency for stakeholders. The key practices that enable these benefits include de-emphasizing work on non-deliverable items, implementing and finishing each Story in a Sprint Backlog in rank order, working in short Sprints of 2-4 weeks, and making past, present, and future project information available to all stakeholders.

Integration Waterfall and Agile Development.

by Shayan Alam, PMP

Waterfall and Agile/Scrum development methodologies are widely used by all organizations and are individually considered a proven approach for development. However, challenges arise as these two methodologies merge and clash. Here are a few key tips to help integrate both methodologies into your development organization. Let’s first discuss each methodology and its unique characteristics and assumptions.

The waterfall software development life cycle methodology believes in getting everyone together and involved early in the design process. The design process is longer and iterative as the team steps through the high level requirements, conceptual approach, solutions design, preliminary design and critical design. This assumes little will be left for discovery through the development and testing phases. Generally, waterfall has worked effectively for certain types of products – large, enterprise-wide development efforts where the user is being led through a standardized process.

However, Agile/Scrum is meant for a more volatile world and provides an iterative approach. For example, in the mobile applications space, the landscape is constantly shifting as new phones, new operating systems, and new technology to deliver data compete to get the user to interact in as many ways as possible. Short iterative development allows for an “open” mind for discovery since less time is invested upfront. In this case, discovery involves anything from functional flaws to ineffective user flows to the concept being deemed a bad idea altogether.

The fundamental difference between the two is Agile/Scrum assumes there will be flaws and therefore jumps into the coding to expose these. Therefore the success of the development team is driven on its ability to adapt and react quickly. Waterfall, instead, takes early precautions to mitigate any flaws.

This obviously causes a clash between development teams practicing each of the development methodologies. But certain steps can be taken to show the development team the advantages of the other’s methodology and ideally bring a team together.

5 Tips to integrating agile development groups with waterfall development group

Trying to introduce agile as iterative waterfall will not work

Some organizations think they can be more “agile” by doing waterfall in smaller iterations. The problem is the timeline is tough to compress when fully vetted artifacts are expected after each round of reviews. There is too much overhead with all of the document creation which detracts from the amount of time left for coding. Agile is about streamlining processes not compressing them.

Development / QA can be iterative while being bookended by design and integration

One transition strategy is to employ agile in the development and QA cycles. Smaller scoped development cycles followed by QA. This way the customer sees the evolution of the application and can comment along the way. The design is properly vetted at the beginning and ample time is allotted for integration at the end.

Watch out for scope creep

A project manager’s challenge in working in a fast-paced “can-do” development team is managing scope creep. Since changes can be implemented quickly, anything and everything seems possible. So the distinction must be made and managed between what is considered a fix versus what is considered a change so that sprints are tight and marching towards the agreed-upon end product.

Play nice with QA

QA is always burdened as a release approaches, their schedule’s usually backed up against a wall. In waterfall, QA expects tight use cases to derive their test cases. So in the agile world, they get code thrown over the wall. That is why in agile teams, sometimes developers rotate into the QA role and become part of the solution from the beginning.

Be mindful of the end user

Since at the end of each sprint a fully functional application is delivered, it is very tempting to release it. This can be very annoying to users if this requires a frequent patch or upgrade. It makes the user wonder whether a polished product is ever in the horizon. If the upgrades are seamless, it may be a hassle to keep up with the new changes. Therefore a published release schedule or roadmap keeps the user in the loop. Major releases semi-annually and/or functional releases quarterly are recommended.

If you would like more information on this topic feel free to comments or email us at learn@cprime.com We welcome your questions, comments and feedback.