With a glut of free time of late, I have chosen to take some time to
write some code as part of a personal project. Primarily, I wanted to
really dive deeply into Spring framework beyond the basics of web
application development. At the same time I didn’t want the effort to
go to waste and so I have decided that I really want the project to
have a use in the real world.
With this in mind, I have decided to develop an app that allows
learners and speakers of the Welsh language to find
restaurants, coffee shops and (possibly) other kinds of services that
cater to their language needs. It’s a simple idea but, surprisingly,
there is very little in the way of this kind of thing online.
But this is a bit pie in the sky. I’ve had a number of ideas in the
past that have never come to anything. At work I’ve found that
implementing software with another person’s criteria in mind is
usually fairly easy to accomplish but, invariably I’ve failed
miserably when it comes to putting my own ideas into action. I’ve been
wondering why that is.
I have a fair few ideas why this was the case. Suffice to say, here
are some ideas I’ve had in order to try and overcome these difficulties
that, so far, seem to prove successful.
Breaking down the task
When I settle on an idea, if I meditate for a little while on the
totality of all the work to be done, I find the whole thing
If I use a physical kanban board I find this helps a lot. For more
details on Kanban, see this great Google Talk with Eric
Brechner. Writing small tasks on little cards and placing
them on a cork board, I can instantly see the subsystems of the
software, the features I have considered.
I’ve taken to placing a pen and a small pile of cards next to the
board so that the instant I have an idea, I can write it on a card
and place it in the list of pending tasks. As I’m both building the
software and deciding the parameters what it’s supposed to do, I
can then easily discard any cards for ideas that turn out not to be
Also, without being tied down by anyone in for a deadline, it’s
quite easy to arrange the order of the cards any reason that suits
you. In my case, I try to work on tasks that present parts of
Spring Framework that I haven’t used before and flip between these
tasks and other that might be easier for me.
Little and often
When committing to read a book, I will never hold myself to a
deadline. More often than not it’s because I find that I rarely
have the time to commit to it. Some days I am far more motivated to
read where I can read a number of chapters in one sitting whereas
other days I have more important things to do.
What keeps me going is making to commitment to do a little bit each
day. Ideally I try to read for an hour but there are many times
where I will only read for twenty minutes. But, by consistently
doing something each day, I eventually get through the book and I
don’t lost track of the narrative.
Similarly, with my personal project, I am in the habit of doing a
little programming each day. If I have little or no motivation,
writing a small unit test or refactoring a small piece of code
helps me to continue to progress with the project as well as making
me more familiar with the code in the code base.
Another thing that has really helped in this regard for me is the
contribution graph on GitHub. Trying to keep as much of it green
gives me a sense of achievement. For reading, I update my progress
on goodreads. Sorry to all who are on the receiving end of them!
Stick to the stack
This has been a huge impediment to me in the past. Sticking to one
technology to implement a personal project is particularly
difficult when there are so many languages, frameworks and
In this sense, the best tool is the one that you are already
using. Of course you can do a rewrite if absolutely necessary but
context switching to another language or framework is probably more
costly than the gains you might get from a more modern set of
libraries. If I really want to learn the latest and greatest of the
on a new project instead of retrofitting it to this one!
In this way, I can concentrate on becoming better at using this
framework or that language in a way that I wouldn’t have had I
switched technologies frequently. Also, having a deeper knowledge
of one technology may help you to better understand the
capabilities of another. For example, understanding web development
using the Spring framework will help you to understand the
capabilities and underlying mechanisms of Groovy on Grails.
Using a particular set of technologies for an extended period of
time will also allow you to write code in a more idiomatic way that
makes writing code more enjoyable and also, easier to write. Your
project will become less of a burden and you will find that you can
achieve more in a shorter period of time.
Ultimately, to make a personal project succeed, what I think it’s
important to have a clear idea set in your mind, hopefully to program
something that is going to have a real purpose. While the idea needs
to be clear, the detail should be broken down. Any thought of a
potential feature should be written down before it’s forgotten and can
be then be discarded later if it turns out not to be valuable.
Making sure that the project is worked on often , ideally daily, helps
to keep thoughts flowing and ensures that things stay productive.
Most importantly, not getting sidetracked by other thoughts and ideas,
usually other technologies cuts short the tendency to slow progress by
switching the focus or underlying tools used to complete the project.