has_many :codes

Live! (Eventually… with a few lessons learned)


Well, I did it – eventually; if you can read this column, it can only mean one thing: this blog is finally live! I must confess it took ages, mainly because of work related projects that have kept me exceptionally busy over the past months, to the point that I almost gave up. However, I am glad to see this first post finally published. A personal blog is something I have been wanting to author for a so loooong time, and following a couple of poorly failed attempts in the past, it looks like this may be the right time!

I actually started some months ago to work on a cool Ruby on Rails-based clone of the popular WordPress, as I love the ideas behind WordPress itself, but not their implementation; I definitely plan on carrying on with this project as soon as I can (and open source it once I have a first usable version ready), but in the end I had to give up for now because of lack of time, and …had to resort to using a customised version of WordPress, at least for the time being. In order for this blog to go live, I also had to give up  a number of features and optimisations that I had in mind, otherwise… well, it would have never gone live. At some point, as one who -for better or for worse- often tends to fall victim of some stubborn “perfectionism” and its distracting head, I came to the realisation that aiming for perfection can -more likely than not- only lead to a project never being completed. This site would never have gone live if I were to implement all the stuff that I’d like it to have, and make it as pretty as I’d love it to be (I am not a designer, therefore I may struggle at times even to put two colours together). The site now isn’t yet as speedy as it will be, yet it is acceptably fast, and also has a few “social” and search related features that I have been playing with and I particularly like and that may hopefully help make the site more useful to readers than it would be otherwise.

Anything else can definitely wait. So, can I say I’ve learned a few lessons already, while working on this side project, and even before actually starting to write content? Definitely yes!

Lesson 1: Let go of perfectionism

Go for the ‘good enough’ instead -at least for something new waiting to launch! I now tend to agree with who suggested that “premature optimisation is the root of all evil” (of course, taken in a very, very wide sense in this context). It may not always be the case, but often it is true that “premature optimisation” can turn out to be a huge waste of time and can definitely lead to loss of focus.

Lesson 2: Have a realistic deadline

Then stick to it, and try to get things done within that time frame. This if for myself one of the biggest challenges when working on a project, especially if it is something that I particularly like working on and for which I have tons of ideas. But, as said, a project will never be completed unless you have a reasonable deadline and stick to it. If you are serious about your deadline, most other things will fall into place. When I started work on this blog in my free time, I thought I would launch it when I was done with all the customisations and additions I had in mind.

But, yet again, I had to realise that this model never works, because I could always find features or improvements I could implement, with the result that I would never stop changing the code or the design, or something else (especially so since I gave up my Rails project and started working on WordPress….arghhh!! I am pretty sure now it would have taken less time to achieve the same -if not better- results had I carried on with that project rather than getting mad with all the crap that is in WordPress and in many of the plugins one has to use with it).

Having a deadline, regardless of the nature of the project, always helps keep the focus more easily on the more important features and tasks needed for the satisfactory completion of a project, with the ultimate goal of getting the job done as soon as possible, and with as good results as possible. From experience, I definitely know that sometimes it may not be easy to plan and schedule whatever is required to complete a project, especially when time or any other resources cannot be easily identified or allocated in advance. However, even in these cases defining a deadline anyway can still help determine how long it should take at the most to complete the most important parts of a project, for the project itself to still make sense.

Lesson 3: Seek instant gratification to motivate yourself!

When I happen to keep adding more and more to an already long wish-list of features, I usually end up feeling overwhelmed by the too many things to do, and the loss of focus that this likely leads to has often translated into some loss of motivation, as well. In this context, when there isn’t at some point some sort of “proof” for yourself to actually see that at least relevant portions of a project have been completed (for example, a first version of a website or web application live in production, publicly accessible and ready to use), and everything just seems to be a work in progress forever, that feeling is not easy to overcome.

You can prevent this by adequately prioritising all the project’s tasks, so that you can know in advance what needs to be done first, in order for you to launch a first version of the project. Seeing some results of your work soon can help keep yourself motivated. I’ve learned from my work related projects that it also helps to define in advance some sort of high level road map, splitting a project’s tasks into several phases, and sorting them by priority. Once identified what tasks need to be performed first, and what features need to be implemented for the more relevant portions of the project to be completed, all the rest can temporarily and safely be ignored for better focus and increased productivity, which in turn also helps build motivation.

Lesson 4: Deploy early for reduced complexity!

The sooner the most important features can be rolled out, the better, also for another reason: from experience, I have also come to learn that deploying early, and then often, does indeed help reduce the complexity and potential issues with each deployment, as there are less changes to track, remember and replicate in the production environment. This is especially true with development work.

Lesson 5: Focus on what needs to be done, not what you like doing!

This is an issue I often -perhaps I should say “too often”- encounter in my work related projects too. Not always as developers we have the luxury to work on stuff or with technologies we love or enjoy more, and this at times can also affect focus, and get us distracted by things we’d like to implement, and make us forget what the main outcome of the project ultimately is. Whatever the project, keep reminding yourself what the expected outcome is.

Summarising the five points above into a single advice to anyone who, like me, would also like to start, specifically, a blog, I’d like to suggest: forget most stuff for now and start blogging today! Don’t waste your best thoughts and ideas that you’d better capture right now while you don’t have the perfect place where to host them -as happened to me so far.

Don’t care too much about the design, you can make it prettier later on. Focus on what blogging is about…that is… writing on something you like! Also spend some time with SEO and promote your articles in social networks (if people can’t find your blog in a way or another, it’s pretty useless, unless you write purely for your own pleasure), but postpone anything else that is not needed from day 1. Happy blogging!

Needless to say, I will try myself to always keep these lessons in mind in the future. Now that this site is live, I’ve just realised that blogging itself may be even more challenging than I had thought! I will now have to look for things to write about, and hope readers find these pages useful. And, more importantly, I will have to make time for all of this. But I am sure it will be fun.

In the meantime, I hope you enjoy reading my blog and find these pages useful!

© Vito Botta