I always get the feeling wanting to punch a bag when getting something I am really proud up and running. This is one of them. After many weeks hard work, we have managed to get this whole new system to a decent, demonstrable state, in a pretty much 20% time investment sort of way (well, at least for me). Great job everyone!
This is what I have always believed, do what is opposite to everyone else does. Otherwise we are just gonna be another someone else. There was no what so called by-the-book project management, we have confidence and trust on each individual and believe in their commitment and skills to deliver their parts. This is one of the situation when everything was well-considered up front, and they are plugged together, they just worked! When I looked back to those intense nerve-breaking argument and challenges everyone brought onto the table, they suddenly all make sense. I am so proud what we have achieved so far and really looking forward this to be recognised sooner by our customers and competitors, well, maybe in different ways.
Of course this does not mean that we are just a bunch of ad hoc headless chicken. Quite oppositely, I realised that once the best practice becomes habit, it is hard to not to make it work. We have some great team players who are willing to keep their head up, taking up all the shitty, bread-and-butter daily supporting work to allow us being able to tackle with problems. They are real heroes. I could not remember how many times I have shouted to get people's mind around and brought all of us to focus, they took it in the constructive way I would never be able to do myself. Thank you very much for putting up with me and the credit should be with you.
Here is what we have done.
We have initially scribbled down all the desirables end users would like to be able to feel about, of which they are very descriptive. Everyone is not sure where we are going to start as it did not make sense by any book of knowledge as where the system architecture is going to be. To manage this stage of fuzzy feelings and ideas are quite a tricky thing as people would naturally have doubts and suggested whether it would make more sense by starting to do something for real, i.e., writing some function spec. Spec is important, no doubt about that. But without sound and very objective outside views, I would not dare to think what would come out of months and even years of work without sense of customer perspective. So I would suggest, knowing your customer, knowing who you are serving is paramount. To achieve so, is to sit tight and being critical about every single assumption or limitation in the system-to-be.
Next stage is what we are confident and comfortable to a reasonable degree where we want to achieve. We scan through the very basic functionalities user are expected to be see within first 5 minutes when they are exposed to the system-to-be. Believe it or not, the first 5 minutes are extremely important when you are evaluating a new system. Sexy UI, plug and play, easy and almost transparent self configuration of every piece of system, dynamic update of system status, well captured of all the thinkable failure scenarios and their fallback positions, these are what some experts would refer to as user experience.
Then we start, eventually, working on the design. We literately locked ourselves in a 'dark' room for a good couple of months. In very human unfriendly languages, we have abstract the core system into pieces and pinned down the fundamental data support structure, component definition, logic break down of the system layers, messaging and communication protocol, generic external device control interface. Let's just say at that point, when we walked out of that room, we do not know how to speak English (maybe I have never been able to do anyway). We do not know whether we needed coffee or just another sandwich. What an enjoyable painful period!
Coding could not be easier. I know people kept saying not everyone could be great programmer unless you have mastered a lot of cunning skills in the language you use or the subtlety the platform you are working on could provide. But at the end of day, what really seems to matter is how you drive, how you picture and to find the piece in the puzzle fit your purpose. We did not choose to let the language or OS API to lead us. We did the opposite, yet again. Coding could not be easier, as long as you know what you want. In fact, I got annoyed every time when I tried to pair program on one of team member's computer as he kept setting the keyboard setting to some bizarre configuration and I could never be able to find my icon and not mention all the familiar shortcuts which have become essentials to me. The code was far from being great as some of them are not that straight forward to understand. In fact, I started to think whether easy-to-understand is really a fair criteria. The dynamic performance of the code requires us to put a lot of dummy code behind us. Being a real time control system, we just could not afford to have ten lines of code to manage the stream overloading or fancy dictionary. What actually came out is a nice flowing picture how every cell of the system passing information and behave itself when they are supposed to be working together.
Test, is not a nice to have, it is a nature of this business. There is no more to say about this. We are by far from being testing expert, nor do we have great automated test suite. But we test every component in our mind and by means of poking the component from every possible angle dynamically. We have had a nice clock mechanism in placed where it will initiate some random sequence of system behaviour and update with no assumption of what preconditions are. Test the code itself seems to be too nice a fantasy to have, but we certainly tasted a slice of it. With a graceful failure capture engine in place, we could know exactly where the failure happen and thanks to the master clock, we were allowed to replay exactly the sequence which made the failure happen. The key point is, we have something always running from almost the first week of the development. Of course many of those failures come from our 'dummy' internal users! Many thanks to you and we are grateful to your support along the way, doubts, challenges, rants :).
This is certainly not the end, we all know there are lots hard work in front of us. But this day is to be remembered, and this day we are so proud of what we have achieved.
The most exciting thing about this world is its ever changing quality.
Sunday, March 22, 2009
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment