Tuesday, September 18, 2007

Source code and lullabies - (Infant Driven Development)


I am a brand new dad, so in these days I have very little time to spend in programming on side projects. However (strange but true) I have been able to start again the development of one new version of Jirino, my bugtracking and project management tool.

How I have been able to find the time for this project ? Finding out practices, tips and techniques that helped me in this state of emergency !

What tips ? Here is a small list:

Be Portable all the development environment you need must be installed in a notebook (or some similar portable device). If you need servers, install them also on the development PC. Use the local server when you can’t be connected to the network. Use wireless network, not cables ! Your network will be accessible from every place within the signal range. So you can work, say, in the kitchen, in the bathroom, in bed ..

Fast Start Everything needed to develop must start and be available within 30 seconds from the power up of your notebook. There should not be manual confirmation or manual tool selection.

Forget The Big Thing the target for each working session must be resized to very small goals – don’t even think to complete a feature during a session. Try to complete only that 10 lines of code. Test Driven Development helps ! It allows you to focus on very small targets (the single test has to run with success) that -luckily- most of the times coincide with real features.

Forget Time Management Be prepared to work every time you can. Try to make plans on target results (eg. ‘complete the text search feature’), not on daily tasks. Forget time management practices, from tdP to time tracking. If you still want to track working time, use a small timer that can count seconds or minutes, not hours. Make sure that it is possible to start and stop it automatically or with just a click: if it takes too much time to manage, forget to use the timer. Use your precious time to write code !

Shortcuts Help ! Prepare keyboard shortcuts for everything you need. The shortcuts should be selected with a single hand… and tools like Launchy or Colibri help a LOT !

Your Tools Help ! - Every single tool that can be used to avoid manual work is important. Try to write your own tools or macros when you see that you spend too much time in repeating tasks.

Every Moment Is Good For Development or Design Even moments that usually are not. Depending on your concentration capabilities, you can develop during breakfast or plan / design during driving. In the latter case, you can try to record voice notes instead of writing / drawing .. but be careful !

Choose The Simplest Technology (If You Can Choose) Sometimes there is no requirement for a particular technology or language. In this case, choose the simpler one. Prefer Ruby over java. Prefer Rails over ASP.NET. Prefer small IDEs over huge-with-every-feature-you-can-think behemoths. Prefer ASCII readable formats.
If you are in doubt, however, choose the technology you know better: complex technologies in which you are expert are easier and take less time than easy technologies you still don’t understand completely.

Keep yourself disconnected Surfing the web, reading blogs and feeds, instant messaging and socializing on the network takes a lot of time. If you want to take maximum advantage of your programming time you should consider to keep yourself disconnected from the Internet or at least force yourself to close all the Internet tools not strictly related to software development. If you want to keep some time for this kind of activities, be sure to connect the Internet only after you have completed the development tasks.

Motivation – Love you project ! No best practice or agile technique can help to succeed as simple motivation. Be organized, be methodic and you will fail if you don’t like what you do. Be motivated, care about the project on which you are working, and you will probably have success no matter if you are very well organized and disciplined or not.

Conclusions

Take it as it is. This post is just a list of small tips that worked for me, my project and my family. Please don’t get it too seriously and –please- don’t flame: I guarantee that I’m not going to create a new methodology or to sell you management books on IDD !!




9 (smart) comments:

KMAPSRULE said...

I actually accomplished an amazing amount of coding when my daughter was born. I think the short bursts of activity helped me be a lot more focused! Although there were days I would look at some function I had written at 2 am while rocking or feeding the little one and wonder if I needed to be checked into the insane asylum. I strangly miss those early morning sessions typing with one hand while holding my daughter in the other!

James Juno said...

Something else --- after frustrating, dead-end sessions, you might walk the dog or water the flowers --- and out of nowhere, the solution pops up. I've spent days working on a problem, only to wake up in the middle of the night with the answer sitting in front of me. Strange! Forced, "cubical" thinking just doesn't work for many of us.

Stefano said...

kmapsrule - I AM actually writing this comment with one hand, and a feeding bottle in the other .. !

Stefano said...

James - you are right: sometimes changing the rithm or just doing something else may help us to find fast and (strange!) good solutions.

Mark said...

My wife had twin boys 7 months ago - I still haven't managed to figure out how to find time for my side project :(

rrab said...

transcript:

public voi
DAAAAAD - i need a weeee wweeee
wee wee
d foo( Fighter daft ) {
Pun
DADADADDADA- climbing up leg and rubbing eyes
milk and sleep
k

Stefano said...

Mark - I was sure I could'nt find time until I really tried ... however twins must be very difficult to manage !

rrab - You should try to unit test and refactor in order to increase the quality of your code ! :)

Daniel said...

You're quite lucky if you have the gift of a channel-switching mind that can quickly turn its focus entirely to code, do something productive, and then get back to your family. My brain doesn't work this way.

I'm aware of my limitations, and the way I see it, I have a whole lifetime to design things, to learn new skills and to hack code. Now is not the time. My son is still a baby, and I need to be there physically and mentally too. I'll wait until he's old enough to keep himself busy (or when he tells me to leave him alone!). Until then, all but the most trivial projects are on hold.

Stefano said...

Daniel - You will be (well, you already are) a great father.

Post a Comment

Note: only a member of this blog may post a comment.