When I just started my career at company X, I was an extremely enthusiastic programmer. I would gobble up books on best practices, work at home on various side projects and constantly try out different designs and methodologies. I wanted to be the best.
A couple of years into my career I found myself in a position where I was the sole owner of knowledge and expertise in my field of work. I worked on JVM stack, and loved every minute of it. I had room to experiment with my projects and choose what I want to do and how to do it. Unfortunately, I came to be in this position due to circumstances of necessity rather than actual experience and expertise.
I was working at the URL Filtering Team at the time. A URL filter limits access by matching web traffic against a database to prevent access to harmful or unproductive sites. Our largest code base was the process responsible for updating this database. It achieved this by calculating the delta of new categorisations and normalising each entry to be consumed efficiently by our real time web services.
After a few small but challenging projects, I decided I am ready to take a dive into a large scale task. The task was to improve the performance of the process above, in an effort to update data more frequently and thus increase the security of the gateways. I had dollar signs in my eyes and all I could think of was — redesign.
As you can imagine, I quickly lost control over it. I had produced a design that used queuing systems and distributed services to replace the existing CLI process. I was drawing UML diagrams like there was no tomorrow. I wanted to be the best, but I didn’t know how to get there. As time went on this design kept getting out of hand and I started losing faith in myself. I was working completely alone at the time and did not have anyone with the needed experience readily available for me to consult with. And even if there were such people, I didn’t like interacting with them, so I preferred to do it on my own, no matter what. But most importantly, I did not want anyone to challenge my decisions, to tell me that my solution is too much and I needn’t use all the cool new technologies and design patterns I was so eagerly waiting to try. I was waiting so much for this opportunity to do whatever I wanted, and I was not about to let it go away.
A few more months passed and development finally started. I was not very agile at the time so there were a lot of design reviews even before a single line of code was written, but because there were no experts to challenge me, the review was more of a lecture than a discussion.
And so I quit my job. This feeling of being left alone when I didn’t know what to do combined with the fear of asking for help, made me resent my job. I left with this project still in the POC stage. I learned numerous valuable lessons in programming and project management, and gained a lot from these couple of years, but it was a complete failure to the company I worked for at the time.
In retrospect, I’ve made mistakes:
- I did not communicate properly with my superiors
- I reasoned my design decisions based on personal rather than company gain
- I was afraid to ask for help
I do not regret a single thing I did. But I can honestly say I was not a good programmer at that time.