Time machine

Category: goal

Because I need to tune my process I’m going to build a mini-product from scratch. First, some history. Once upon a time… just kidding.

So let’s begin.

The core product, idea, “the why” or the “benefit” is the first thing that we need to figure out. That’s the need for the product, and the seed crystal that everything else gravitates around.

You can get it from an instant flash, an organized idea pool or brainstorming session or you may even steal it (and make it better of course).

For this experiment everything started with a funny tweet from @notepadconf that led to me an article on lifehacker and then it hit me – an app that you can use to jot down a little bit of text every day, like a daily log, a diary of sorts, or even a small poem is good idea for a semi-useful mini-product that wouldn’t draw me in the technical side of things but it would:

allow me to do an end-to-end product development tracer, from nothing to something user-accessible

allow me to fine tune my toolbelt and try some experiments with new third-party services

So, although you may just say “I’d just go and use Evernote” or “that’s what a text file on Github is for”, it’s not about that, it’s about building something new from scratch, in the open, as a kata.

Although ideas are pretty important, it’s good to know that they don’t hold all the weight. The implementation is far more important than the idea so don’t stress about you “giving your idea away” (if you’re working in a really competitive R&D sector I’d hold back on discussing my ideas, but most of the time nobody’ll steal your idea and work on it for a couple of years before it bares fruit) and talk freely about it – it helps.

So, my why is this: “Every day I write information in a text file on my desktop, I usually write small todos or snippets of text or things I’ve done, or some URL I want to revisit but I seldom do, or I delete it, or I forget to look at it ever again. I’d like to not lose this information, be able to look it up using a calendar, have it searchable, and from time to time randomly pop-up one of my dailies”

So my double personality is my client, and it has a need. That’ll have to do for now.

What?

In Prototyping the web API I started describing an idea to build a tool that can be used to try out/prototype web APIs before actually building a back-end implementation, helping a team to describe a clear and strict HTTP API, as well as allowing them to build and test client code without having written one line of server-side code.

This post is taking those ideas further, trying to crystallize the concept, objectives, goals and my overall expectations of this tool.

Based on my previous attempts at crudely building a harness for my web development habits, I’ve outlined a sort of a wishlist.

Apis, as I’ve so naively chosen to name this tool will be a part of my typical development stack and must:

Have a pleasant, easy to use interface where I can define the desired HTTP API, including endpoints, request and response configuration that I can export as a well-structured definition document;

Allow me to save the definition in a human readable and human editable format that can also be saved, compared and merged in a VCS;

Allow me to define standard responses for each API endpoint based on the request configuration so I can test the API, build a proof-of-concept API and even build a whole user interface decoupled from back-end services;

Allow me to define static resources that will be served alongside the standard responses, such as JavaScript frameworks, CSS styling and any other kind of resource I want to serve;

Be standalone and packaged in an easy-to-use installer so I can send it to my fellow developers that can load the API definition from VCS and work on it.

That’s about it. If it seems pretty simple, it’s because most useful things are, and should be…. simple.

Why?

This is a simple one:

I like a well-defined, clear and strict web API in my projects. I want others to want one too;

I like to prototype a lot. I want to be able to quickly prototype a web interface without having to set up a web server or –hell no– a full development environment. I want to make it easier for others to prototype;

I want to test my decoupled web clients in a clean, well-known state and I want my server-side code to have no idea who they’re talking to.

How?

This is a simple one too:

Not like I did before. I want a desktop app, not a whole bunch of code, glue and configuration files;

I want to build it clean, so I can easily extend it. I don’t really care about other operating systems than Windows so I’ll build a Windows desktop app;

No bloody way I am building it in some scripting language again and I code Java professionally so I don’t want to do it in my spare time. Plus, I really like C#, the .Net stack and WPF;

I’ll build it in my own time, build it right, and build it for myself (for a change).

So, Windows, C#, WPF, VS Express and a whole lot of will power it is!

I’ll build it iteratively and story-based. I won’t say agile because well, for an agile process treating communication and people problems… let’s say that you need a minimum of two people for hate or love.

When, Where and Who?

There’s no better time than now and no better place than wherever I am. The Buddhists say it well “Wherever I am, I am home, I am now, I am free”.

I’ve known about time-boxing and the Pomodoro Technique for a long time. I’ve even tried to implement it twice…. I didn’t succeed… so now I’m enforcing it.

Photo courtesy of Wikipedia

What the technique boils down to:

Keep all tasks that have to be completed today in a To-Do list – I already do this so it’s zero cost

Work in a 25 minute time-box (called a “pomodoro” – named after the tomato-shaped kitchen timer :) )

After each pomodoro take a short break

After 4 pomodoros take a longer break

That’s all. It’s brain dead simple… like all good things.

There are some other small rules, like never splitting a pomodoro and voiding a pomodoro if you get interrupted

The reasoning behind this technique is to increase your focus and concentration by having isolated timeboxes. It also helps you concentrate on the flow of your work, allowing you to work uninterruped and giving you time to rethink things after the breaks.

In the past I’ve tried to implement it using a “hardware pomodoro” – a real kitchen timer. It felt strange carrying it around and using it everywhere I worked… although they say that having a real pomodoro increases your confidence and desire to take action and I think this was one of the reasons of abandonment so I’m going with a software solution this time.

Since I always have my phone around with me I decided that using an Android application instead of a Windows (laptop-bound) application is the best choice.

After looking around on the Android Marketplace and testing a few apps I decided on the Pomodroido app.

Like this:

Every couple of years or so I feel the urge to change… to re-invent myself… to better myself. The urge has returned.

So, as one of my first 2012 New Year’s resolution I’m starting this fully transparent, mind-boggling bazar that will record my attempts, successes and failures in hacking my life.

This blog is actually my first life hack – an attempt in simplifying what I do and how I live. After thinking about it, I chose Blogger instead of my self-hosted WordPress, trying to eliminate any setups, configs and possible time-consuming “this-should-work” moments.