I have spent an entire year on this organization trying to deliver a software product. I now look back at those first few moments when I started typing on this keyboard and on this journey. Hindsight is always 20-20 they say, but until you realize that there are things you could have done better, you will never learn from the past. I would like to consider this as a post mortem and a reminder to myself when I read it in the future.
Focus on Data Models
I should have insisted on gathering enough information first about the type of data I was going to work with. Conceptual data models are a way to describe the real world characteristics of an object. Defining a standard of what a Trade (I worked on a financial system) should look like should have been my first step. Looking back, I realize that we did not have a handy standard and I did not spend enough effort trying to come up with one.
There are a number of benifits for having a standard, widely accepted form of a Trade (and other conceptual data models). This would have ensured that whatever component I built would still become usable with other applications accross the organization (eventually, if it was properly designed). A standard would also deter idiots (mis-informed developers) like me from creating wrong or inaccurate data structures. And of course, it would have saved us a lot of time.
A good data model would also have provided me better information as to what a valid Trade looks like. This would answer simple questions like is the Marketer Name required and how many characters could it have? It would also answer questions regarding the state of a Trade. Is a Trade valid if it has a Soft Dollar flag of “S” and a Trade Source of “LIQ”?
Build Small, Decoupled, Extensible Components
A simple component does not mean it lacks functionality, it means having enough functionality to render itself useful. I should have focused on smaller things rather than bigger things. I should have written components that could be extended and shared across applications. As with most developers, I had fallen on the same sin of developing things without thinking of the betterment of mankind.
I could have developed components that were simple but extensible. Making them usable enough to serve their purpose before adding that extra layer for the specific needs of the current project. There were a number of times when this opportunity to make the world better presented itself, but alas I let the left side of my brain win and decided that time is of the essence and to hell with craftsmanship.
Building small while thinking big is still something I need to learn. It requires a good eye for contracts and a crystal ball that would predict probable change. “Must try harder!”
Training as a Team
I should have insisted that regular internal training sessions be conducted. This would have improved team morale and cohesion. No team works harder than a team that has a single purpose: “to become better!”. I could have used these training sessions to learn more about the individual team member’s skill level and interests. This would have allowed me to partition work accordingly and effectively.
Conducting trainings across different groups within the same project would have also opened up ideas as to how to work more efficiently with them. It would have created a sense of pride with what they have accomplished instead of competition between them. Writing this now, I realize I should have sold the training sessions as brown bag sessions. This is a good forum where different teams could share and highlight their accomplishments on a regular basis.
Post Mortem
I would like to think that I did well over the last 353 days. Gaining new technical knowledge and another year of experience will do my resume good. From a personal perspective, that should be enough for me to call it a partial success. But the benefit I got from working with such a diverse group of talented individuals is a lot more than that. I learned the universal standard of respect. For this I thank all of you guys.
I have so much more to learn…