Don’t hire me!

I’m young, inexperienced and a perfectionist.

Over two years ago, two of my closest friends who were at the time studying for their first year of university, came to me with an idea for an app to help university students. I was intrigued and I decided to be part of the team to be solely responsible for the design and engineering of the application. We opted to go for a web app purely because I was the most familiar with this platform but even then I had no prior experience and my friends were aware of this. I would be balancing my time between this and a well paid part time job at a local school as a music technician. Seemed fair.

Like many young developers, I was using this opportunity to learn on the job and at the time the language and framework of choice was Ruby on Rails. It seemed cool and would achieve what we wanted. I got to work right away, and started learning the bits I would need to build the application. It was a slow process but my friends understood, after all, I wasn’t being paid so they couldn’t complain.

Within the first 3 months, I had a proof of concept. It was pretty poor and was miles from being production ready, but it didn’t matter; it was a start.

I decided to quit my part time job and work full time on the app with the hope to focus my time on it and get it out sooner. I would later realise this was a bad move and it had the opposite effect. Having the two jobs allowed me to set apart my time and therefore I could set apart my focus on them, giving me much better bursts of productivity. It forced boundaries upon me in terms of how much time I could put into the app each week. Instead, the time I had just ended up becoming one large giant blur and I got bored easily.

I spent a lot of time playing games, watching TV shows, and felt guilty because of it. I needed something to stop me from going insane and this seemed like a good option. However, a week long binge on a particular TV show is probably not healthy in itself.

I carried on for many months creating the backend framework that would make up the core of our product. Each time I got close to completion, I would not be satisfied and would go back and change something. I was over complicating the application requirements and in turn, slowing the whole development process. I would spend weeks on the most ridiculously insignificant features and would spend days stalled on tricky and buggy code. It drove me to start hating the application.

It’s no wonder really; the problem stemmed from a target that I would set myself, get 75% of the way there and then I would raise the target higher or change it completely. It felt like I was never able to achieve anything and therefore get the satisfaction for it.

12 months down the line, with no working prototype and a hatred for the application that I had built, came a willingness to change something. However rather than seeing myself as the problem, I blamed the Ruby on Rails framework for my problems and so I started looking for alternatives.

In comes node.js, it seemed cool and would achieve what I wanted so I decided to start again. Node.js is less of a framework and more of an environment and I thought this would suit me better as it wouldn’t confine me like I thought Ruby on Rails did.

I decided to have a client-side app and render the views in the browser as it was the “in thing” to do. I used all the goodies available to me such as Backbone, jQuery, Bootstrap and component. This tied to a node server running express.js and mongodb. To top it all off I wanted to be cool so I wrote the whole darn thing in CoffeeScript.

All of this new stuff came with its own challenges and as a result I found writing this separate app for the front end hard. It seemed the client-side javascript would get exponentially more complicated as I implemented more features. Managing all these new goodies was becoming a pain as well, so I got rid of some of them. First to go was coffeescript, then bootstrap, then backbone until I was left with basically no front-end app. I started to beef out the server app with templates, but would still rely heavily on client side javascript and components, to a point where it would be a mammoth task trying to support this on anything but the version of Chrome I was using.

I would spend weeks on the most ridiculously insignificant features and would spend days stalled on tricky and buggy code. Remind you of someone?

Finally, I had the realisation that I had to change and that I had been causing myself unnecessary heart ache by overcomplicating the product, trying to be cool and using too many new “exciting” technologies. Only two years too late. The perfectionist in me could only see the finished end goal, and I would not accept anything that didn’t meet that expectation.

I have learnt that a perfect product is almost impossible in software development and one should not set their expectations that high at such an early stage, because you will be bitterly disappointed.

It was then, two months ago I whipped open textmate, and started my project all over again. However, this time I adopted the words minimum viable product as my guiding principle and as a result I have managed to trim the fat from my application and progress further than ever before.

However, the last 2 years haven’t been a complete waste of time as I have learnt a great deal about unit testing, database design, git, components, node and much much more. All of which I am using in the application today.

I still haven’t got to a product I can release yet, but I am confident that with the lessons I’ve learned over the past few years, the app that I have today, I can and will succeed very soon, even if the product fails to take off.

Some of you maybe in a similar situation to me and I hope you can learn from my mistakes before you have to figure them out for yourself.