Before getting started I would like to thank Sean Anderson for advancing lean software delivery through his Swift methodology, much of it used during the engagement I am about to recount. Also thanks to Gregor, Luke, Francesco, Melissa and all my colleagues at Pivotal and Tanzu Labs for this and the many great opportunities that I had to work with you all.


This article is based on a week by week report of a consultancy engagement to showcase lean software delivery to a prominent manufacturer of stamped circuit boards.

In the following example I briefly describe the most relevant activities we undertook, and some of the more dominant challenges. I intend to use this with other articles to offer an opinion on what worked and what didn't and draw some conclusions about how to best implement some of the practices over a longer term.

For now consider the following as a post-mortem of the engagement.

The Goals

Kickstart the rewrite of applications developed on Microsoft Access backed by Oracle databases with SAP integration, adopting a microservice architecture, as part of a core team consisting of; 1 product manager, 1 engineer and 2 solutions architects.

Pre-Sales Business Objectives: 

  • Deliver a new cloud native client with reusable patterns
  • Start migration from Microsoft Access and Oracle
  • Enablement of 2 architects, 4 engineers and a product manager

Prerequisite:

  • Access to codebase
  • Support from platform and security engineers
  • Tanzu Application Platform

Week 1

We ran our first week of workshops full-time with the client located both in-person and remote. They included, 3 SMEs who also acted as users, 2 architects, 4 engineers and 2 product managers.

Actions:

Client discovery: 

  • 1st day introductions
  • Goals and Key Objectives
  • Risks and Mitigations

EventStorming Workshops: 

  • Discover business processes by modelling actors, actions, outcomes, domain objects, data and tools
  • Identify pain points and opportunities to prioritise processes

Week 2

Client and Tanzu product managers paired throughout the rest of the engagement and led the majority of product management and design workshops

Client and Tanzu architects and engineers paired or mobbed throughout the rest of the engagement and led technical analysis and migration strategy

Actions:

Scoping: 

  • 4x4 prioritisation of opportunities to agree on the minimum value we could deliver

Blueprint and story mapping: 

  • First draft of acceptance criteria
  • First user stories added to the backlog 

Notional architecture and synthesis:

  • Mob on Domain Driven Design, Event Driven Architecture, CRUD and Evolutionary Architecture
  • Draw context maps using Boris diagrams, to describe use cases and capture domain elements and synchronous or asynchronous data flows
  • Capture endpoints, messages (published or subscribed), data models, external dependencies and security requirements

Code analysis:

  • Identifying relevant code and behaviour to validate assumptions made during requirements gathering
  • Run experiments and gather data to validate assumptions made during design
  • Investigate methods of testing the legacy application
  • Prepare questions for user interviews 

Week 3

2 client engineers, 1 Tanzu architect and both product managers worked on the web client using a low-code solution from Metadev.

Enablement was focused on Agile Product Management, Discovery & Framing and UCD practices.

2 client engineers, 1 Tanzu engineer and 1 Tanzu architect developed a CRUD façade, using C# with ASP.Net and an anti-corruption layer using batch jobs to executing Visual Basic extract, transform, load (ETL) scripts.

Enablement was focused on eXtreme Programming, 12 Factor Applications, Clean Code, Evolutionary Architecture, Pairing and Mobbing.

Actions:

User Interviews: 

  • Validate product assumptions 
  • Design elements for a v1.0 release

Roadmap update: 

  • Prioritise backlog and plan for the first iteration
  • First spikes added to the backlog

Iteration 1 development: 

  • Implement v0.1 with 5 out of 7 machine configurations and static look-up data

Skeleton Pipeline: 

  • Create a skeleton CI/CD pipeline using Tanzu Application Platform accelerator build and deploy services

Spikes: 

  • Investigate data models, contracts and transformations to support v1.0
  • Protype connections to the Oracle database from the Tanzu platform

Challenges:

  • Discounted the use of PACT at this time as Metadev clients could not implement the package

Week 4

Actions:

Iteration 1 delivery:

  • Release of v0.1 to acceptance
  • User feedback interviews
  • Application Stakeholder demo

Roadmap:

  • Update Roadmap to conclude v0.1 and begin v0.2
  • Plan for a v1.0 release with configuration for all machines but 70% product support with only single sided boards

Iteration 2 development:

  • Directly address user pain points around manual data entry and validation
  • Expand on the number of machines that can be configured

Spikes:

  • Strangler Fig for Client/Server architecture
  • Integration with SAP

Challenges:

  • Pushback from the user to deliver more for v1.0
  • Excessive rescoping features and prioritising the backlog

Week 5

Actions:

Iteration 2 delivery:

  • Release of v0.2 to acceptance
  • User feedback interviews
  • Stakeholder Demo

Roadmap update: 

  • Update roadmap to conclude v0.2 and begin v0.3
  • Plan for v1.0 release as all machines, 100% of products and an existing feature for recording notes
  • Add versions v2.0 and v3.0 to synchronise with strangler pattern migration

Iteration 3 development:

  • Implementation of configuration for double sided boards
  • SAP ETL batch job

Challenges:

  • Pivot away from the database migration in favour of pushing on with migration of Microsoft Access client

Week 6

Actions:

Iteration 3 delivery:

  • Update roadmap to conclude v0.3

Handover:

  • Questionaries and feedback interviews to measure success in enablement goals
  • Present to stakeholders and other interested parties:
    • Summary of the engagement, including achievements and fails
    • Observations to ways of working and performance of the team
    • Recommendations for opportunities to further modernise and improve delivery practices

Conclusion

Although we did not release v1.0 to production within the time of the engagement, the teams were confident it was ready and did release shortly after, making it the first application to start taking advantage of the platform.

We achieved the goals of delivering a valuable new application and preparing the teams with a roadmap for future modernisation and a set of concepts and guides that could be reused in other projects.

The pivot away from database migration was unfortunate but necessary, despite this we did identify a good adaptation of the strangler pattern that facilitated the iterative migration of client/server architecture.

As a use case for lean delivery, the combination of top-down analysis, weekly iterations of analysis, design and development and platform as a product, were key in demonstrating the ability to deliver software quickly and with continuous improvement.

The biggest challenge was time to enable the client. We tried to achieve a lot in a short period of time and while I'm glad we came out with some great results, trying to deliver the application and enable the client at that pace, was difficult to sustain.

Another major challenge was the ability to set expectations with SMEs and users. Their time is valuable to the business and their support is invaluable to the success of the software. A good balance needs to be found when collaborating in this way, or there is a risk of becoming siloed.


References:

Swift Methodology 

https://www.swiftbird.us/the-swift-method#:~:text=With%20the%20Swift%20Method%2C%20we,discovering%20clumps%20of%20business%20events

Discovery and Framing 

https://tanzu.vmware.com/content/blog/discovery-and-framing-design-studio

How I would strangle Client/Server architecture

https://www.do-wot.com/posts/patterns-how-would-i-strangle-client-server-applications