A worldwide payments organization was experiencing customer attrition on its 10-year-old Point-of-Sale (POS) app.

The POS marketplace had become tremendously competitive, with better offerings available at lower prices.

The legacy POS had a dated UX feel. It lacked the small form factor devices that competitors supported. It locked customers into using iOS, which meant purchasing more expensive hardware instead of lower-cost Android devices.

payment company

Background

empty restaurant and bar

To solve the attrition problem, and address customer pain points, the worldwide payments organization proposed creating a new version of the POS. It would include a modern UX. It would target a tablet form factor and a small mobile form factor. It would run on both iOS and Android.

The original POS development team estimated that it would take two years to create the new POS app. Two years where no major work could be done on the existing POS. Two years of continuing customer attrition before the ship could start to turn around.

Two years was too long. They needed a solution for their customer attrition today. Senior leadership asked Industrial Logic to collaborate in building this new POS.

Challenges

While creating the new POS app, we encountered the following challenges:

Deliver Value

deliver_value_continuously_small.png

To remedy the customer attrition problem, we needed to get the new POS out as quickly as possible.

The existing POS was difficult to change and maintain. The existing culture was to get things working and then have the testers manually validate if it broke any existing behavior.

Collaboration

alone-small.png

The organization's development process relied heavily on slow handoffs. The Design team would hand over the UX to the developers, who in turn would pass their code to the manual testers. Once something was deemed releasable after testing, it would then be sent to the Sales and Documentation teams.

We did not have the time to waste on slow handoffs.

Quality

quality.png

The existing 10-year-old POS had no automated test coverage, which made it unsafe to modify and susceptible to defects.

We couldn't risk releasing a buggy POS app when customers were already switching to competitor apps.

Product Planning

bad_data.png

The existing POS had 10 years of features along with hundreds of configurable options. Due to the legacy nature of the application, not every feature was fully understood without extensive research.

Many people in the worldwide payment company were convinced they needed “Feature Parity” with the existing POS before customers could start using it.

Senior Leadership and Product kept changing what was the first target hardware platform.

Teaming

poor_communication.png

The Industrial Logic and POS Team members who were joining together needed to become a high-performing team immediately.

Product, Designers, and Developers in the worldwide payment organization were unfamiliar with how Industrial Logic works.

Migration

align_small.png

We needed to make it as easy for new and existing customers to use the new POS.

For existing customers, this meant we needed to ease migration from the legacy iOS POS to the new app.

Hardware

foundation_small.png

The target hardware devices were low-powered devices, with only a 1.4 GHz processor.

We did not have time to performance-tune our software on the device.

Solutions

We navigated the above challenges by continuously experimenting and landing on the following solutions:

benefit
Dynamic Cross-Functional Teams:

The Industrial Logic and POS Team members formed dynamic ensembles which accelerated “teaming”, sped up onboarding, created collective ownership, improved quality, decreased cycle time, and lowered WIP.

Each ensemble included at least 3 developers and included product, design, and testers when they were available. Testers were even writing production code in the ensembles, giving them more insight into the product.

benefit
Vertically Scaling The Team:

To reduce the time to market, the Industrial Logic Team scaled up from our initial 7-person team to a global 22-person team across 7 different time zones (US, Europe, India, Brazil).

We used Shepherding to Pair Expert with people new to the team to make onboarding easy.

Onboarding was so easy the average time from first joining the team to committing code was just 2 hours.

benefit
Walking Skeleton:

From the beginning, we focused on small vertically sliced features that together would create an app that demonstrated the core capabilities of the new POS.

We delivered the Walking Skeleton in the first 2 months of the project.

benefit
Technical Excellence:

We used Test-Driven Development to keep the defect count low. 4871 automated tests were created that ran hundreds of times a day.

We refactored the code mercilessly, eliminating any duplication we saw and making the code easy to change, understand, and reuse.

We continuously integrated code using trunk-based development, pushing changes to the main repository branch 50+ times a day.

benefit
Simplicity:

We used Evolutionary Design, YAGNI (You Ain’t Gonna Need It), and delaying decisions until the Last Responsible Moment to maximize delivering value and delay any work that was not needed to sell this new POS to a customer.

Keeping the software simple made improving performance simple.

benefit
Ubiquitous Language:

We used Domain Driven Design by using the same ubiquitous language as the Product team. This simplified communication between the whole team and made it easy to reuse domain behavior to accelerate development.

We kept our domain logic free of dependency details. By introducing architectural boundaries in our domain logic, it was trivial to extend the dependencies we supported (such as the five credit card clients the app supported).

benefit
Evolutionary Product Roadmap:

