Friday Linkage

This weeks interesting links are:

Failure as an indication of progress
This post features a great video about Honda’s Indycar racing experience and how they have an attitude that you have to fail to push the envelope.  This is something I can understand, as I recently started learning to ice skate to play ice hockey.  I noticed quickly that there are two schools of thought about falling: the first is that it is a bad shameful thing and the second is that it is necessary to find out where your limits are.  Without regular failures it is very hard to continue to improve, nothing focuses the mind like working out what went wrong.

Stop bouncing: tips for website success
This post is a great introduction to using the Google Analytics service to guide improvements to your website with the aim of helping to retain visitors to your website.  If you find the article useful I would highly recommend the authors personal Analytics blog ‘Occam’s Razor‘.

Patterns & principles help me sleep!
David’s post about the effects of truely understanding and using design patterns and principles as opposed to memorising them for buzz word bingo purposes.  As I am currently swatting up on design patterns in preparation to teaching a short course about them in two weeks, I found this post fairly encouraging.

Are you throwing away readers by posting at the wrong time?
An interesting post on when to time your blog posting, as someone who already schedules their posts to publish at a certain time (01:00 PST) I found this a quite interesting read and something I will need to think about when I schedule my posts more.

World of Warcraft is the new ‘third place’
It is very interesting to see a computer game being listed as a ‘third place‘, with over ten million players I guess it really is a global community now.

Fight daily meeting drudgery!

I have noticed over the years in daily stand up meetings that there seems to be two common forms of answer to the standard Scrum questions:

  • What did you do yesterday?
  • What are you doing today?
  • Are you blocked by anything?

The first type is the concise answer which is in my mind the ideal answer, one that provides the necessary information in the minimum amount of time without any excess fluff.

The other type  is the rambling answer that attempts to contextualise itself but really just drowns in excess information.  I have even witnessed people using the questions as a chance to rant at their (effectively) captive audience or as a chance to start discussion.  Discussion is a good thing but not during a daily stand-up with the whole team listening into to a few individuals discuss something, that gets old fast.  Have your discussion after the meeting to spare those that are not required.

These two different styles of answers can make or break the scrum experience for the participants: too many ramblers in a stand-up meeting can make the daily meetings feel like a sentence instead of a chance to find out what everyone else is doing.  The purpose of these daily stand-up meetings is to: update the rest of your team on your state: what you did yesterday, what you are working on today and any work blocking issues you are experiencing.

The goal is team wide visibility into the state of development and the corner stone of it is quick efficient short daily meetings.  So keep those answers as concise as possible, this will require thought on your part to compose your answers before its your turn but your co-workers will appreciate it!

You Aren’t Gonna Need It!

A very common trap to fall into while implementing a new system or feature is to add functionality to ‘future proof’ your code for a use case that you imagine in may be required in the future.  The future for the purposes of this post is any time that is not in your current development iteration.

This may seem harmless but consider that the future use cases you are imagining are not something you fully understand yet: as most of us will admit we are pretty bad at anticipating the future.  So how can we hope to implement future functionality successfully?  The most likely outcome is that whatever you implement now not be sufficient when you actually try to use it in the future.  This will mean more time will have to be invested in the future to refactor or replace the functionality with what is actually required.

Unless you also plan to implement a full set of tests for this new functionality then you are adding extra code to your program that will not be correct and will not stay correct.  This can also lead to really weird run time behavior if the flow of program execution goes into your new ‘future proof’ functionality unexpectedly: which can be very hard to debug.  Adding functionality for future use without corresponding tests also means that as the rest of your program evolves the future functionality does not evolve with it, this means by the time you actually try to use it that it is most likely hopelessly out of sync with the rest of the code base.

The future functionality is also expanding the size of the source code of your program which leads to unnecessary code bloat.  In some compiled languages (e.g. C++) code bloat will lead to increased memory usage and decreased program performance which is highly undesirable.

Another thing to consider from a business stand point is that you are spending time and money implementing future functionality when you are not being paid for it.  This is a strong indication to me that implementing future functionality makes little business sense.  As it means spending money now paying developers to implement functionality that you can’t sell right now.

There is a handy acronym for this: it is YAGNI which stands for ‘You Aren’t Gonna Need It’.  The essence of this concept is to only implement the functionality you need right now and to implement in as simple and robust a fashion as possible.  As simple robust code (preferable with acompaning unit tests) is code that can be easily refactored in the future to meet future needs and that is cost effcient!

Friday Linkage

This weeks interesting web pages are:

ASP.Net MVC: Release Candidate One
This week Microsoft released an official release candidate for their ASP.Net MVC framework.  Check out this blog post for a list of whats has changed.  ASP.Net MVC has been in beta for a while and I’ve been trying to wait patiently for a more concrete release before trying it out myself.  Mostly so that if I do like it and use it for a project that I then don’t have to do much rewriting if the API changes between beta and release.  So I will hopefully get some time to try this framework out in the next month.

Apanta Studio
Apanta Studio is a web development IDE which is completely free and based on the Eclipse platform.  I was inquiring about a decent php and python editor and had this package recommended to me so it is also on my ever expanding list of things to try out.  It also supports AJAX, Ruby on Rails, CSS and HTML editing so unless I end up deciding to write my sites in ASP.Net I will most likely be spending a lot of time getting to know this package.

