Personal project success

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.

  1. 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
    impossible!

    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
    so good.

    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.

  2. 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!

  3. 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
    databases.

    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
    JavaScript MVC frameworks, I’ll do all that I can to make sure I do it
    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.

This entry was posted in motivation, productivity, welsh. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *