It is a unique and gratifying experience to start a new major component of an already established product, and to bring it all the way from the blackboard until it eventually goes to production.
Before Meltwater, I developed prototypes, which proved concepts and inspired features. I also fixed bugs and added features to production systems. However, I never had the opportunity to go all the way from the idea to the utilization. In fact, in many environments the bridge between these two stages is never meant to be crossed by the same team.
At Meltwater, R&D and production systems maintenance are not so strictly split, and the work of most engineers benefits from a healthy balance between the two. In addition, here it is actually possible for an individual to make an impact.
While getting something from inception to production is greatly rewarding and satisfying, the process itself can be quite tough and frustrating. Nevertheless, the hurdles I faced taught me important practical lessons.
Here some lessons that I want to share:
At any point of time, have three presentations ready. First, the “business presentation” gives a high level overview of what problems your project will solve for the end users (do not be surprised if you don’t know that yourself: while preparing, you will find it out). Next, the “API presentation” is aimed at the developers who will be interfacing with your software, and details on a technical level how they can interact with it. Finally, the “implementation presentation” focuses on how your software works inside, and is aimed at those who might be helping you with it, and, of course, at yourself. Expect to give each of these presentations dozens of times. It could be enough to just have them ready in your head, but I highly recommend a small UI, readable test outputs, actual slides, possibly some UML … whatever applies.
Be as fast as you can. Otherwise you risk that too many things change under you, making your project outdated and irrelevant. To be fast, you need to reinvent as little as possible. For example, if you need to do information retrieval, you can adapt Lucene, instead of challenging yourself with writing a personalized solution from scratch. If you are using SQL, an ORM technology might help you get things done several times faster.
“Design takes as long as it takes.” No matter how quick you need to be, you cannot skip this part. When you start something from scratch, solidly designed foundations make the difference between making it to production or not. Restarting the design process 3-4 times seems to be a normal thing: failing fast on the bad attempts certainly helps.
No matter how fast you are, there will be huge changes to adapt to. Keep in mind that from the point of view of the rest of the organization, your software does not exist yet, so don’t expect people to excessively coordinate with you and your needs. You are basically running, trying to jump onto a full speed train. However, going fast is not enough: you also need as many tests as possible. I have the strong feeling that if I hadn’t switched to (a mild version of) test-driven development early on within each project, I wouldn’t have gotten to production. Tests help you to stay flexible.
Make a clear split between prototype and implementation. While you are still prototyping, you don’t need to write tests, or to do speculative generalizations for the sake of adaptivity. If your prototype does not get green light for productizing, you have saved time.
If you do make it to production, after several days of thundering silence you will receive the first bug report for the new component. It would have probably bounced around quite a few times before finding its way to you, tracing a path for the ones to follow. Love it, print it, put it in a frame if you’d like: this is going to be your prize for the journey you completed. Plus, of course, the journey itself, and what you learned along the way. One last thing: In all your excitement, don’t forget to fix the bug! :)
What are your thoughts on getting from ideation to production in a software development project, or even any other project? Share your comments below and lets discuss them.
Photo credit: lac-bac @ flickr