Read the Diffs
Eric makes an interesting suggestion about reading the diffs of the changes your co-workers made the day before every morning.  This sounds like a good way of keeping up with what your co-workers are doing, helping improve code consistency and you may well learn something cool as well.

Can you cure copy & paste disease?
I think any experienced programmer has encountered the horror of a code base that has massive amounts of code copy & pasted around inside it.  Mass usage of copy and paste is generally a bad idea: especially if the person doing it does not fully understand what the code they are copying actually does.  This post discusses the idea of disabling or limiting the usage of copy & paste and if it would improve code quality which is an interesting idea.

Winston Churchill’s Daily Routine
I found this really interesting given all that Churchill achieved during his life to see his daily routine.  Being British he is one of our national heroes for leading the country through the dark years of the Second World War.  I wonder if the routine mentioned in this post covers the years during World War One and Two?

Recent Software Discoveries

In the last month I’ve come across several useful pieces of software which I thought I would share:

Launch Bar (Mac OS X)

Launch BarOne thing I noticed when I switched from using Windows PCs at home to using Macs was that there did not seem to be an obvious equivalent to using the run command (Windows Key + R) to open directories, URLs and launching programs.  The built in Spotlight application can launch applications in a manner similar to run but not open applications or URLs.  Launch Bar is a Mac only application that addresses this and adds extra features like a calculator, targeted Google searches (maps, general, groups etc) to allow you to access any file or application on your Mac or URL on the web quickly and easily.  I highly recommended this application: I now wish there was a Launch Bar equivalent for Windows!

Remember the Milk (Web)

Remember The MilkI admit I was very skeptical about a web based To-Do list application but I kept hearing people raving about Remember the Milk so I eventually decided to try it out myself.  Despite using GMail for almost a year I really was not expecting the responsive and feature-rich user interface this site provides.  There are so many little details that make this one of the most progressive To-Do list applications I have used in years e.g. entering dates is super simple: want tomorrow then enter ‘tomorrow’, want this Friday enter ‘friday’, want the 27 of February enter ‘feb 27′.   It puts grown up To-Do list applications like Microsoft Outlook to shame!

Twitter (Web)

twitterTwitter can best be described as a micro blogging system where all blog entries (called tweets) are one hundred and forty characters or less in size.  Users can follow each other which is similar to subscribing to a blogs RSS feed.  This produces a constant stream of tweets which you can either view through your customised twitter home page or through a client like twhirl (below).  Twitter is very useful for exchanging micro updates over the course of the day with your friends and people you respect or find interesting, especially for details that you would not bother with a blog post about.  Although be careful who you follow or you may get more information about what they are currently doing than you would prefer.

Twhirl (Windows & Mac OS X)

twhirlTwhirl is a client application for twitter that runs on the adobe Air platform (essentially Flash for the desktop).  I had been using twitter via the default web user interface until last week when I switched to twhirl.  I had heard of twhirl before then but had been put off it as it used Adobe Air and I’ve been burned in the past by Adobe faulty auto update software before which had put me off free Adobe software.  Twhirl has been a very pleasant surprise in terms of quality and ease of use: I especially like the option to fade out the UI if it goes out of focus (e.g. you switch to another application).  It even has built in tools to shorten URLs, which is very useful due to twitters message length constraints.

Have you discovered any great software recently?

Presentation Pet Peeves

Have you heard the term “PowerPoint poisoning“?

I have come to dread presentations especially those that involve PowerPoint: this fear has developed over the years mostly due to sitting through way too many terrible presentations.  Here are several trends I have noticed in these painful presentations.

  • Reading the slides to the audience.

    This is my number one complaint, most people can read faster than they can talk yet most presenters fall into the trap of reading their slides to their audience.  I read pretty fast, so I am usually finished reading the slide way before the presenter is finished reading the contents of the current slide.  I would rather be emailed the presentation so I could read it myself than have to sit through someone else reading it out to me without any extra embellishment.

  • PowerPoint encourages bullet point lists.

    The large text size, overuse of team or corporate logos and stylised templates encourages the use of bullet point lists.  Bullet points list in presentations are terrible as the text size prevents any sort of length or detail.  This means that the information has to be condensed to the point of being almost worthless.

  • Lack of hand outs.

    Most presenters don’t give out hand outs: they expect the PowerPoint slide deck to be all the audience requires for future reference on the presentation, most are not even aware of the note feature built into PowerPoint for generating printed hand outs.  If you are giving any sort of technical presentation a handout that is more in depth than the presentation is a must.

  • Slide layouts & logos.

    To a lot of presenters it would seem that having a fancy PowerPoint template complete with corporate or team logo is more important than the actual content of their presentation.  I suspect that more time has been spent on the layout and logos of a lot of the presentations I have seen than the actual content.  Which is a disaster as the content is what is going to keep the audience engaged, not some fancy slide template or moving text.

  • Lack of pictures.

    You see very little eye candy in most presentations, but having images gives your audience something to look at other than text.  We all know the phrase ‘a picture is worth a thousand words’ yet the content of most presentations is mostly text not images.  This makes no sense as images are one of the most effective tools for the communication of ideas and concepts.

I’d highly recommend reading this brief article which also talks about the pain of PowerPoint usage in particular and recommends a general product recall.  I think a lot of the issues I’ve outlined above about presentations can be traced to the assumption made by most presenters that they are just delivering information: this is false as merely delivering information is not enough.  You must teach your audience the content of your presentation, not throw the information at them and hope it just sticks (it won’t).