“A journey of a thousand miles begins with a single step” – Tao Te Ching (chapter 64)
On the day I wrote this specific blog article you’re reading right now, I reached a major milestone in a new enterprise application project I’ve been working on for the past four months.
I was so happy when I proved to myself I had reached that milestone, I was almost ready to dance a little jig in celebration (believe me when I say you REALLY don’t want to see that actually happen).
So what did I accomplish?
I managed to create an END-TO-END THREAD of functionality.
So what the heck is an end to end thread?
Imagine you’re a civil engineer tasked with building a walkable bridge across a rather wide river with a strong current.
Your ultimate goal is to have a completely finished steel and concrete bridge, designed for maximum structural integrity to hold the weight of heavy foot traffic and adverse weather conditions including wind, rain and other precipitation. It also goes without saying the bridge need to be straight as an arrow and high enough from the river surface, even during flooding conditions.
The soil conditions under the river bottom, as well as both endpoints on each side of the river, need to have the right consistency and composition to be able to hold whatever bridge supports and pillars will ultimately end up in the final bridge design.
I’m no civil engineer, but I can’t imagine the process to design and build a bridge is really that much different from the process to design and build a complex enterprise software system or application.
- Project analysis and requirements gathering
- Project plan creation
- Designing/building
- Testing
Whether it’s a physical bridge or a software application, they both require analysis, project plan creation, designing and building, and finally, testing the finished product.
Let’s just say the civil engineer has completed the initial project analysis and requirements gathering and comes up with a finalized project plan.
The engineer is now ready to build the bridge.
How does that engineer go about building that final bridge? What would be the first major milestone the engineer should complete to prove the project plan is sound and continue forward past that first major milestone?
If it were up to me, I’d want to work towards building an end to end rope bridge from one side of the river to the other side of the river.
What would this prove?
This would prove a connection from one side of the river to the other side of the river is possible to build.
Because that’s really what the bare minimum essence of a bridge really is when you boil it down … something that connects one side of a river to the other side.
And mind you, the rope bridge doesn’t have to be fancy or have many features. As a matter of fact, that rope bridge should be the barest minimum piece of rope or set of ropes you could possibly use, tied to bridge posts on each side of the river to connect the rope bridge together.
If the engineer manages to build that bare rope bridge from one side of the river to the other side, it gives confidence to the engineer that their project plan is sound, and furthermore, provides encouragement that work should continue forward past that initial milestone and continue implementing the rest of the project plan.
Coming back to my own project, my project requirements revolved around building a web application that allowed a user to navigate through a hierarchical menuing system and, through the web interface toggle control, install our core products and services for new customers.
The three major components of our web application included the following:
- HTML user interface
- Middle tier message brokering system
- Back-end database
In order to create an end to end thread of functionality for my specific project requirements, I would want to create just enough functionality that includes a very simple HTML page, perhaps a button control that says, “Install”, and a label next to the button control that displays the results of an installation action.
Installation status:
When the button gets clicked, it interacts with the middle tier message brokering system.
Think of a brokering system like a waitress taking your order, writing it on a food order slip, and delivering the order to the cook or chef in the back of the restaurant kitchen.
Once the order is complete, the cook places the order slip on the wire hanger rack with all the other completed food orders, where the waitress can pick it up and deliver it to the customer.
Once the message brokering system is processed, the application takes the installation order information from the message and connects to the backend database where a new order record gets inserted into the database.
The message brokering system receives a new message that the database insertion is completed and the installation confirmation message is returned from the message brokering system back to the HTML page.
This is essentially the end to end thread of functionality milestone which I recently completed.
The HTML page traveled through the middle tier message brokering system, then to the database, making a return round trip back through the message brokering system and back to the original HTML page.
Keep in mind what I just described and completed as my first milestone, was nowhere NEAR what I need for a complete application.
But what I accomplished was an end to end thread of functionality … like the rope bridge analogy, on one side of the “river” was my HTML page, and the other side of my river was the database.
I created a sort of “digital rope bridge” that proved I could connect my HTML page, through the message brokering system, and to the backend database, and then make the round trip back to the HTML page.
This gave me the confidence and validation I needed to prove all my initial project planning and design for my enterprise application was sound.
Each successive phase of the project will have new milestones, which will continue fleshing out the functionality of my initial milestone of functionality until I reach my final milestone, and what will come out is the finished and desired product (fingers crossed).
It’s very sound advice to put as much effort as you can into completing the first milestone as soon as possible within the overall project plan. It gives confidence and validation both to the software engineers AND the business and project manager folks, who are overseeing the business aspect of the project.
When your product owner or project manager can actually see that first end to end milestone deliverable in a demo, I guarantee you any lingering doubts about the project feasibility will quickly disappear.
It’s one of the reasons why that first initial end to end milestone is so important.
I sometimes wonder if many failed software projects happened because of the failure to work on a simple end to end thread of functionality milestone.
The more I read about the spectacular disastrous launch of the initial federal government HealthCare.gov website (Obamacare), which cost $840 million in initial project costs, and an additional $150 million in cost overruns to fix all the initial problems with version 1.0, the more I’m convinced the project planners and engineers failed to complete that initial end to end thread milestone.
Politics aside, the technical aspects of the project got mired in typical problems that come with large enterprise scale software applications and systems … changing or vague project requirements, not enough analysis and oversight of each major phase and milestone of the project, and many other countless factors.
And I can certainly sympathize with how daunting and difficult tackling a large scale new enterprise system or application can be.
But lately, I’ve been deliberately changing my mindset about how to tackle large-scale projects … thinly sliced end to end threads of functionality seems to be working out quite well in my current enterprise scale project.
Maybe dancing that jig won’t be so hard as I first thought? Is there an end to end thread milestone for dancing a jig I wonder?