The Industrial Logic team collaborated with Product to prioritize the work by each customer demographic from simple to complex. The first POS release targeted a simple Donut Shop, followed by a Taco Truck. We continued this pattern until the POS could support a full sit-down restaurant.

This shared roadmap simplified communication and alignment as we prioritized working on the next feature that makes the new POS sellable to a customer.

For the hundreds of configuration options, we worked with Product to determine the most commonly selected options to implement as default and then delay implementing the rest of the configuration options.

benefit
Make the Work Visible:

We conducted continuous demos of new features. This provided demos of working software daily. This enabled product and stakeholders to see progress and give rapid feedback.

We used a shared team board that anyone could view. We used Discovery Trees to give a visible representation of the work to make it easy to see what the team was focused on.

benefit
Probabilistic Forecasting:

We used Probabilistic Forecasting to project weekly forecasts when the next customer release would be completed. This made it visible when each customer release would be forecasted to be complete, allowing leadership and product to plan around each release.

benefit
Faster Feedback:

The Industrial Logic Team worked with the worldwide payments organization to involve their user acceptance testing (UAT) team at an earlier stage in the project. This gave the team user feedback sooner, eliminating a hardening cycle, a common phase in the organization’s development processes that we couldn’t afford to do.

benefit
Ease Migration and Interoperability:

The senior leadership of the worldwide payments company had the great idea of making the new POS integrate with the infrastructure used in the existing POS. This was a first in this industry. Migration came quick and easy for existing customers as the customers did not have to re-learn or migrate their configurations to use the new POS.

Results and Benefits

Industrial Logic delivered the new point-of-sale 25% faster than originally estimated by the organization. However, we were poised to release after only 4 months when we completed the donut shop release!

The Evolutionary Product Roadmap prioritized the minimal features needed to reach the next customer demographic. Taking this approach allowed all groups needed for releasing the product (which includes testing, marketing, documentation) to engage throughout the development of the new POS.

Initial feedback from customers using the new POS applauded the new UX, how easy it was to use (as it was compatible with the old POS), and the new mobile form factor device.

graph showing how our release was 25% sooner than the payment company estimated in house
“This is the smoothest first product release I have been a part of.” Director, Development, POS Team
graph comparing the 0 tests in the old POS to the 4871 tests written for the new POS, along with the average of 7 daily integrations per day in the old POS compared to the 47 integrations per day in the new POS

From customer usage, only ~20 minor defects were discovered out of the 1000+ features that were built. Industrial Logic’s continued focus on technical excellence by driving the production code with a large automated test suite and by continuously integrating with production throughout each day, created a high quality product that could be released on demand.

This level of quality set an unprecedented standard within the organization. Our team was known to build code that “just worked”.

“I was able to give my executive the test build, and I didn’t have to follow him around like we normally do, explaining what buttons not to press or what bugs to watch out for during the live demo. I knew this worked and had full confidence he could not break it.” Director, Product, POS Team

Continued Improvements

From the experience building the new POS with Industrial Logic, the POS team has continued to improve their ways of working:

Quality

Before Industrial Logic’s engagement with the worldwide payment organization, the developers wrote little to no automated tests. Every regression caught by their manual testers led to more work. Another bug ticket sent to the backlog. Another change that could cause a different regression.

After working with the safety net of thousands of automated tests in the code base, the POS team continued to add them, writing another 2000+ automated tests after we left.

Collaboration

From experiencing what a highly collaborating, cross-functional team can accomplish, multiple teams in the worldwide payment organization have started to add ensemble development into their development team toolbelt. For example, one development team in the organization joins together as an ensemble when reviewing hairy pull requests.

Faster Feedback

After the product saw its first few customers, the worldwide payment company received feedback on the UX of the POS application. Rather than repeating the multi-month big design up front that was done for the initial UX for the new POS, the team chose a different approach. One that was based on something our key product owner said: “You (Industrial Logic) are always asking us how we can get faster feedback”.

The company had one of its UX designers make a clickable wireframe to demo the refined feedback. They then flew out the UX designer and key product members to their customer's location to experience firsthand how they were using the new device for true customer feedback.

Summary

Building the new POS with the worldwide payment company has demonstrated we mean it when we say Industrial Logic can help you build better software sooner. Software that will continue to be easily extended. Software that will delight customers for years to come.

The success of the new POS app exhibits the power of collaboration. Along with that, these are the core reasons for success:

  • Dynamic Cross-Functional Teams
  • Vertically Scaling The Team
  • Walking Skeleton
  • Technical Excellence
  • Simplicity
  • Ubiquitous Language
  • Evolutionary Product Roadmap
  • Make the Work Visible
  • Probabilistic Forecasting
  • Faster Feedback
  • Ease Migration and Interoperability
Restaurant employee using the mobile POS for the first time