Sometimes building software is ugly. There, I said it. Sometimes, especially at the beginning of a project that will result in a new system, especially when you are working with a new (to you) software paradigm, especially when you are working with a new team, building software is ugly.
I recently was part of a project which took an existing piece of software on one platform, with the intention of re-implementing it on a new platform. Perhaps the biggest challenge came from the fact that the technical architect or lead who had been instrumental in developing the original product, and who was familiar with both paradigms, defected from the project when we were preparing to start the re-implementation.
He had been the driver of the decision on the new paradigm, and it was on the basis of his capacity that we built estimates and plans. Without him, we had to hire resources to work in the new paradigm, and find a leadership paradigm that could move forward.
While the new team was forming, and the new leader was coming up to speed, we started an iteration 0 to build out new infrastructure, and then an iteration 1 building a walking skeleton. I had hoped that this would help the team form, and practices would be established. Without the right leadership in place, things were ugly. Decisions were not made in the right sequence. One of the managers involved in the project said:
He was right. To further the analogy, it felt like there was a body man, skilled in sheet metal repair and layering fiberglass and soldering metal patch, completely unable to envision a general pattern for attaching the body to the frame, or understanding the general principles of adding curvature or folds to sheet metal or fiberglass to increase rigidity. There was an engine re-builder, skilled at taking an existing engine , dis-assembling, blueprinting, machining, and re-assembling with new guts – but completely unable to understand how to design a way to connect that rebuilt engine to a different vehicle with a different frame and drive line. We had a brake and suspension specialist who could service brakes, shocks and springs , but was not really able to design a working chassis from scratch. And these three were trying to collaborate to work out how they would make all this work.
In retrospect, I don’t believe that any of these skilled craftsmen had ever had the experience of “standing up” a new application from the beginning. They were not “makers”, but “fixers”, “tuners” and “enhancers”. It is one thing to take a car, soup up the engine, modify the suspension, add some radical body work to make a custom vehicle. It is a completely different thing to build a one of a kind vehicle from scratch.
Ultimately, we did find an experienced technical leader who did/could get the decisions made, and who did understand the underlying design principles. And in truth, so did our three mechanics – it’s just that each was looking from his own specialty and not from the greater picture of the vision of the whole.