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
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