Thursday, November 6, 2008
Blogging from WordPress on iPod-Touch
I was browsing through the appstore and just found wordpress. The iPhone/iPod touch client for wordpress. So, here is my blogging experience from iPod touch! Installation was quick as with other apps. Here how the main page looks like Setting blog is just as simple as it should be. Just 3 fields to get going! After that, you are all [...]
3 major annoyances in Windows Mobile Device Center..
If you have not migrated yet to Vista, Here’s one more reason to defer By now, everyone knows, that in Vista, ActiveSync have been downgraded to Windows Media Device Center. Here’s top 3 annoyances in using that. Can’t Backup / Restore anymore Windows Mobile Device Center troubleshooting guide clearly states, backup and restore device data feature is only available [...]
Wednesday, November 5, 2008
Writing a System Test Plan
Using a test plan to ensure your software really works.
Imagine for a moment youâve just finished a web application for a client. Swimming around within that application is 100 bugs. What proportion of those bugs would you say is acceptable for the client to find (e.g. 50, 30, 10)? The point is, those bugs are going to be found by someone, and its either going to be you or the client. You can think of it as a sliding scale, the more bugs the client finds, the more your creditability suffers and the more damage you do to the business relationship.
In the martial arts thereâs a saying; âexpect the best, but prepare for the worstâ. The US Navy Seals have a slightly more gun-ho version which goes; âThe more you sweat in training, the less you bleed in battle.â Notice how it says the âlessâ you bleed in battle, implying that if you enter into combat, you are going to get bloody. Software development is like this too, if youâre going to create software, you are going to get bugs.
As a rough guide, you want to try catch at least 80% of all bugs. Ideally, you would go for 100%, a worthwhile but lofty goal. Your best bet for catching as many bugs as possible is to create a system test plan. Creating a decent system test plan is easier said then done. A good place to start is your functional specification (assuming you have one). In effect, your specification gets converted into the system test plan. What you are doing is checking to see if the things you said you were going to do have actually been done.
A test plan is nothing new, in fact, the structure I use was developed by Microsoft years ago. Itâs a simple format, a test case has a title, some steps, and an expected result.

I write my test plans with the intent of having an independent QA tester run through it, so no prior knowledge of the system should be assumed. You want someone who has never used the system before because they will take a fresh approach. Youâre counting on them to use it in a manner which was never intended (e.g. on the âMy Profileâ page, they type in a really long name for the âCompanyâ field and crash the system because the database only has room for a 32 character string).

You should keep your test cases short, to the point, and self contained (i.e. they generally donât link to other test cases). If you have a test case that goes over a page, consider breaking it into smaller units. The document itself should be self contained as well, that is; it shouldnât require the QA tester to get up and ask programmers questions like âwhatâs the login password?â. Instruct your QA tester to log any bugs they find in your bug tracking system and also to write a proper description rather then just saying âTest Case 16 failed.â You may want to read my article on Logging Bugs Like a Pro for some suggestions on good bug logging practices.
Article reviewed by Alex Barclay.
"Extraordinary quality doesn't make good short-term economic sense."
- Peopleware, Tom Demarco
- Peopleware, Tom Demarco
Imagine for a moment youâve just finished a web application for a client. Swimming around within that application is 100 bugs. What proportion of those bugs would you say is acceptable for the client to find (e.g. 50, 30, 10)? The point is, those bugs are going to be found by someone, and its either going to be you or the client. You can think of it as a sliding scale, the more bugs the client finds, the more your creditability suffers and the more damage you do to the business relationship.
In the martial arts thereâs a saying; âexpect the best, but prepare for the worstâ. The US Navy Seals have a slightly more gun-ho version which goes; âThe more you sweat in training, the less you bleed in battle.â Notice how it says the âlessâ you bleed in battle, implying that if you enter into combat, you are going to get bloody. Software development is like this too, if youâre going to create software, you are going to get bugs.
As a rough guide, you want to try catch at least 80% of all bugs. Ideally, you would go for 100%, a worthwhile but lofty goal. Your best bet for catching as many bugs as possible is to create a system test plan. Creating a decent system test plan is easier said then done. A good place to start is your functional specification (assuming you have one). In effect, your specification gets converted into the system test plan. What you are doing is checking to see if the things you said you were going to do have actually been done.
A test plan is nothing new, in fact, the structure I use was developed by Microsoft years ago. Itâs a simple format, a test case has a title, some steps, and an expected result.

I write my test plans with the intent of having an independent QA tester run through it, so no prior knowledge of the system should be assumed. You want someone who has never used the system before because they will take a fresh approach. Youâre counting on them to use it in a manner which was never intended (e.g. on the âMy Profileâ page, they type in a really long name for the âCompanyâ field and crash the system because the database only has room for a 32 character string).

You should keep your test cases short, to the point, and self contained (i.e. they generally donât link to other test cases). If you have a test case that goes over a page, consider breaking it into smaller units. The document itself should be self contained as well, that is; it shouldnât require the QA tester to get up and ask programmers questions like âwhatâs the login password?â. Instruct your QA tester to log any bugs they find in your bug tracking system and also to write a proper description rather then just saying âTest Case 16 failed.â You may want to read my article on Logging Bugs Like a Pro for some suggestions on good bug logging practices.
Article reviewed by Alex Barclay.
How the Web Was Won
Perspectives on how business has shaped the Internet.
Before you stands a frontier of possibilities, a land which at first seems desolate. Predictably, a tumble-weed rolls by, but in the distance you spy something looming on the horizon. Upon closer inspection it dawns upon you that what youâre gazing at is in fact âBig Businessâ. What had appeared to be âvirgin soilâ at first glance, is in fact a well established arena â" is it too late? Is there no room on the web for new comers?

There was a time when the web was a novelty, but these days, no oneâs impressed if you say âI got the Internet at homeâ. As many people know, the Internet and World Wide Web were originally conceptualised and developed for military and educational applications. The war-mongers thought to themselves âgreat guns! A communication system that wont go down when the nukes hit!â whilst the university boffins exclaimed âneat, now I can share my research paper on the mating habits of cockroaches with professor Irvine at Oxford!â.
If information sharing spawned the web, how is it that business is now such a dominant aspect of cyberspace? Obviously, at some point, an entrepreneurial-type thought to themselves âhang-on, what if we used this âInternetâ thing to sell stuff?â Now, this may have seemed like a fantastic idea on paper, but at the time this idea was conceived, the web was hardly in state to support such rich functionality (not easily at least).
So why is it that online shopping has become so pervasive? If you take a look at juggernauts like Amazon.com and eBay, it would seem like their triumph was almost pre-destined. But lets not forget follies such as Egghead.com and GovWorks (of âStartup.comâ movie fame). And you wouldnât know it by looking, but there was a time when Yahoo.com was in serious trouble too. For every success, countless others must have fallen by the wayside.
The dot.com bust will certainly go down in web annals as a dark time. If youâre not familiar with why it happened, this is an example of the sort of thing which went on; web company A would buy $10m of advertising from web company B, web company B in return would purchase $10m worth of advertising from web company A. This would make it look as though each of the companies was massively profitable â" but like all shoddily constructed pyramids, it all came crushing down in the end.
If the road was fraught with so much peril, then what made companies invest so much capital in ecommerce? There are a number of factors which make the web such a pliable tool for selling goods and services online. For one, an online shop is always open, a world of people can buy from you (literally), it doesnât have rude staff, itâs cheaper then an actual shop-front (and the ârentâ is next to nothing), it can potentially deal with thousands of customers at once, and the list goes on.
So how has business shaped the web? Would it be too extreme to say that business is the web - perhaps, but it sounds deep upon first reading. It could be argued that commercial use of the Internet has brought it to where it is today because it facilitated advances in technological infrastructure (eg. up-take of broadband, establishment of high-speed international fibre-optic backbones, etc), but itâs not really necessary to get quite so âfancyâ. At the end of the day, people noticed that there was a need that had to be filled, they also noticed a tool that could help satisfy that need. At this very moment, chances are you have a need which is being fulfilled by the Web.
Before you stands a frontier of possibilities, a land which at first seems desolate. Predictably, a tumble-weed rolls by, but in the distance you spy something looming on the horizon. Upon closer inspection it dawns upon you that what youâre gazing at is in fact âBig Businessâ. What had appeared to be âvirgin soilâ at first glance, is in fact a well established arena â" is it too late? Is there no room on the web for new comers?

There was a time when the web was a novelty, but these days, no oneâs impressed if you say âI got the Internet at homeâ. As many people know, the Internet and World Wide Web were originally conceptualised and developed for military and educational applications. The war-mongers thought to themselves âgreat guns! A communication system that wont go down when the nukes hit!â whilst the university boffins exclaimed âneat, now I can share my research paper on the mating habits of cockroaches with professor Irvine at Oxford!â.
If information sharing spawned the web, how is it that business is now such a dominant aspect of cyberspace? Obviously, at some point, an entrepreneurial-type thought to themselves âhang-on, what if we used this âInternetâ thing to sell stuff?â Now, this may have seemed like a fantastic idea on paper, but at the time this idea was conceived, the web was hardly in state to support such rich functionality (not easily at least).
So why is it that online shopping has become so pervasive? If you take a look at juggernauts like Amazon.com and eBay, it would seem like their triumph was almost pre-destined. But lets not forget follies such as Egghead.com and GovWorks (of âStartup.comâ movie fame). And you wouldnât know it by looking, but there was a time when Yahoo.com was in serious trouble too. For every success, countless others must have fallen by the wayside.
The dot.com bust will certainly go down in web annals as a dark time. If youâre not familiar with why it happened, this is an example of the sort of thing which went on; web company A would buy $10m of advertising from web company B, web company B in return would purchase $10m worth of advertising from web company A. This would make it look as though each of the companies was massively profitable â" but like all shoddily constructed pyramids, it all came crushing down in the end.
If the road was fraught with so much peril, then what made companies invest so much capital in ecommerce? There are a number of factors which make the web such a pliable tool for selling goods and services online. For one, an online shop is always open, a world of people can buy from you (literally), it doesnât have rude staff, itâs cheaper then an actual shop-front (and the ârentâ is next to nothing), it can potentially deal with thousands of customers at once, and the list goes on.
So how has business shaped the web? Would it be too extreme to say that business is the web - perhaps, but it sounds deep upon first reading. It could be argued that commercial use of the Internet has brought it to where it is today because it facilitated advances in technological infrastructure (eg. up-take of broadband, establishment of high-speed international fibre-optic backbones, etc), but itâs not really necessary to get quite so âfancyâ. At the end of the day, people noticed that there was a need that had to be filled, they also noticed a tool that could help satisfy that need. At this very moment, chances are you have a need which is being fulfilled by the Web.
User Acceptance Testing
A formal process for demonstrating project completeness
Ever had a project where you thought you were done, but the client had other ideas? The project schedule may say all tasks are done, the QA tester may have successfully run through the System Test Plan, and the programmers may have cleared all known bugs. So why wont the client settle their account and let you get on with your next project? Easy, they don't know the project's finished, and why should they unless you can demonstrate without a doubt that you have delivered on everything you promised.
This is where User Acceptance Testing, or UAT comes to the rescue (also known as System Acceptance). It's not quite the finale of a project, but its getting close. You could say the Sign-off Agreement or Project Post-mortem is the real project end point. In essence, System Acceptance helps give closure to a project, without it, you may have a tough time convincing a client to sign the Sign-off Agreement (where the client formally indicates they are happy with the work you have done).
The actual structure of the document I use for System Acceptance is quite simple, filling it in is the tricky part.

The idea behind the System Acceptance process is to first make a list of every screen contained in the system, then you arrange a time to go sit with the client and systematically go through all the screens with them. For each screen, you ask the client two questions; 1) does the page appear error free?, and 2) does it perform all functions according to the spec? If the screen passes these criteria, its initialled by both you and the client. If you're thinking "oh god, doesn't that get really tedious after about twenty screens?", you are absolutely right. But as painful as it is, it will produce the desired effect; a tangible sense of closure within the client's mind. I recommend you forewarn the client of the less joyful aspects of the process, explaining that there will likely be multiple sessions lasting a few hours each, and that the process may seem inane at times, but you ask that they bare with you.
Now for some inconvenient truths. Will you complete the acceptance process in the first session you book with your client? probably not. As a rough guide, allow ten minutes per screen, a twenty page web application could take over three and a half hours. However, what tends to happen is the client really starts thinking about their software once they realize its almost over, its their last chance to make changes before they become indisputable feature additions. The result is that you may get side-tracked. The other issue is that a UAT session isn't meant to be a critique of interface cosmetics or functionality, but it can easily turn into such a discussion.

If the time consuming and tedious nature of UAT weren't daunting enough, there is another looming danger; bugs. Chances are good the client will discover bugs during the acceptance session. If you've been wondering what the 'Comments/Notes' column was for, now you know; to write down bug details. What will probably happen is a good portion of the screens will pass, and some wont. You will have to make arrangements for another session with the client after you've had time to get the bugs fixed. Eventually you'll have all screens signed off, then you are ready to present the client with the Sign-off Agreement.
Ever had a project where you thought you were done, but the client had other ideas? The project schedule may say all tasks are done, the QA tester may have successfully run through the System Test Plan, and the programmers may have cleared all known bugs. So why wont the client settle their account and let you get on with your next project? Easy, they don't know the project's finished, and why should they unless you can demonstrate without a doubt that you have delivered on everything you promised.
This is where User Acceptance Testing, or UAT comes to the rescue (also known as System Acceptance). It's not quite the finale of a project, but its getting close. You could say the Sign-off Agreement or Project Post-mortem is the real project end point. In essence, System Acceptance helps give closure to a project, without it, you may have a tough time convincing a client to sign the Sign-off Agreement (where the client formally indicates they are happy with the work you have done).
The actual structure of the document I use for System Acceptance is quite simple, filling it in is the tricky part.

The idea behind the System Acceptance process is to first make a list of every screen contained in the system, then you arrange a time to go sit with the client and systematically go through all the screens with them. For each screen, you ask the client two questions; 1) does the page appear error free?, and 2) does it perform all functions according to the spec? If the screen passes these criteria, its initialled by both you and the client. If you're thinking "oh god, doesn't that get really tedious after about twenty screens?", you are absolutely right. But as painful as it is, it will produce the desired effect; a tangible sense of closure within the client's mind. I recommend you forewarn the client of the less joyful aspects of the process, explaining that there will likely be multiple sessions lasting a few hours each, and that the process may seem inane at times, but you ask that they bare with you.
Now for some inconvenient truths. Will you complete the acceptance process in the first session you book with your client? probably not. As a rough guide, allow ten minutes per screen, a twenty page web application could take over three and a half hours. However, what tends to happen is the client really starts thinking about their software once they realize its almost over, its their last chance to make changes before they become indisputable feature additions. The result is that you may get side-tracked. The other issue is that a UAT session isn't meant to be a critique of interface cosmetics or functionality, but it can easily turn into such a discussion.

If the time consuming and tedious nature of UAT weren't daunting enough, there is another looming danger; bugs. Chances are good the client will discover bugs during the acceptance session. If you've been wondering what the 'Comments/Notes' column was for, now you know; to write down bug details. What will probably happen is a good portion of the screens will pass, and some wont. You will have to make arrangements for another session with the client after you've had time to get the bugs fixed. Eventually you'll have all screens signed off, then you are ready to present the client with the Sign-off Agreement.
Logging Bugs Like a Pro
Tips and hints for reporting bugs more effectively.
This article serves as a brief guide on best practices when it comes to reporting bugs. Encouraging QA testers, clients, and other project stake-holders to follow these habits makes life easier for the development team when it comes to tracking down and fixing a bug. The end result is less time wasted in going back-and-forth finding out the details of a bug. The act of submitting a bug in a formalised way is very important â" having a record of the bug means it wont get lost or go away. The other benefit is someone has clearly taken responsibility for dealing with the problem (i.e. a bug should be assigned to a person).

When submitting a bug, itâs a good idea to give it a short, descriptive title. It may seem like a chore, but it assists developers to quickly identify what a bug is when looking at a list of bug titles. It also helps in future when trying to recall what an old bug was about.
To create a good title, all you need to do is think to yourself âwhat exactly is the problem?â The first thing that pops into your mind is usually a good title. Examples of good bug titles would be: âmy login details arenât being savedâ, âthe photo gallery page crashes in IEâ, or âtax totals on invoice report are not accurateâ. Some examples of unhelpful titles would be: âerror on pageâ, âthe system is busted', or âthe system doesnât work when I use itâ. A good bug title may also include what screen the error occurs on and describe only one problem at a time (e.g. âsign-up page crashes when I enter a long usernameâ).
Probably the most important aspect of a helpful bug report is to give the steps required to reproduce the problem. All you need to do is give a step-by-step account of what you were doing when the bug appeared.
For example;
* Login as a standard user
* Go to âMy Profileâ
* In the âSurnameâ field, enter OâBrien
* Click the âSaveâ button.
Youâll see the page has a script error and doesnât save the surname.
Example of an unhelpful bug report;
Thereâs something wrong with the profile page. It crashes, my computer reboots, and the cat goes and scratches the couch.
A few simple habits can enhance a bug submission significantly. For instance; using asterisks as bullets, giving just enough detail to be able to recreate the bug (one line is unlikely to help, a novella adds little benefit), and, at the end of the steps, say what went wrong (e.g. âthe page has an errorâ, âdata goes missingâ).
When logging a bug, a priority rating is often assigned to it. Most bug tracking systems have choices like low, normal, or high. A low priority bug would be something which just looks bad (e.g. a spelling mistake, misaligned controls, etc). A high priority bug would be a page crash, data corruption, or vanishing data. All other bugs would fall into the category of normal. An accurate priority rating is worthwhile since it allows more pressing bugs to be fielded first (e.g. it would be more important to fix a broken login page before a UI issue).

Occasionally, a situation may occur where itâs hard to tell if something really is a bug, it may instead best be categorised as a âfeature additionâ. As a general rule of thumb, its a bug if; a script error occurs, data goes missing or is corrupted, the system behaves in a manner in which it was not intended too (i.e. not to spec).
This article serves as a brief guide on best practices when it comes to reporting bugs. Encouraging QA testers, clients, and other project stake-holders to follow these habits makes life easier for the development team when it comes to tracking down and fixing a bug. The end result is less time wasted in going back-and-forth finding out the details of a bug. The act of submitting a bug in a formalised way is very important â" having a record of the bug means it wont get lost or go away. The other benefit is someone has clearly taken responsibility for dealing with the problem (i.e. a bug should be assigned to a person).

When submitting a bug, itâs a good idea to give it a short, descriptive title. It may seem like a chore, but it assists developers to quickly identify what a bug is when looking at a list of bug titles. It also helps in future when trying to recall what an old bug was about.
To create a good title, all you need to do is think to yourself âwhat exactly is the problem?â The first thing that pops into your mind is usually a good title. Examples of good bug titles would be: âmy login details arenât being savedâ, âthe photo gallery page crashes in IEâ, or âtax totals on invoice report are not accurateâ. Some examples of unhelpful titles would be: âerror on pageâ, âthe system is busted', or âthe system doesnât work when I use itâ. A good bug title may also include what screen the error occurs on and describe only one problem at a time (e.g. âsign-up page crashes when I enter a long usernameâ).
Probably the most important aspect of a helpful bug report is to give the steps required to reproduce the problem. All you need to do is give a step-by-step account of what you were doing when the bug appeared.
For example;
* Login as a standard user
* Go to âMy Profileâ
* In the âSurnameâ field, enter OâBrien
* Click the âSaveâ button.
Youâll see the page has a script error and doesnât save the surname.
Example of an unhelpful bug report;
Thereâs something wrong with the profile page. It crashes, my computer reboots, and the cat goes and scratches the couch.
A few simple habits can enhance a bug submission significantly. For instance; using asterisks as bullets, giving just enough detail to be able to recreate the bug (one line is unlikely to help, a novella adds little benefit), and, at the end of the steps, say what went wrong (e.g. âthe page has an errorâ, âdata goes missingâ).
When logging a bug, a priority rating is often assigned to it. Most bug tracking systems have choices like low, normal, or high. A low priority bug would be something which just looks bad (e.g. a spelling mistake, misaligned controls, etc). A high priority bug would be a page crash, data corruption, or vanishing data. All other bugs would fall into the category of normal. An accurate priority rating is worthwhile since it allows more pressing bugs to be fielded first (e.g. it would be more important to fix a broken login page before a UI issue).

Occasionally, a situation may occur where itâs hard to tell if something really is a bug, it may instead best be categorised as a âfeature additionâ. As a general rule of thumb, its a bug if; a script error occurs, data goes missing or is corrupted, the system behaves in a manner in which it was not intended too (i.e. not to spec).
Tuesday, November 4, 2008
'Maintenance Blocks' - Managing Change Requests
An equitable system for maintaining and upgrading client work after launch.
What Are âMaintenance Blocksâ? Itâs an idea I developed which is meant to provide a fair system for undertaking bug fixes or upgrades on client work. In simple terms; they are pre-paid units of maintenance.
It never felt quite right to round-up 15 minutes of work to one hour (for the purpose of creating an invoice). However, I wasnât happy about doing work for free for a client just because it was a small task (e.g. creating a new email account, adding Google Analytics to a website, etc).
One of the major advantages of maintenance blocks for clients is that a lower rate is locked-in for future work. There is also a degree of convenience since invoices arenât being sent out for small pieces of work. In addition, maintenance blocks are very flexible since they can be used for either bug fixes or upgrades to a clientâs existing project.
Maintenance blocks are also about mutual obligation. Having a client pre-pay for maintenance work ahead of time is a sign of good faith. In return, I give a guarantee on turn-around time (generally 48 hours from the time the request is acknowledged). If I donât respond within the agreed amount of time, the client gets their work done for free.
I designed maintenance blocks to be purchased in âpacksâ, generally eight or sixteen blocks, with each block being equivalent to 15 minutes of work. Depending on the complexity of the task (be it an upgrade or bug fix), varying amounts of blocks are consumed. Generally speaking, a minor change would use 1 block, an intermediate change would consume 2-3 blocks, and a major change will use 4 or more blocks (nb. minor or intermediate changes are most common).

I generally have it so blocks do expire, but the amount of time they stay valid is quite long (e.g. 6 months for eight blocks).
The way a client uses maintenance blocks is quite simple. They would email a request for change via email, I then let the client know how many blocks need to be used for the change and how many maintenance blocks they will have left after the change (e.g. âyou have 3 maintenance blocks remaining, the change you are requesting will use 2 of those blocks - leaving you with 1 blockâ). The client then confirms their agreement or raises any questions they may have.
The system is squarely aimed at small bug fixes or changes. For example; âthe positioning of the logo on my website looks funny in Googleâs new browser, can you fix it?â or âplease add a new menu item and page to my website called 'Customer Feedback'.â The system is not meant to cover major changes (e.g. adding online shopping facilities, re-vamping the layout of a website, etc). Generally, if a change is more then 16 blocks in size (i.e. more then 4 hours), I consider it to be beyond the scope of the maintenance blocks system, and therefore would require a separate contract to be negotiated.

Why do maintenance blocks get used for bug fixes you may ask? When a project is still under âsoftware warrantyâ (typically, for a period of 6 months after completion), blocks donât get consumed for bug fixes. But after the warranty period has expired, I do charge clients for fixes on their projects even if they are my fault. With the work I do, most bugs are found during the QA cycle, with few emerging past the 6 month point (but it still can happen).
Lastly, I donât âforceâ clients to use the maintenance block system if they donât want to. The alternative is to negotiate a charge-out-rate and turn-around time whenever work needs to be done. At itâs core, the system was created to make everyones' life easier. Costs are settled before-hand, thus allowing us to get on with whatâs important; the work.
What Are âMaintenance Blocksâ? Itâs an idea I developed which is meant to provide a fair system for undertaking bug fixes or upgrades on client work. In simple terms; they are pre-paid units of maintenance.
It never felt quite right to round-up 15 minutes of work to one hour (for the purpose of creating an invoice). However, I wasnât happy about doing work for free for a client just because it was a small task (e.g. creating a new email account, adding Google Analytics to a website, etc).
One of the major advantages of maintenance blocks for clients is that a lower rate is locked-in for future work. There is also a degree of convenience since invoices arenât being sent out for small pieces of work. In addition, maintenance blocks are very flexible since they can be used for either bug fixes or upgrades to a clientâs existing project.
Maintenance blocks are also about mutual obligation. Having a client pre-pay for maintenance work ahead of time is a sign of good faith. In return, I give a guarantee on turn-around time (generally 48 hours from the time the request is acknowledged). If I donât respond within the agreed amount of time, the client gets their work done for free.
I designed maintenance blocks to be purchased in âpacksâ, generally eight or sixteen blocks, with each block being equivalent to 15 minutes of work. Depending on the complexity of the task (be it an upgrade or bug fix), varying amounts of blocks are consumed. Generally speaking, a minor change would use 1 block, an intermediate change would consume 2-3 blocks, and a major change will use 4 or more blocks (nb. minor or intermediate changes are most common).

I generally have it so blocks do expire, but the amount of time they stay valid is quite long (e.g. 6 months for eight blocks).
The way a client uses maintenance blocks is quite simple. They would email a request for change via email, I then let the client know how many blocks need to be used for the change and how many maintenance blocks they will have left after the change (e.g. âyou have 3 maintenance blocks remaining, the change you are requesting will use 2 of those blocks - leaving you with 1 blockâ). The client then confirms their agreement or raises any questions they may have.
The system is squarely aimed at small bug fixes or changes. For example; âthe positioning of the logo on my website looks funny in Googleâs new browser, can you fix it?â or âplease add a new menu item and page to my website called 'Customer Feedback'.â The system is not meant to cover major changes (e.g. adding online shopping facilities, re-vamping the layout of a website, etc). Generally, if a change is more then 16 blocks in size (i.e. more then 4 hours), I consider it to be beyond the scope of the maintenance blocks system, and therefore would require a separate contract to be negotiated.

Why do maintenance blocks get used for bug fixes you may ask? When a project is still under âsoftware warrantyâ (typically, for a period of 6 months after completion), blocks donât get consumed for bug fixes. But after the warranty period has expired, I do charge clients for fixes on their projects even if they are my fault. With the work I do, most bugs are found during the QA cycle, with few emerging past the 6 month point (but it still can happen).
Lastly, I donât âforceâ clients to use the maintenance block system if they donât want to. The alternative is to negotiate a charge-out-rate and turn-around time whenever work needs to be done. At itâs core, the system was created to make everyones' life easier. Costs are settled before-hand, thus allowing us to get on with whatâs important; the work.
A Basic Document Storage Structure
A simple folder structure for storing project documents and support files
Last time I proposed this directory structure I was tortured, put onto a rocket and launched into the Sun (I survived, a little crispy, but alive).
Why is the folder structure I use so radical? Probably because it looks too simplistic to work. But I assure you, I have been using this structure for years now with great success (even on large projects).
Now, without further ado, here is the folder structure:

Hard to believe, but thatâs all thatâs really needed. The simplicity is driven by two factors; one, you canât find anything anyway when you use a convoluted/deep directory structure, and secondly, its habits which make this approach work.
I can see some of you gesturing to the head-torturer, indicating your desire to use the iron maiden, but bare with me whilst I explain.
One question which may come to mind is do you name the top level folder after the client or do you name it after the project? The temptation, and I have seen this done, is to create a structure like this: Client Name->Project Name. For example; you would have the folder Acme, and under that you would have Blue Widgets and Hyper Widgets (nb. these would be two different projects belonging to the client called Acme).

A consistent hierarchical structure like this makes sense doesnât it? Well, it does if you want to place the information you constantly need to access an extra click away. So which is it? Most of the time I use the clientâs name. The reality is most clients will only have one project done with you, perhaps with maintenance being carried out on it in future. Flat structure is what itâs all about.
(Archive) - I have a ânever deleteâ policy. To a certain extent, itâs more about me not wanting to waste time trying to figure out if something should or should not be deleted. Back in 1993 when I had a 106 megabyte hard drive, storage capacity was an issue, it isnât any more. The (Archive) folder is the key to making the folder structure work. Old versions of documents and support files get dumped here, this prevents the Documents and Media Dev folders from getting cluttered. As a general rule; if in doubt, back it up.
Documents - funnily enough, this is where your Word documents go. You put any kind of support documentation in here, be it PDFs, an Excel spreadsheet, or a Visio wireframe. I generally set the folder to show the most recently modified files first. You tend to work with the most recently created files the majority of the time. Itâs important to move super-seeded documents into the (Archive) directory, otherwise the Documents folder can become unwieldy, especially on big projects.
Media Dev - this contains any imagery or multimedia content related to the project (e.g. logos, Photoshop files, Flash animations, videos, etc).
âYeah, but the project has millions of documentsâ I hear you say. True, it does happen. But thatâs what F3/Search was designed for. You are going to need to find older documents by keyword anyway. Plus thereâs nothing wrong with having sub-folders if you really feel the need (e.g. AcmeDocumentsUser Manual).

At the end of the day, its pretty easy to decide which folder things go into, your files are either going to be a document of some sort, or a image/video. A quick note on file naming. Your company probably already has a system of some form, the only thing which I have to offer is recommending that you append a revision number on the end of documents. For example, spec_acme_rev_02.doc as opposed to just plain old spec_acme.doc. You may already have the revision number contained inside the document, but a person would have to open up the file in order to see it.
Last time I proposed this directory structure I was tortured, put onto a rocket and launched into the Sun (I survived, a little crispy, but alive).
Why is the folder structure I use so radical? Probably because it looks too simplistic to work. But I assure you, I have been using this structure for years now with great success (even on large projects).
Now, without further ado, here is the folder structure:

Hard to believe, but thatâs all thatâs really needed. The simplicity is driven by two factors; one, you canât find anything anyway when you use a convoluted/deep directory structure, and secondly, its habits which make this approach work.
I can see some of you gesturing to the head-torturer, indicating your desire to use the iron maiden, but bare with me whilst I explain.
One question which may come to mind is do you name the top level folder after the client or do you name it after the project? The temptation, and I have seen this done, is to create a structure like this: Client Name->Project Name. For example; you would have the folder Acme, and under that you would have Blue Widgets and Hyper Widgets (nb. these would be two different projects belonging to the client called Acme).

A consistent hierarchical structure like this makes sense doesnât it? Well, it does if you want to place the information you constantly need to access an extra click away. So which is it? Most of the time I use the clientâs name. The reality is most clients will only have one project done with you, perhaps with maintenance being carried out on it in future. Flat structure is what itâs all about.
(Archive) - I have a ânever deleteâ policy. To a certain extent, itâs more about me not wanting to waste time trying to figure out if something should or should not be deleted. Back in 1993 when I had a 106 megabyte hard drive, storage capacity was an issue, it isnât any more. The (Archive) folder is the key to making the folder structure work. Old versions of documents and support files get dumped here, this prevents the Documents and Media Dev folders from getting cluttered. As a general rule; if in doubt, back it up.
Documents - funnily enough, this is where your Word documents go. You put any kind of support documentation in here, be it PDFs, an Excel spreadsheet, or a Visio wireframe. I generally set the folder to show the most recently modified files first. You tend to work with the most recently created files the majority of the time. Itâs important to move super-seeded documents into the (Archive) directory, otherwise the Documents folder can become unwieldy, especially on big projects.
Media Dev - this contains any imagery or multimedia content related to the project (e.g. logos, Photoshop files, Flash animations, videos, etc).
âYeah, but the project has millions of documentsâ I hear you say. True, it does happen. But thatâs what F3/Search was designed for. You are going to need to find older documents by keyword anyway. Plus thereâs nothing wrong with having sub-folders if you really feel the need (e.g. AcmeDocumentsUser Manual).

At the end of the day, its pretty easy to decide which folder things go into, your files are either going to be a document of some sort, or a image/video. A quick note on file naming. Your company probably already has a system of some form, the only thing which I have to offer is recommending that you append a revision number on the end of documents. For example, spec_acme_rev_02.doc as opposed to just plain old spec_acme.doc. You may already have the revision number contained inside the document, but a person would have to open up the file in order to see it.
Creating an e-Strategy
How a website can boost traditional marketing techniques
What is an e-strategy? Good question, I have to admit it is a rather vague notion. One way to describe it is to say that itâs about mixing technology with traditional marketing strategies. As these approaches interconnect, they compliment or magnify each other, thus producing an affect where the whole is greater than the sum of itâs parts.
In more specific terms, an e-strategy is the business strategy applied to an online presence. It generally does not focus on technology comparisons, but rather is geared towards presenting the best possible approach for achieving an organisationâs goals.
Why would a business want to develop an e-strategy? The main reason is because itâs a game plan for how to get the most out of their web presence. The idea is to exploit the Internet and emergent technologies in order to increase revenue or reduce operating costs. A common way of reducing costs would be by automating as many activities as possible. For example; an online book store which does just-in-time printing could send an automatic communiqué directly to the printing company when a book is purchased (the book would then be printed and mailed off to the buyer).
Part of an e-strategy is to make it clear that good technology in itself is not enough, a holistic approach is what is needed. Traditional business techniques also need to be used in order to produce growth and out-do competitors.
As part of this process, a few key questions need to be answered; what role can the Internet play in the business strategy? What is the driving force behind the business? How are customer or target market needs fulfilled? What does the future hold for the business domain and how is change going to be handled?
There are many ways that the Internet can help a business. The examples I have here are by no means an exhaustive list, Iâm sure some lateral (creative) thinking would reveal even more options.
Demand Aggregation â" as the size of a companyâs patronage grows, so to does its ability to secure a good deal for its customers via buying power (e.g. a driving range could buy golf balls in bulk to sell to club members at a better then retail price).
Producer Direct â" a business which sells products online can bypass the cost of having a physical store-front. This allows them to pass on savings or âperceived valueâ to customers (e.g. eBay or Amazon).
Product Re-bundling â" having a multitude of customers that grow in an organic manner opens up the potential for related but separate products or services to be offered in combination. This would not normally be possible on a stand-alone basis (e.g. a gym could approach a sports store and strike-up a synergy where-by gym members received discounts on sporting goods).
Customer Self-service â" technology can be used to reduce the amount of time staff spend directly interacting with customers for simple tasks or enquiries. A classic example of this is a customer researching a product online rather then phoning a store to ask a shop assistant about the item.
One-to-one Marketing â" this strategy emphasises personalising interactions with customers. Having a customerâs full name at the top of an email is a simple implementation of this approach. This increases the likelihood of them actually looking at the email rather then discarding it as junk mail. A more effective usage would be a website where customer demographic information such as age is tracked. This could then be used to target promotional advertising more effectively (e.g. thereâs no point showing home loan packages to teenagers).
Channel Integration - this is about having a number of different ways to communicate with your customer or fulfil their needs (e.g. phone, product brochures, direct mail, physical store-fronts, etc). A popular implementation of this approach on websites is to ask a person if they want to receive promotional material via email during a sign-up process.
An e-strategy needs to explain how technology can serve a businessâ goals (e.g. to have products on supermarket shelves by the end of the year, to raise skin cancer awareness, etc). This is done by determining how business objectives can be linked to an Internet-based solution such as a website.
Without an e-strategy, technology-based solutions developed reactively may produce short-term benefits, but turn-out to be ineffective and expensive in the long run. For example; if you wanted to develop a mobile-device interface for a social networking website, you could produce BlackBerry and MS Windows Mobile applications, or you could try and capture a far greater audience by targeting just the Symbian OS considering itâs installed on 72% of all smart-phones (Source: www.itwire.com/content/view/14348/127/).
What is an e-strategy? Good question, I have to admit it is a rather vague notion. One way to describe it is to say that itâs about mixing technology with traditional marketing strategies. As these approaches interconnect, they compliment or magnify each other, thus producing an affect where the whole is greater than the sum of itâs parts.
In more specific terms, an e-strategy is the business strategy applied to an online presence. It generally does not focus on technology comparisons, but rather is geared towards presenting the best possible approach for achieving an organisationâs goals.
Why would a business want to develop an e-strategy? The main reason is because itâs a game plan for how to get the most out of their web presence. The idea is to exploit the Internet and emergent technologies in order to increase revenue or reduce operating costs. A common way of reducing costs would be by automating as many activities as possible. For example; an online book store which does just-in-time printing could send an automatic communiqué directly to the printing company when a book is purchased (the book would then be printed and mailed off to the buyer).
Part of an e-strategy is to make it clear that good technology in itself is not enough, a holistic approach is what is needed. Traditional business techniques also need to be used in order to produce growth and out-do competitors.
As part of this process, a few key questions need to be answered; what role can the Internet play in the business strategy? What is the driving force behind the business? How are customer or target market needs fulfilled? What does the future hold for the business domain and how is change going to be handled?
There are many ways that the Internet can help a business. The examples I have here are by no means an exhaustive list, Iâm sure some lateral (creative) thinking would reveal even more options.
Demand Aggregation â" as the size of a companyâs patronage grows, so to does its ability to secure a good deal for its customers via buying power (e.g. a driving range could buy golf balls in bulk to sell to club members at a better then retail price).
Producer Direct â" a business which sells products online can bypass the cost of having a physical store-front. This allows them to pass on savings or âperceived valueâ to customers (e.g. eBay or Amazon).
Product Re-bundling â" having a multitude of customers that grow in an organic manner opens up the potential for related but separate products or services to be offered in combination. This would not normally be possible on a stand-alone basis (e.g. a gym could approach a sports store and strike-up a synergy where-by gym members received discounts on sporting goods).
Customer Self-service â" technology can be used to reduce the amount of time staff spend directly interacting with customers for simple tasks or enquiries. A classic example of this is a customer researching a product online rather then phoning a store to ask a shop assistant about the item.
One-to-one Marketing â" this strategy emphasises personalising interactions with customers. Having a customerâs full name at the top of an email is a simple implementation of this approach. This increases the likelihood of them actually looking at the email rather then discarding it as junk mail. A more effective usage would be a website where customer demographic information such as age is tracked. This could then be used to target promotional advertising more effectively (e.g. thereâs no point showing home loan packages to teenagers).
Channel Integration - this is about having a number of different ways to communicate with your customer or fulfil their needs (e.g. phone, product brochures, direct mail, physical store-fronts, etc). A popular implementation of this approach on websites is to ask a person if they want to receive promotional material via email during a sign-up process.
An e-strategy needs to explain how technology can serve a businessâ goals (e.g. to have products on supermarket shelves by the end of the year, to raise skin cancer awareness, etc). This is done by determining how business objectives can be linked to an Internet-based solution such as a website.
Without an e-strategy, technology-based solutions developed reactively may produce short-term benefits, but turn-out to be ineffective and expensive in the long run. For example; if you wanted to develop a mobile-device interface for a social networking website, you could produce BlackBerry and MS Windows Mobile applications, or you could try and capture a far greater audience by targeting just the Symbian OS considering itâs installed on 72% of all smart-phones (Source: www.itwire.com/content/view/14348/127/).
Management Styles in Web Development
How operations management affects project management in a web development environment
One of the best teachers I know once let a martial arts student punch a wooden board when he knew it wasnât going to break (due to incorrect technique). After the studentâs failed attempt, he said to the group âI could tell it wasnât going to break, but who am I to stand in the way of your dreams and goals?â
Itâs happened a number of times now that I have arrived at a company and heard statements like ârun projects how you think best. After all, we hired you for your expertise and experience.â These bold proclamations inevitably give way to operational managementâs desire to change things for the better good (i.e. over-ride some of my decisions).
Perhaps this happens because project management looks like a logical pre-defined process, much like operational management. However, the whole point of a project is to create something novel and never before seen, thus introducing a large element of the unknown to the undertaking. This is one of the reasons why risk analysis is such a major part of formalized project management methodologies.
Passion or concern can often lead operational management to actions which actually stifle a project. Much like a mother, at some point they have to âcut the apron stringsâ and allow their child to make some mistakes for themselves.
Itâs like watching a child banging their toy against a wall, do you say âthatâs going to break if you keep doing thatâ or do you take the toy and save it from certain annihilation, potentially robbing them of a valuable lesson on taking care of their property? On the other hand, some lessons canât be learnt the hard way, for example; crossing the road without looking both ways.
The question then becomes, do you stand by and watch someone make a mistake? I would hazard that this would often be the motivation of upper management, that to them it looks like you are about to make a mistake which could cost the company money or damage client relations, so isnât it logical to intervene before its too late?
Iâm fairly sure no managing director wakes up in the morning and thinks to themselves âhmm, how can I make my project managerâs life difficult today?â I should say that I donât intend for this article to be a denigration of past employers. Operations managers generally donât acquire their position without being highly intelligent and capable. But I have seen the phenomena Joel Spolsky calls Command and Conquer Management. This is where the person least qualified to make a decision is doing just that.
From the companies I have worked at so far, I have seen three distinct approaches when it comes to operational management dabbling in project management. One type would commonly interject if they felt they had a better way to do things (with changes I could not veto), another would occasionally come to the rescue if things werenât going as planned (again, with me having no veto power), and probably the most interesting one has been a boss who only occasionally intervened, but still allowed me to have final say.

Personally, I wouldnât want to work in an environment where people didnât say something if they felt you were about to make a serious error with your work. But that is obviously part of what team is about. People need to be able to ask questions and give suggestions. But they should also be given the option to reject a suggestion without ego coming into it.
Project management isnât an easy discipline, hence why not everyone does it. As mentioned earlier, the reason for this is because a significant portion of a project is unique. Getting good at tackling the unique aspect of projects only comes with experience, and experience comes in two flavors: success and failure. Unfortunately, itâs hard for some people to accept the unpredictable nature of software development because mistakes can be expensive.
Another interesting ingredient being added to this dynamic is the increasing uptake of industry standard project methodologies such as Britainâs PRINCE2. Although this is definitely a good direction for the software industry, it does pose a potential hurdle.
PRINCE2 is squarely aimed at project managers, thereâs no doubt about it. The problem lies in the fact that non-project managers within the team also need to understand the methodology for it to work well. I believe itâs possible for a project manager to teach the basics of PRINCE2 to subordinates such as team managers, programmers, designers, etc. (just enough for them to get by). But would this work upwards, with corporate management?
âFostering an atmosphere that doesn't allow for error simply makes people defensive. They don't try things that may turn out badly."
- Tom Demarco, Peopleware
- Tom Demarco, Peopleware
One of the best teachers I know once let a martial arts student punch a wooden board when he knew it wasnât going to break (due to incorrect technique). After the studentâs failed attempt, he said to the group âI could tell it wasnât going to break, but who am I to stand in the way of your dreams and goals?â
Itâs happened a number of times now that I have arrived at a company and heard statements like ârun projects how you think best. After all, we hired you for your expertise and experience.â These bold proclamations inevitably give way to operational managementâs desire to change things for the better good (i.e. over-ride some of my decisions).
Perhaps this happens because project management looks like a logical pre-defined process, much like operational management. However, the whole point of a project is to create something novel and never before seen, thus introducing a large element of the unknown to the undertaking. This is one of the reasons why risk analysis is such a major part of formalized project management methodologies.
Passion or concern can often lead operational management to actions which actually stifle a project. Much like a mother, at some point they have to âcut the apron stringsâ and allow their child to make some mistakes for themselves.
Itâs like watching a child banging their toy against a wall, do you say âthatâs going to break if you keep doing thatâ or do you take the toy and save it from certain annihilation, potentially robbing them of a valuable lesson on taking care of their property? On the other hand, some lessons canât be learnt the hard way, for example; crossing the road without looking both ways.
The question then becomes, do you stand by and watch someone make a mistake? I would hazard that this would often be the motivation of upper management, that to them it looks like you are about to make a mistake which could cost the company money or damage client relations, so isnât it logical to intervene before its too late?
Iâm fairly sure no managing director wakes up in the morning and thinks to themselves âhmm, how can I make my project managerâs life difficult today?â I should say that I donât intend for this article to be a denigration of past employers. Operations managers generally donât acquire their position without being highly intelligent and capable. But I have seen the phenomena Joel Spolsky calls Command and Conquer Management. This is where the person least qualified to make a decision is doing just that.
From the companies I have worked at so far, I have seen three distinct approaches when it comes to operational management dabbling in project management. One type would commonly interject if they felt they had a better way to do things (with changes I could not veto), another would occasionally come to the rescue if things werenât going as planned (again, with me having no veto power), and probably the most interesting one has been a boss who only occasionally intervened, but still allowed me to have final say.

Personally, I wouldnât want to work in an environment where people didnât say something if they felt you were about to make a serious error with your work. But that is obviously part of what team is about. People need to be able to ask questions and give suggestions. But they should also be given the option to reject a suggestion without ego coming into it.
Project management isnât an easy discipline, hence why not everyone does it. As mentioned earlier, the reason for this is because a significant portion of a project is unique. Getting good at tackling the unique aspect of projects only comes with experience, and experience comes in two flavors: success and failure. Unfortunately, itâs hard for some people to accept the unpredictable nature of software development because mistakes can be expensive.
Another interesting ingredient being added to this dynamic is the increasing uptake of industry standard project methodologies such as Britainâs PRINCE2. Although this is definitely a good direction for the software industry, it does pose a potential hurdle.
PRINCE2 is squarely aimed at project managers, thereâs no doubt about it. The problem lies in the fact that non-project managers within the team also need to understand the methodology for it to work well. I believe itâs possible for a project manager to teach the basics of PRINCE2 to subordinates such as team managers, programmers, designers, etc. (just enough for them to get by). But would this work upwards, with corporate management?
Monday, November 3, 2008
Sign-off Agreements
Getting closure on a project by using a sign-off document
A Sign-off Agreement is simply a document both client and technology supplier sign at the end of a project. In essence, it signifies that a client is happy with the work they have paid for.
You could say the Sign-off Agreement officially marks the end-point of a project, generally trailing behind UAT (also called System Acceptance). Could you close a project without a Sign-off Agreement? Of course, you may be thinking this process is overly bureaucratic, and that may be true for certain situations.
So, what's the point of the Sign-off Agreement? One reason behind it is to give everyone involved in the project a sense of closure. I would say this idea of closure is a good thing, for one it gives the development team a feeling of achievement. Another important aspect is it sets up a boundary relating to version control (i.e. version 1 is done). The concept of versions for web software is somewhat meaningless because of the ease with which updates can be delivered. However artificial, versions can be good for creating dividing lines between a delivered software package, and its next batch of features.
Probably the best answer on whether you should use a Sign-off Agreement on your project is 'maybe'. It comes down to a few key factors; the type of project you have, the kind of client you are working with, and the situation. For instance, if you are dealing with a government body then a certain degree of governance and process is to be expected. As often as possible, do try and use a Sign-off Agreement, but if you are in a situation where you need to concentrate more pressing tasks, then this process is a good candidate for culling.
An important aspect of the Sign-off Agreement is to make a statement about your Software Warranty. This is where you say how long you will be fixing bugs for free, and also what your definition of a bug is. Another way to think of this is as a rudimentary service level agreement (but without any commitments on turn-around time). Failing to discuss the idea of Software Warranty with your client leaves things open to interpretation and can setup the wrong expectations (e.g. a client may just assume you will be fixing bugs forever). How many months should you offer a warranty for? I don't know, that is really up to you. I have seen 3 months, 6 months, but I also know someone who basically fixes bugs for free no matter how long ago the software was delivered.

I like to keep the Sign-off Agreement to one page since I believe people have better things to do with their time then read long documents. I start with my Document Purpose section so someone picking up the sheet of paper can understand what it is about within a few seconds. The format of Sign-off Agreement I use is not designed to be water-tight from a legal perspective, that is not its purpose.
Towards the start of the document, I have a block called Agreement Parties, this just makes it clear who the client is and who the technology supplier is. The statement about the Software Warranty follows soon after.
The bulk of the document is the Terms section. The main point here is to say that your company has fulfilled all its contractual obligations and that the client is happy with what you have produced for them.
Something you may wish to discuss in the document is a maintenance rate for feature additions post-launch (also putting a time limitation on this quoted rate). I will probably be moving away from this style of agreement in favour of more flexible system involving Maintenance Blocks, but this is a discussion for future, after I have had a chance to road test the concept.

The last part of the document is an area for one of your company representatives to sign and date, and an area for the client to do the same (it is called a sign-off agreement after all).
A good tip for using a Sign-off Agreement is to give your client plenty of notice before presenting them with the document. It looks kind of legal, so it may make a client feel as though they are being backed into a corner and are about to relinquish control over their project. Itâs important to explain what it is early on, for instance, just before or after UAT.
Reviewed by Patras Surna. Rev. 02.
A Sign-off Agreement is simply a document both client and technology supplier sign at the end of a project. In essence, it signifies that a client is happy with the work they have paid for.
You could say the Sign-off Agreement officially marks the end-point of a project, generally trailing behind UAT (also called System Acceptance). Could you close a project without a Sign-off Agreement? Of course, you may be thinking this process is overly bureaucratic, and that may be true for certain situations.
So, what's the point of the Sign-off Agreement? One reason behind it is to give everyone involved in the project a sense of closure. I would say this idea of closure is a good thing, for one it gives the development team a feeling of achievement. Another important aspect is it sets up a boundary relating to version control (i.e. version 1 is done). The concept of versions for web software is somewhat meaningless because of the ease with which updates can be delivered. However artificial, versions can be good for creating dividing lines between a delivered software package, and its next batch of features.
Probably the best answer on whether you should use a Sign-off Agreement on your project is 'maybe'. It comes down to a few key factors; the type of project you have, the kind of client you are working with, and the situation. For instance, if you are dealing with a government body then a certain degree of governance and process is to be expected. As often as possible, do try and use a Sign-off Agreement, but if you are in a situation where you need to concentrate more pressing tasks, then this process is a good candidate for culling.
An important aspect of the Sign-off Agreement is to make a statement about your Software Warranty. This is where you say how long you will be fixing bugs for free, and also what your definition of a bug is. Another way to think of this is as a rudimentary service level agreement (but without any commitments on turn-around time). Failing to discuss the idea of Software Warranty with your client leaves things open to interpretation and can setup the wrong expectations (e.g. a client may just assume you will be fixing bugs forever). How many months should you offer a warranty for? I don't know, that is really up to you. I have seen 3 months, 6 months, but I also know someone who basically fixes bugs for free no matter how long ago the software was delivered.

I like to keep the Sign-off Agreement to one page since I believe people have better things to do with their time then read long documents. I start with my Document Purpose section so someone picking up the sheet of paper can understand what it is about within a few seconds. The format of Sign-off Agreement I use is not designed to be water-tight from a legal perspective, that is not its purpose.
Towards the start of the document, I have a block called Agreement Parties, this just makes it clear who the client is and who the technology supplier is. The statement about the Software Warranty follows soon after.
The bulk of the document is the Terms section. The main point here is to say that your company has fulfilled all its contractual obligations and that the client is happy with what you have produced for them.
Something you may wish to discuss in the document is a maintenance rate for feature additions post-launch (also putting a time limitation on this quoted rate). I will probably be moving away from this style of agreement in favour of more flexible system involving Maintenance Blocks, but this is a discussion for future, after I have had a chance to road test the concept.

The last part of the document is an area for one of your company representatives to sign and date, and an area for the client to do the same (it is called a sign-off agreement after all).
A good tip for using a Sign-off Agreement is to give your client plenty of notice before presenting them with the document. It looks kind of legal, so it may make a client feel as though they are being backed into a corner and are about to relinquish control over their project. Itâs important to explain what it is early on, for instance, just before or after UAT.
Reviewed by Patras Surna. Rev. 02.
Wireframes and Mockups - Part I
Lo-Fi techniques for creating effective UI wireframes.
UI mockups, or wireframes, are a major part of any respectable functional specification. A functional specification is a description of how the software will work from the userâs point of view. This article doesnât cover the reasons why you need a functional specification, for this I would suggest Joel Spolskyâs article Painless Functional Specifications. The focus of this piece is to describe and analyse a few approaches for creating UI mockups.
Iâm sure there are many other approaches for creating wireframes, but I can only describe and comment on the ones I have used, making some general statements on what is good (or bad) about them.
Lo-Fi Prototyping â" this is just the fancy name for the old butcherâs paper approach. Hands down, its the best technique when a new shrink-wrapped software package is being designed. It really lends itself to collaborative effort, it gets the creative juices flowing, and the speed at which you can produce rough screens is unbeatable.

I once spent four days with a group of developers in a small apartment designing a telecommunications application using this technique. The result was just short of astounding, it allowed us to blast out and iterate ideas very quickly. As the UI designer for the team, I went home at the end of the week with a mass of paper which I turned into over 30 HTML mockups.
This approach is unsuitable for designing simple business websites or software which has been done before (e.g. non-novel systems like a shopping cart). Itâs also not so great when a client is directly involved in the project. There are a few reasons for this; it requires a big investment of time on the clientâs behalf (they may have a business to run during the day), and secondly; the client-to-supplier relationship often creates a dynamic where they tell you what they want, and you go off and make it. Normally, the client wont hang around whilst you design their software.
Microsoft Excel â" yes, as strange as it may sound, MS Excel can be quite handy for producing wireframes, especially for software which is expected to have long vertically scrolling screens. I would never have thought to use it myself, but a company I worked for introduced me to it as their preferred specâing tool.

At first I was skeptical, but I quickly warmed to the approach when I saw how fast screens were to make once I got the hang of it. Itâs excellent for inserting instructions to programmers (either in comments or as side-bar text). It does however produce exceedingly ugly wireframes; this is a good thing for application design since it keeps everyoneâs focus on usability and business logic.
The other great thing about Excel is everyone is familiar with it, including clients. The closest thing I could think of as a criticism of Excel as a wireframe tool is that it produces decidedly uninspiring visuals. I currently donât use Excel as a wireframe tool, but I would have no problem picking it up again if I felt it was right for a project.
Microsoft Word - another desktop application you wouldn't normally think of as a wireframe tool, Word can be pretty good in certain situations. Generally, the only time I would use Word to represent UI controls is if I am making a âmini-specâ for a web-based application.

A mini-spec is created in one of two situations; as an adjunct to an already ratified functional specification, or as a mechanism for grouping together a bunch of features for a version upgrade. UI controls are represented in a very rudimentary fashion, for instance; (*) would be a radio button, and [x] would be a checkbox, etc.
This works because the interface for the system has already been established (i.e. the system has been coded or a Photoshop mock-up exists). The advantage of this approach is speed; you describe the underlying functionality of the code and only mock-up the controls relevant to the feature rather then drawing the entire screen.
Continue on to part 2 of this article to find out how Visio and Photoshop can be used to produce highly refined mockups.
Part 1 focuses on lo-fi approaches such as pen and paper-based techniques. Part 2 is concerned with more refined tools for producing polished UI mockups.
UI mockups, or wireframes, are a major part of any respectable functional specification. A functional specification is a description of how the software will work from the userâs point of view. This article doesnât cover the reasons why you need a functional specification, for this I would suggest Joel Spolskyâs article Painless Functional Specifications. The focus of this piece is to describe and analyse a few approaches for creating UI mockups.
Iâm sure there are many other approaches for creating wireframes, but I can only describe and comment on the ones I have used, making some general statements on what is good (or bad) about them.
Lo-Fi Prototyping â" this is just the fancy name for the old butcherâs paper approach. Hands down, its the best technique when a new shrink-wrapped software package is being designed. It really lends itself to collaborative effort, it gets the creative juices flowing, and the speed at which you can produce rough screens is unbeatable.

I once spent four days with a group of developers in a small apartment designing a telecommunications application using this technique. The result was just short of astounding, it allowed us to blast out and iterate ideas very quickly. As the UI designer for the team, I went home at the end of the week with a mass of paper which I turned into over 30 HTML mockups.
This approach is unsuitable for designing simple business websites or software which has been done before (e.g. non-novel systems like a shopping cart). Itâs also not so great when a client is directly involved in the project. There are a few reasons for this; it requires a big investment of time on the clientâs behalf (they may have a business to run during the day), and secondly; the client-to-supplier relationship often creates a dynamic where they tell you what they want, and you go off and make it. Normally, the client wont hang around whilst you design their software.
Microsoft Excel â" yes, as strange as it may sound, MS Excel can be quite handy for producing wireframes, especially for software which is expected to have long vertically scrolling screens. I would never have thought to use it myself, but a company I worked for introduced me to it as their preferred specâing tool.

At first I was skeptical, but I quickly warmed to the approach when I saw how fast screens were to make once I got the hang of it. Itâs excellent for inserting instructions to programmers (either in comments or as side-bar text). It does however produce exceedingly ugly wireframes; this is a good thing for application design since it keeps everyoneâs focus on usability and business logic.
The other great thing about Excel is everyone is familiar with it, including clients. The closest thing I could think of as a criticism of Excel as a wireframe tool is that it produces decidedly uninspiring visuals. I currently donât use Excel as a wireframe tool, but I would have no problem picking it up again if I felt it was right for a project.
Microsoft Word - another desktop application you wouldn't normally think of as a wireframe tool, Word can be pretty good in certain situations. Generally, the only time I would use Word to represent UI controls is if I am making a âmini-specâ for a web-based application.

A mini-spec is created in one of two situations; as an adjunct to an already ratified functional specification, or as a mechanism for grouping together a bunch of features for a version upgrade. UI controls are represented in a very rudimentary fashion, for instance; (*) would be a radio button, and [x] would be a checkbox, etc.
This works because the interface for the system has already been established (i.e. the system has been coded or a Photoshop mock-up exists). The advantage of this approach is speed; you describe the underlying functionality of the code and only mock-up the controls relevant to the feature rather then drawing the entire screen.
Continue on to part 2 of this article to find out how Visio and Photoshop can be used to produce highly refined mockups.
Managers, Programmers, and Designers
How managers interact with technical staff to produce software.
Depending on the structure of your organization, the project manager is most likely the person who interacts with the broadest range of stake-holders. Sure the managing director will intermingle with project managers, business development, maybe even the client at early stages. But a project manager will interact with all these people and more; most notably, technical staff such as programmers and graphic designers. And letâs not forget the client; a project manager will probably spend the largest amount of time with them compared to anyone else.
Every now-and-then someone comes along with a ground breaking theory or universal law thatâs so simple its mind-blowing; Maslowâs Hierarchy of Needs, Covey's 7 Habits of Highly Effective People, and of course the three business personalities described in Michael Gerberâs classic book The E-Myth (i.e. entrepreneur, manager, and technician).
For those not familiar with the book, what follows is a brief summary of the personality types:
The E-Myth is about much more then just these personality types. Itâs about the pitfalls of starting your own business, and how to build a business which allows you to live the kind of lifestyle you want.
We are all combinations of these characters to different degrees. Some of us are half manager half technician, others are very entrepreneurial, and so on. Understanding these archetypes can be very helpful when working in a team environment.
I am about to make some generalizations, and as with most generalizations they should be taken with a grain of salt since there are always exceptions. Programmers and designers commonly fit squarely into the role of technician, perhaps with a splash of manager (nb. by designer, I mean graphic designer).
There are a number of contrasts between programmers and designers, even though both are fundamentally creative disciplines. Perhaps this is because the work of a designer is visual and more apparent to users, whilst a programmerâs output is functional and more âunder the hoodâ.
I interviewed a professional graphic designer to find out her thoughts on the interaction between managers and technical staff, here is what I found:
A pattern I have noticed with graphic designers which does not seem as prevalent in programmers is that it can be quite an upheaval to suggest a change, or even worse, to go ahead and make a change without their prior knowledge (a move rarely conducive to harmony within a team). Perhaps the reason this phenomenon is more prominent in designers is because artistic endeavour is so subjective; what looks good to one person may look uninspiring to another. When a programmer is asked to make a change in functionality, it generally has a tangible and visible affect, something people can agree on.

When working directly with designers, I will often make suggestions based on my strong usability background. Even though I have seen graphic designers violate well established best-practice usability guidelines (e.g. using â|â as a breadcrumb hierarchy separator instead of â->â), I never insist on a change. What I generally say is something along these lines: âhave you thought about changing this to this because...?â If they donât want to change it, I donât push the issue.
To me itâs beside the point whether I think I know better, the designerâs work is their dominion and their responsibility. The only time I would revisit the topic is if the client wasnât happy with it, then I would come back to the designer and say âwell, regardless of whether the change is right or wrong, the client wants it the way they want itâ.
âThose convinced against their will are of the same opinion still."
- Dale Carnegie
- Dale Carnegie
Depending on the structure of your organization, the project manager is most likely the person who interacts with the broadest range of stake-holders. Sure the managing director will intermingle with project managers, business development, maybe even the client at early stages. But a project manager will interact with all these people and more; most notably, technical staff such as programmers and graphic designers. And letâs not forget the client; a project manager will probably spend the largest amount of time with them compared to anyone else.
Every now-and-then someone comes along with a ground breaking theory or universal law thatâs so simple its mind-blowing; Maslowâs Hierarchy of Needs, Covey's 7 Habits of Highly Effective People, and of course the three business personalities described in Michael Gerberâs classic book The E-Myth (i.e. entrepreneur, manager, and technician).
For those not familiar with the book, what follows is a brief summary of the personality types:
The entrepreneur's work is strategic in nature, involves focusing on the future and developing a vision of where they want to take the business.
The manager's work is both strategic and tactical. The manager's focus is on the present and achieving results through others. They are concept to reality facilitators.
The technician follows the guidance of the manager to get the work done. They focus on the present and are hands-on.
The manager's work is both strategic and tactical. The manager's focus is on the present and achieving results through others. They are concept to reality facilitators.
The technician follows the guidance of the manager to get the work done. They focus on the present and are hands-on.
The E-Myth is about much more then just these personality types. Itâs about the pitfalls of starting your own business, and how to build a business which allows you to live the kind of lifestyle you want.
We are all combinations of these characters to different degrees. Some of us are half manager half technician, others are very entrepreneurial, and so on. Understanding these archetypes can be very helpful when working in a team environment.
I am about to make some generalizations, and as with most generalizations they should be taken with a grain of salt since there are always exceptions. Programmers and designers commonly fit squarely into the role of technician, perhaps with a splash of manager (nb. by designer, I mean graphic designer).
There are a number of contrasts between programmers and designers, even though both are fundamentally creative disciplines. Perhaps this is because the work of a designer is visual and more apparent to users, whilst a programmerâs output is functional and more âunder the hoodâ.
I interviewed a professional graphic designer to find out her thoughts on the interaction between managers and technical staff, here is what I found:
Q. âHow do designers differ from programmers?â
A. âProgramming is objective, design is subjective. Designers work with imagination [whilst programmers are more academic].â
Q. âHow should a manager go about asking a designer to make changes to their work?â
A. â[Managers should refrain from] involving themselves in the design process. Changes need to make sense and be based on solid reasoning. [Berating comments should be avoided].â
Q. âHow can a managerâs input be counter-productive to the design process?â
A. âThere is nothing more frustrating then a manager trying to be a designer. [There needs to be] concrete reasoning behind the suggested correction.â
Q. âWhat are the most common issues between designers and managers?â
A. âWhen a manager shuts down creative flow by being too overbearing. [Micro-managing or meddling] is a common problem.â
Q. âShould a managerâs opinion on visual design hold less weight then a designerâs?â
A. âUnless working in a small business, [managers donât] need to involve themselves in design. Opinions and feedback are always welcome, [but emotive recommendations should be kept to a minimum].â
Q. âWould it bother you if someone changed your work without asking you first?â
A. â[I would] not be happy. [Managers wouldnât like their processes being bypassed without being consulted first].â
- Vera Babenko, Lead Web Designer, ANZ Bank.
Note: I have shortened or paraphrased the intervieweeâs answers. The changes have been checked by the interviewee to ensure the original message has not been lost.
A. âProgramming is objective, design is subjective. Designers work with imagination [whilst programmers are more academic].â
Q. âHow should a manager go about asking a designer to make changes to their work?â
A. â[Managers should refrain from] involving themselves in the design process. Changes need to make sense and be based on solid reasoning. [Berating comments should be avoided].â
Q. âHow can a managerâs input be counter-productive to the design process?â
A. âThere is nothing more frustrating then a manager trying to be a designer. [There needs to be] concrete reasoning behind the suggested correction.â
Q. âWhat are the most common issues between designers and managers?â
A. âWhen a manager shuts down creative flow by being too overbearing. [Micro-managing or meddling] is a common problem.â
Q. âShould a managerâs opinion on visual design hold less weight then a designerâs?â
A. âUnless working in a small business, [managers donât] need to involve themselves in design. Opinions and feedback are always welcome, [but emotive recommendations should be kept to a minimum].â
Q. âWould it bother you if someone changed your work without asking you first?â
A. â[I would] not be happy. [Managers wouldnât like their processes being bypassed without being consulted first].â
- Vera Babenko, Lead Web Designer, ANZ Bank.
Note: I have shortened or paraphrased the intervieweeâs answers. The changes have been checked by the interviewee to ensure the original message has not been lost.
A pattern I have noticed with graphic designers which does not seem as prevalent in programmers is that it can be quite an upheaval to suggest a change, or even worse, to go ahead and make a change without their prior knowledge (a move rarely conducive to harmony within a team). Perhaps the reason this phenomenon is more prominent in designers is because artistic endeavour is so subjective; what looks good to one person may look uninspiring to another. When a programmer is asked to make a change in functionality, it generally has a tangible and visible affect, something people can agree on.

When working directly with designers, I will often make suggestions based on my strong usability background. Even though I have seen graphic designers violate well established best-practice usability guidelines (e.g. using â|â as a breadcrumb hierarchy separator instead of â->â), I never insist on a change. What I generally say is something along these lines: âhave you thought about changing this to this because...?â If they donât want to change it, I donât push the issue.
To me itâs beside the point whether I think I know better, the designerâs work is their dominion and their responsibility. The only time I would revisit the topic is if the client wasnât happy with it, then I would come back to the designer and say âwell, regardless of whether the change is right or wrong, the client wants it the way they want itâ.
Project Schedules with Google Spreadsheets
Task tracking, estimation and distribution with Google spreadsheets.
Creating software without a project schedule is like driving a car without a seatbelt; it can be done, but that doesnât mean itâs a good idea. Before we go any further, I should say that this article isnât about why you should have a project schedule. If you need that kind of convincing, may I suggest a great article by Joel Spolsky called Painless Project Schedules. In fact, the style of project schedule I use is derived from his method.
What I would like to talk about is how Google spreadsheets can be a real treasure when it comes to making your project schedules. Like many tales, this one begins with a cause to be championed. Not so long ago, I worked at a company with three programmers. It was my job to make sure projects were delivered on time and to spec. Resources at this company were very tight. This meant that any time savings I could get by streamlining a process, I would go for.
In the past I had used either Microsoft Project or Microsoft Excel for scheduling. Putting my project schedules in Google spreadsheets offered a number of perks. For one, the schedule was accessible from anywhere anytime (home, office, mobile, etc). Another bonus was that multiple programmers could edit their relevant areas without any sharing issues. Also gone were concerns about backups and where on the company server the file should reside.

If you look at the structure of the project schedule I use, you may think to yourself âitâs so simplistic, surely that isnât enough to cover a complex project?â But really, what more do you need? You write down what the task is, an estimate for how long it will take, whoâs meant to be doing it, and how much of it has been done.
OK, you got me â" this style of project schedule does have two major flaws. For starters, itâs hard to figure out delivery dates, another problem is that its tough carving out distinct milestone. But where this style or project schedule shines is in task management, you wonât miss things, and as the saying goes âthe devil is in the detailâ. Itâs an excellent way for distributing tasks to team members. It also provides a very good overview of where you are at any given time within a project.
Personally, I tend to create my project schedules with only five phases (you can have more if you like). Iâve found all tasks will fit into one of these categories: wireframes/mockups, coding, project management, quality assurance, auxiliary tasks. Auxiliary tasks being the âcatch-allâ for tasks which donât neatly fit into any of the other categories.

I also like to create a âsummary and chartsâ page, but this is gilding the lily. I find that it's handy when my boss asks me âhow is the Widgets project going?â I can answer âoverall, its 92% done â" we are on trackâ. Its also helpful knowing how many hours have been allocated to different team members. One reason I do this is because I have a bad habit of taking on too many technical tasks which really should be going to the production team (what can I say, I used to be a programmer).
Having a project schedule is great, but the unfortunate reality is that most people could care less about it. From my experience, upper management generally arenât that interested in the detail of the schedule, but they do appreciate its existence. They will more often be interested in milestones and delivery dates.
The other hurdle is getting programmers to use the schedule. Most of the time Iâve found programmers arenât too keen on directly participating in the maintenance of the schedule, but you must bring them into the fold. Programmers are far more interested in cutting code, which is good â" itâs what they love to do and what they are there for. So how do you get your technical people involved in the project schedule? Basic people management skills really. People will be far more inclined to do something if you ask them to do it rather then order them to do it, and people are more inclined to do something if they are given some choice in the matter. To a lesser extend, that often vague concept of âownershipâ comes into play here.
What I often say to the programmers I am working with is something along these lines; âTony, when you have time, can you please go into the project schedule and update your areas. Also, for the life of this project, I need you to go in at least once a week to update your areasâ.

Over the years, Iâve found this approach works very well for a number of reasons; there is âchoiceâ in there; saying âwhen you have timeâ and âat least once a weekâ leaves some breathing room for people to manage themselves. People are always happier when they have options. The subtle wording; âyour areasâ connects to ownership. It means the project schedule belongs to them as well. Of course, never underestimate the power of manors - âthank youâ and âpleaseâ always go a long way. There is a caveat with this approach however, it requires sincerity. People will spot it if you are saying something you donât believe in.
Before I go, I would like to offer a few tips on how to construct your project schedule. When writing out the name of a task, be distinct, it should be some kind of action (e.g. âre-delegate domain nameâ is good, where as âundertake hosting tasksâ is a little vague). Estimates for tasks should never be more then 16 hours (if they are, break it down into more tasks), but also avoid too many 0.25 hr blocks - thatâs just going overboard. Do your best to fill in the âcurrent estimatesâ column, this can be used in future to highlight tasks youâve underestimated.
Article reviewed by Sarah Hunt.
Creating software without a project schedule is like driving a car without a seatbelt; it can be done, but that doesnât mean itâs a good idea. Before we go any further, I should say that this article isnât about why you should have a project schedule. If you need that kind of convincing, may I suggest a great article by Joel Spolsky called Painless Project Schedules. In fact, the style of project schedule I use is derived from his method.
What I would like to talk about is how Google spreadsheets can be a real treasure when it comes to making your project schedules. Like many tales, this one begins with a cause to be championed. Not so long ago, I worked at a company with three programmers. It was my job to make sure projects were delivered on time and to spec. Resources at this company were very tight. This meant that any time savings I could get by streamlining a process, I would go for.
In the past I had used either Microsoft Project or Microsoft Excel for scheduling. Putting my project schedules in Google spreadsheets offered a number of perks. For one, the schedule was accessible from anywhere anytime (home, office, mobile, etc). Another bonus was that multiple programmers could edit their relevant areas without any sharing issues. Also gone were concerns about backups and where on the company server the file should reside.

If you look at the structure of the project schedule I use, you may think to yourself âitâs so simplistic, surely that isnât enough to cover a complex project?â But really, what more do you need? You write down what the task is, an estimate for how long it will take, whoâs meant to be doing it, and how much of it has been done.
OK, you got me â" this style of project schedule does have two major flaws. For starters, itâs hard to figure out delivery dates, another problem is that its tough carving out distinct milestone. But where this style or project schedule shines is in task management, you wonât miss things, and as the saying goes âthe devil is in the detailâ. Itâs an excellent way for distributing tasks to team members. It also provides a very good overview of where you are at any given time within a project.
Personally, I tend to create my project schedules with only five phases (you can have more if you like). Iâve found all tasks will fit into one of these categories: wireframes/mockups, coding, project management, quality assurance, auxiliary tasks. Auxiliary tasks being the âcatch-allâ for tasks which donât neatly fit into any of the other categories.

I also like to create a âsummary and chartsâ page, but this is gilding the lily. I find that it's handy when my boss asks me âhow is the Widgets project going?â I can answer âoverall, its 92% done â" we are on trackâ. Its also helpful knowing how many hours have been allocated to different team members. One reason I do this is because I have a bad habit of taking on too many technical tasks which really should be going to the production team (what can I say, I used to be a programmer).
Having a project schedule is great, but the unfortunate reality is that most people could care less about it. From my experience, upper management generally arenât that interested in the detail of the schedule, but they do appreciate its existence. They will more often be interested in milestones and delivery dates.
The other hurdle is getting programmers to use the schedule. Most of the time Iâve found programmers arenât too keen on directly participating in the maintenance of the schedule, but you must bring them into the fold. Programmers are far more interested in cutting code, which is good â" itâs what they love to do and what they are there for. So how do you get your technical people involved in the project schedule? Basic people management skills really. People will be far more inclined to do something if you ask them to do it rather then order them to do it, and people are more inclined to do something if they are given some choice in the matter. To a lesser extend, that often vague concept of âownershipâ comes into play here.
What I often say to the programmers I am working with is something along these lines; âTony, when you have time, can you please go into the project schedule and update your areas. Also, for the life of this project, I need you to go in at least once a week to update your areasâ.

Over the years, Iâve found this approach works very well for a number of reasons; there is âchoiceâ in there; saying âwhen you have timeâ and âat least once a weekâ leaves some breathing room for people to manage themselves. People are always happier when they have options. The subtle wording; âyour areasâ connects to ownership. It means the project schedule belongs to them as well. Of course, never underestimate the power of manors - âthank youâ and âpleaseâ always go a long way. There is a caveat with this approach however, it requires sincerity. People will spot it if you are saying something you donât believe in.
Before I go, I would like to offer a few tips on how to construct your project schedule. When writing out the name of a task, be distinct, it should be some kind of action (e.g. âre-delegate domain nameâ is good, where as âundertake hosting tasksâ is a little vague). Estimates for tasks should never be more then 16 hours (if they are, break it down into more tasks), but also avoid too many 0.25 hr blocks - thatâs just going overboard. Do your best to fill in the âcurrent estimatesâ column, this can be used in future to highlight tasks youâve underestimated.
Article reviewed by Sarah Hunt.
Sunday, November 2, 2008
Writing Fee Proposals
How to write a fee proposal and knowing what to put in it.
Over the years I have seen a number of different styles used when it comes to writing fee proposals. Generally, the differences come down to personal taste; how much disclosure on costs do you give the client, how voluminous are your terms and conditions, should you put a portfolio of past work at the end of the document, and so on. My ideas on how to create a fee proposal are no more special then anyone elseâs, but I have found they have worked well for me. I should say that this format of fee proposal is best suited to web development projects in the range of 40-120 hours in duration. So, you probably wont be winning that big government contract with this template.
With most of the documents I create, a big motivation is to go for maximum âbang for buckâ â" no one likes reading long documents, so Iâm not going to write more then I have to.
I like to start with a Document Purpose section, I do this in nearly all documents I create. If you look at it this way; you wrote the document, so you know exactly what it is, but when someone else picks it up, the first thing they will think is âwhat is this?â The Document Purpose section can be something as simple as saying âthe purpose of this document is to describe the tasks involved in creating The Blue Widgets shopping site. These tasks will then be used as the basis for producing a cost for the projectâ.

Next I like to have a section I call Purpose of the Website. This is a brief bullet point list of the business case for the website; what its trying to achieve in fairly concrete terms. For instance; âLet customers buy Widgets onlineâ, âGive customers information about Widgetsâ, etc. These statements are big picture, they also demonstrate to the client what you think is important about their project. If there is misalignment of ideas, the sooner it comes out, the better.
Client Background is another block I like to put in. Nothing too long, just one paragraph to show the client I have been paying attention and have some basic understanding of what they do â" I think this is important (e.g. âBlue Widgets has been manufacturing widgets for over 10 years and sells its products via a number of retail outlets across the country...â).
Another section which some people may or may not like is what I call Technology to be Used. You could say itâs irrelevant, but I like to set-out what programming language the system will be developed in and what database it will use. Probably the most important aspect of this section is technical limitations. And yes, you got it, this is an exercise in âcovering your assâ. For example, you may make a statement here about what browsers you are going to support, or what CMS you are going to provide.
Arguably the strangest section in my fee proposals is the block called Non-requirements; why would you want to tell a client what youâre not going to do for them? It comes down to avoiding potentially costly confusion. You will find that most arguments in life arise as a result of âmisalignment of expectationsâ (e.g. âyou said you were going to do this...â âyou promised this...â âI never promised that!â, etc). This section is about nipping-things in the bud before they become problems. For instance; if you are creating an e-commerce site, you may want to say âthe system will not support American Express credit card transactions.â
Now we come to the real meat of the proposal; the Project Components. If youâve read my article on Project Schedules with Google Spreadsheets, you may be thinking that this section looks suspiciously similar to a project schedule, and you would be right. Once the contract is locked in, the project components segment serves as the basis for the project schedule. You have a task description and an hours estimate. The hour estimate is how you derive the cost of the project, and this is the point where some would disagree with my approach. I have had people say to me âyou shouldnât show a client tasks in such detailâ, my answer is generally âwhy, they are paying for this project, shouldnât I tell them exactly what they are getting for there money?â And yes, I have been questioned by clients on occasion about my hour estimates, but I have never failed to successfully defend my reasoning for an estimate.

There are a few other smaller sections I put into my proposals, but I will cover these quickly since they arenât as important as the previous sections. I have a paragraph called Change of Requirements â" the crux of this is to say âif it's not in the fee proposal, then it's not covered by the project costâ. I have an area called Third Party Costs where I say that hosting is a separate fee. Then I have the obligatory Terms section, which is very short â" I just talk about payment terms and how the project will run. I have a paragraph titled Software Warranty where I say how long I will be fixing bugs for free (e.g. 6 months, 9 months, etc). Lastly, I have a Project Engagement section where the client signs to signify their acceptance of the project.
Note: this layout is what I use for my contracting work, but I have used aspects of it at some of the companies Iâve worked at.
Article reviewed by Nicolas Fontaine.
Over the years I have seen a number of different styles used when it comes to writing fee proposals. Generally, the differences come down to personal taste; how much disclosure on costs do you give the client, how voluminous are your terms and conditions, should you put a portfolio of past work at the end of the document, and so on. My ideas on how to create a fee proposal are no more special then anyone elseâs, but I have found they have worked well for me. I should say that this format of fee proposal is best suited to web development projects in the range of 40-120 hours in duration. So, you probably wont be winning that big government contract with this template.
With most of the documents I create, a big motivation is to go for maximum âbang for buckâ â" no one likes reading long documents, so Iâm not going to write more then I have to.
I like to start with a Document Purpose section, I do this in nearly all documents I create. If you look at it this way; you wrote the document, so you know exactly what it is, but when someone else picks it up, the first thing they will think is âwhat is this?â The Document Purpose section can be something as simple as saying âthe purpose of this document is to describe the tasks involved in creating The Blue Widgets shopping site. These tasks will then be used as the basis for producing a cost for the projectâ.

Next I like to have a section I call Purpose of the Website. This is a brief bullet point list of the business case for the website; what its trying to achieve in fairly concrete terms. For instance; âLet customers buy Widgets onlineâ, âGive customers information about Widgetsâ, etc. These statements are big picture, they also demonstrate to the client what you think is important about their project. If there is misalignment of ideas, the sooner it comes out, the better.
Client Background is another block I like to put in. Nothing too long, just one paragraph to show the client I have been paying attention and have some basic understanding of what they do â" I think this is important (e.g. âBlue Widgets has been manufacturing widgets for over 10 years and sells its products via a number of retail outlets across the country...â).
Another section which some people may or may not like is what I call Technology to be Used. You could say itâs irrelevant, but I like to set-out what programming language the system will be developed in and what database it will use. Probably the most important aspect of this section is technical limitations. And yes, you got it, this is an exercise in âcovering your assâ. For example, you may make a statement here about what browsers you are going to support, or what CMS you are going to provide.
Arguably the strangest section in my fee proposals is the block called Non-requirements; why would you want to tell a client what youâre not going to do for them? It comes down to avoiding potentially costly confusion. You will find that most arguments in life arise as a result of âmisalignment of expectationsâ (e.g. âyou said you were going to do this...â âyou promised this...â âI never promised that!â, etc). This section is about nipping-things in the bud before they become problems. For instance; if you are creating an e-commerce site, you may want to say âthe system will not support American Express credit card transactions.â
Now we come to the real meat of the proposal; the Project Components. If youâve read my article on Project Schedules with Google Spreadsheets, you may be thinking that this section looks suspiciously similar to a project schedule, and you would be right. Once the contract is locked in, the project components segment serves as the basis for the project schedule. You have a task description and an hours estimate. The hour estimate is how you derive the cost of the project, and this is the point where some would disagree with my approach. I have had people say to me âyou shouldnât show a client tasks in such detailâ, my answer is generally âwhy, they are paying for this project, shouldnât I tell them exactly what they are getting for there money?â And yes, I have been questioned by clients on occasion about my hour estimates, but I have never failed to successfully defend my reasoning for an estimate.

There are a few other smaller sections I put into my proposals, but I will cover these quickly since they arenât as important as the previous sections. I have a paragraph called Change of Requirements â" the crux of this is to say âif it's not in the fee proposal, then it's not covered by the project costâ. I have an area called Third Party Costs where I say that hosting is a separate fee. Then I have the obligatory Terms section, which is very short â" I just talk about payment terms and how the project will run. I have a paragraph titled Software Warranty where I say how long I will be fixing bugs for free (e.g. 6 months, 9 months, etc). Lastly, I have a Project Engagement section where the client signs to signify their acceptance of the project.
Note: this layout is what I use for my contracting work, but I have used aspects of it at some of the companies Iâve worked at.
Article reviewed by Nicolas Fontaine.
Wireframes and Mockups - Part II
Techniques for creating polished UI mockups.
Over the past few years I have been exposed to a number of techniques for preparing mockups. Each approach has its strengths and weaknesses, but generally the best method to use depends on the project at hand. I donât have a single preferred approach, but choosing the most appropriate style to use at the time can be a tricky undertaking.
HTML mockups â" with the advent of such as like Microsoft FrontPage and its successor Web Expression, anyone can make cool looking mockups, to the point where it seemed as though all that was left to do was hand over the HTML to the programmers, and they would take care of the rest.

Iâve used FrontPage to make HTML mockups quite a bit in the past. Some analysts say its a very strong option for designs because it allows you to produce navigable HTML. From my experience, I donât think its a good choice to use as a first draft system, it can be time consuming and lures you to distraction by unnecessary detail early on (i.e. making the design âlook prettyâ).
The biggest problem with HTML mockups is you have nowhere to put annotations (i.e. generally tech notes directed at programmers describing âunder the hoodâ functionality). As far as navigable mockups go, Iâve never found it to be a big issue with flat mockup structures. Generally people know where pages are going to go to, and in rare cases when a page is going to the wrong place, its nearly always a rudimentary task to direct it elsewhere.
There is one instance when a HTML mockup is appropriate straight away. This is when a complex new screen is being added to an already established interface. The reasons for this are beyond the scope of this article, but suffice it to say that experience has shown that its quicker then first creating a lo-fi version of the UI. One of the other great things about HTML mockups is that theyâre easy to distribute to people.
Microsoft Visio â" this is the tool I use at the moment for wireframes. It strikes a good balance between flexibility, professionalism, and speed. Visio is great for putting in tech notes without interfering with the wireframe itself, I generally put these in a sidebar to the right.

Visio interfaces come out looking nice and plain, which is what you want. It also has drop-in vector art for all the most common form controls you need (e.g. textboxes, radio buttons, etc).
I find that Visio is well suited for use with clients and their custom web applications. The only fault I can find with Visio is its hard to distribute files, few people have Visio installed on their computers (especially clients), but this is easy to get around, I just print wireframes to PDF.
Photoshop â" mainly used by graphic designers to create compelling visual layouts. The beauty of Photoshop is realism. This can be quite exciting since it creates a real buzz on a project, as though things are starting to shift from concept to reality.
Photoshop is best used for creating a single highly polished UI screen. For example, just the home page of a business website, or just the landing page of a web-based application. I have seen graphic designers produce every expected screen of a business website in Photoshop, this is totally unnecessary. The client will get what their website is going to look like from just the home page (i.e. it establishes what the overall look and feel of the website will be).

The obvious short-coming of employing Photoshop is the skill required to use the program, it often takes years just to become proficient with the tool. Iterations can often be slower then other techniques, especially when a complex design with many layers is involved. On the plus side, distribution is a breeze since Photoshop can save image files which anyone can open (e.g. JPEG or PNG).
One of the perils of making wireframes which are seen by a client is the tendency to get distracted by cosmetic factors (e.g. client: âwhy is everything grey?â, âcan we have that button in green?â, âthatâs not our logo!â).
Generally what I do before designing anything is tell the client âIâm going to make some very rough mockups of how the screens will look. It wont be pretty, but at the moment we are trying to lock-down where buttons go, the general layout, etcâ.
This is where methods like lo-fi prototyping or MS Excel can be helpful, because the screens canât help but look hideous. The danger with mockups in HTML or Photoshop is that effort can be spent early on âmaking it prettyâ. The problem with making things âlook prettyâ at early stages is time gets wasted when iterative adjustments occur (which they will).
Iterations are the name of the game when designing a system, especially early on. If this is the case then you want to choose the approach which is going to allow you to churn out revisions at super-high speeds.
Part 2 focuses on tools for producing polished UI mockups. Part 1 is more concerned with lo-fi approaches such as pen and paper-based techniques.
Over the past few years I have been exposed to a number of techniques for preparing mockups. Each approach has its strengths and weaknesses, but generally the best method to use depends on the project at hand. I donât have a single preferred approach, but choosing the most appropriate style to use at the time can be a tricky undertaking.
HTML mockups â" with the advent of such as like Microsoft FrontPage and its successor Web Expression, anyone can make cool looking mockups, to the point where it seemed as though all that was left to do was hand over the HTML to the programmers, and they would take care of the rest.

Iâve used FrontPage to make HTML mockups quite a bit in the past. Some analysts say its a very strong option for designs because it allows you to produce navigable HTML. From my experience, I donât think its a good choice to use as a first draft system, it can be time consuming and lures you to distraction by unnecessary detail early on (i.e. making the design âlook prettyâ).
The biggest problem with HTML mockups is you have nowhere to put annotations (i.e. generally tech notes directed at programmers describing âunder the hoodâ functionality). As far as navigable mockups go, Iâve never found it to be a big issue with flat mockup structures. Generally people know where pages are going to go to, and in rare cases when a page is going to the wrong place, its nearly always a rudimentary task to direct it elsewhere.
There is one instance when a HTML mockup is appropriate straight away. This is when a complex new screen is being added to an already established interface. The reasons for this are beyond the scope of this article, but suffice it to say that experience has shown that its quicker then first creating a lo-fi version of the UI. One of the other great things about HTML mockups is that theyâre easy to distribute to people.
Microsoft Visio â" this is the tool I use at the moment for wireframes. It strikes a good balance between flexibility, professionalism, and speed. Visio is great for putting in tech notes without interfering with the wireframe itself, I generally put these in a sidebar to the right.

Visio interfaces come out looking nice and plain, which is what you want. It also has drop-in vector art for all the most common form controls you need (e.g. textboxes, radio buttons, etc).
I find that Visio is well suited for use with clients and their custom web applications. The only fault I can find with Visio is its hard to distribute files, few people have Visio installed on their computers (especially clients), but this is easy to get around, I just print wireframes to PDF.
Photoshop â" mainly used by graphic designers to create compelling visual layouts. The beauty of Photoshop is realism. This can be quite exciting since it creates a real buzz on a project, as though things are starting to shift from concept to reality.
Photoshop is best used for creating a single highly polished UI screen. For example, just the home page of a business website, or just the landing page of a web-based application. I have seen graphic designers produce every expected screen of a business website in Photoshop, this is totally unnecessary. The client will get what their website is going to look like from just the home page (i.e. it establishes what the overall look and feel of the website will be).

The obvious short-coming of employing Photoshop is the skill required to use the program, it often takes years just to become proficient with the tool. Iterations can often be slower then other techniques, especially when a complex design with many layers is involved. On the plus side, distribution is a breeze since Photoshop can save image files which anyone can open (e.g. JPEG or PNG).
One of the perils of making wireframes which are seen by a client is the tendency to get distracted by cosmetic factors (e.g. client: âwhy is everything grey?â, âcan we have that button in green?â, âthatâs not our logo!â).
Generally what I do before designing anything is tell the client âIâm going to make some very rough mockups of how the screens will look. It wont be pretty, but at the moment we are trying to lock-down where buttons go, the general layout, etcâ.
This is where methods like lo-fi prototyping or MS Excel can be helpful, because the screens canât help but look hideous. The danger with mockups in HTML or Photoshop is that effort can be spent early on âmaking it prettyâ. The problem with making things âlook prettyâ at early stages is time gets wasted when iterative adjustments occur (which they will).
Iterations are the name of the game when designing a system, especially early on. If this is the case then you want to choose the approach which is going to allow you to churn out revisions at super-high speeds.
Outsourcing Coding vs Building an In-house Team
Perspectives on using outsourced programmers in a web development environment
A few years ago I was in Bali for a fitness bootcamp. Whilst watching TV late one night, I came across a documentary on the construction of an underground railway system in Amsterdam. I vividly recall one of the engineers being interviewed saying âitâs impossible, but weâre going to do it anywayâ. When I think of some aspects of outsourcing, I remember this statement because there definitely are some tough challenges in getting outsourcing to work, but I believe it can be done.
I should begin by saying that by no means am I an authority on working with outsourced programmers, in fact, Iâve only done it for a few months total. My brief experience with outsourcing revealed both good and bad aspects of the approach, but more importantly, it opened my mind to the possibilities. I have noticed that some people seem to be against outsourcing for personal reasons, and that is surely their prerogative.
In some ways this article is a retort to a piece on outsourcing I recently read. The article in question is by Michael Bean and is titled The Pitfalls of Outsourcing Programmers. It is one of the selected works gathered together in the book The Best Software Writing I â" Selected & Introduced by Joel Spolsky.

Am I attacking what the author had to say in the article? No way, itâs very well written and full of insightful information. Some knowledge of what the article is about is required in order to understand my perspective on the matter. I donât want to re-write the article, so I will just cover the main points very quickly.
Michael Bean discusses the following ideas:
This is basically the crux of Michael Beanâs article. Iâve done my best to retain his core ideas, but obviously there is the risk of misinterpretation.

I have to agree that it is undesirable to outsource everything (i.e. both design and coding). In Michael Beanâs article, he doesnât really go into what he means by design. To me, design means the functional specification (i.e. how the software will work from the userâs point of view).
Would I trust an outsourcer to write a functional specification? No. This is not meant as an attack on the skill of overseas programmers, itâs just unreasonable to think you could get a remotely accurate spec without meeting a client face-to-face. Would I trust outsourced programmers to create software based on one of my specs? Yes, definitely.
The other problematic aspect of Michael Beanâs article is that it doesnât explicitly mention a division between shrink-wrapped software development and custom software projects. This is a major consideration. If you are trying to minimize production costs, then outsourced programmers are very well suited to custom development (and yes, maintenance is a big issue, but itâs a big issue with normal companies anyway). Reducing operational costs may be a very real concern if your business has investors or venture capital.
There are strategies for having outsourced programmers work on shrink-wrapped software, for instance; some Indian companies offer dedicated teams that only work on your software, they even come complete with their own dedicated project manager.
Itâs true, youâre communication will take a hit, that is unavoidable. But you donât get something for nothing. If you want to produce software for 50% of the normal cost, then be prepared to put up with some discomfort.
Luckily, in Australia we donât suffer from the same time zone issues our American friends have to endure. In my experience with Indian programmers, I found they began to stir at about 12 noon, thatâs just fine as far as Iâm concerned.
Communication and project management tools are very important for successfully working with outsourced programmers. MSN or other instant messaging software is the key. I remember having three different IM softwares running on my computer at one point in order to keep in touch with everyone on my projects. A project management tool like Basecamp is also very helpful. A bug tracking system is another great idea, and an online schedule that can be viewed by everyone will make life a lot easier.
Perhaps this is a little simplistic, but it seems to boil down to this: outsourcing results in cheaper software development, but in-house teams produce better quality software.
A few years ago I was in Bali for a fitness bootcamp. Whilst watching TV late one night, I came across a documentary on the construction of an underground railway system in Amsterdam. I vividly recall one of the engineers being interviewed saying âitâs impossible, but weâre going to do it anywayâ. When I think of some aspects of outsourcing, I remember this statement because there definitely are some tough challenges in getting outsourcing to work, but I believe it can be done.
I should begin by saying that by no means am I an authority on working with outsourced programmers, in fact, Iâve only done it for a few months total. My brief experience with outsourcing revealed both good and bad aspects of the approach, but more importantly, it opened my mind to the possibilities. I have noticed that some people seem to be against outsourcing for personal reasons, and that is surely their prerogative.
In some ways this article is a retort to a piece on outsourcing I recently read. The article in question is by Michael Bean and is titled The Pitfalls of Outsourcing Programmers. It is one of the selected works gathered together in the book The Best Software Writing I â" Selected & Introduced by Joel Spolsky.
Am I attacking what the author had to say in the article? No way, itâs very well written and full of insightful information. Some knowledge of what the article is about is required in order to understand my perspective on the matter. I donât want to re-write the article, so I will just cover the main points very quickly.
Michael Bean discusses the following ideas:
There has been a rush in recent years for US companies to send development tasks to India, China, and Eastern Europe.
Software development is design not manufacturing. Therefore, by virtue of its creative nature, itâs not something which should be sent off-shore.
People pay for âvalue addedâ services or products. If all aspects of a companyâs offering (from production to customer service) are outsourced, they cannot give customers what they truly desire.
Outsourcing customer service is equivalent to saying you arenât interested in hearing what youâre clientele have to say.
The motivation behind setting up a massive IT work force overseas goes like this; âif Nike can do it with shoes, we can do it with codeâ.
The âbut you are taking away jobs from Americansâ argument is spurious at best, people in India or where-ever have just as much right to work as anyone else. We are living in a global economy after all.
When a business outsources innovation related task, they give away their competitive advantage. Over time, a company will lose their capacity to innovate.
Innovation suffers when people are spread across different countries since they canât communicate effectively.
Outsourced programmers arenât around for the long term. They tend to disappear after the project is over, taking with them any specialist knowledge they have acquired.
Completely outsourcing all of your development is a bad idea (i.e. both design and coding of the software).
The difference between United States and Indian time zones means there is no overlap between their working hours. This makes communication even more difficult.
Creating software is more about design then assembly. The ability to design is also considered an uncommon skill.
Software development is design not manufacturing. Therefore, by virtue of its creative nature, itâs not something which should be sent off-shore.
People pay for âvalue addedâ services or products. If all aspects of a companyâs offering (from production to customer service) are outsourced, they cannot give customers what they truly desire.
Outsourcing customer service is equivalent to saying you arenât interested in hearing what youâre clientele have to say.
The motivation behind setting up a massive IT work force overseas goes like this; âif Nike can do it with shoes, we can do it with codeâ.
The âbut you are taking away jobs from Americansâ argument is spurious at best, people in India or where-ever have just as much right to work as anyone else. We are living in a global economy after all.
When a business outsources innovation related task, they give away their competitive advantage. Over time, a company will lose their capacity to innovate.
Innovation suffers when people are spread across different countries since they canât communicate effectively.
Outsourced programmers arenât around for the long term. They tend to disappear after the project is over, taking with them any specialist knowledge they have acquired.
Completely outsourcing all of your development is a bad idea (i.e. both design and coding of the software).
The difference between United States and Indian time zones means there is no overlap between their working hours. This makes communication even more difficult.
Creating software is more about design then assembly. The ability to design is also considered an uncommon skill.
This is basically the crux of Michael Beanâs article. Iâve done my best to retain his core ideas, but obviously there is the risk of misinterpretation.

I have to agree that it is undesirable to outsource everything (i.e. both design and coding). In Michael Beanâs article, he doesnât really go into what he means by design. To me, design means the functional specification (i.e. how the software will work from the userâs point of view).
Would I trust an outsourcer to write a functional specification? No. This is not meant as an attack on the skill of overseas programmers, itâs just unreasonable to think you could get a remotely accurate spec without meeting a client face-to-face. Would I trust outsourced programmers to create software based on one of my specs? Yes, definitely.
The other problematic aspect of Michael Beanâs article is that it doesnât explicitly mention a division between shrink-wrapped software development and custom software projects. This is a major consideration. If you are trying to minimize production costs, then outsourced programmers are very well suited to custom development (and yes, maintenance is a big issue, but itâs a big issue with normal companies anyway). Reducing operational costs may be a very real concern if your business has investors or venture capital.
There are strategies for having outsourced programmers work on shrink-wrapped software, for instance; some Indian companies offer dedicated teams that only work on your software, they even come complete with their own dedicated project manager.
Itâs true, youâre communication will take a hit, that is unavoidable. But you donât get something for nothing. If you want to produce software for 50% of the normal cost, then be prepared to put up with some discomfort.
Luckily, in Australia we donât suffer from the same time zone issues our American friends have to endure. In my experience with Indian programmers, I found they began to stir at about 12 noon, thatâs just fine as far as Iâm concerned.
Communication and project management tools are very important for successfully working with outsourced programmers. MSN or other instant messaging software is the key. I remember having three different IM softwares running on my computer at one point in order to keep in touch with everyone on my projects. A project management tool like Basecamp is also very helpful. A bug tracking system is another great idea, and an online schedule that can be viewed by everyone will make life a lot easier.
Perhaps this is a little simplistic, but it seems to boil down to this: outsourcing results in cheaper software development, but in-house teams produce better quality software.
Project Post-mortems
Running better projects by learning from the past.
The unfortunate reality with Project Post-mortems (also called Project Debriefing or Lessons Learnt) is that everyone thinks they are a great idea, but they rarely ever get done. I would say the main reason for this is because upper management generally doesnât think its worth the commitment of resources. I have no sure-fire way for remedying this, but a good way of getting support from management is to stress that it wont take much time (e.g. 2 hours worth of debriefing meetings with technical staff, 2 hours to analyse the data, 2 hours to write the report).
Whatâs the point of a post-mortem you may ask? The obvious answer to this question is so you can learn from your mistakes (e.g. âI know for next time to start putting in the request for the SSL certificate much earlierâ). But there are some subtler benefits to be had from creating this report. For one, it lets you analyse the effectiveness of your QA process (e.g. how many bugs in total were logged? how many bugs did you find vs. the client?, how many bugs seem to be the result of coders not following the spec?).
Probably the most important reason for undertaking a project post-mortem is the least obvious; its to engage technical staff, to ask them how they felt about the project. Far too often programmers feel they have been rail-roaded into doing things they didnât want to do during a project, for example; cutting features, following technology choices made by management, having to work over-time because of poor time planning, etc. You must listen to people â" that doesnât necessarily mean you enact the ânerf guns for everyoneâ policy your zaniest programmer requests, it just means sincerely listening to what they have to say.
If possible, I would suggest implementing at least one change based on your development teamsâ feedback since this demonstrates you are actually listening. For example, if programmers are saying âwe worked a lot of over-time to deliver this project, we should get time in lieuâ, I wouldnât propose getting them that time in lieu, I would instead suggest getting each programmer some kind of token gift to recognise their efforts (time in lieu isnât the point, being appreciated is). Also, Iâm against presenting gifts or bonuses to staff in meetings or in public settings. When management types do this, I think there is a certain aspect of âhey everyone, look what a good manager I amâ to it â" instead, you do it in private, you just say âthanks Tony for the extra time you put into the project. I got you a Borders gift voucher for $30. I know its not much, but I just wanted to let you know we did spot the extra effortâ.
The structure of the post-mortem report I use is very streamlined, being only two pages long. If your report comes out to be longer then that, consider stripping information until it gets down to two pages (remember, no one likes to read long documents). The process itself is broken up into three stages; debriefing the development team - where you ask programmers to give their thoughts on how the project went, data analysis - where you produce some simple statistics based on the bugs logged during the project, and lastly, writing the report itself â" where you summarise both the feedback from programmers and make statements about the bug statistics. You may also want to include a conclusion at the end of the report where you âbring it all togetherâ and perhaps make some statements about what went well in the project and what could be improved.
When it comes to the debriefing session with the programmers, try find an independent party to run it. Their role is just to ask the questions youâve prepared, note down the answers, and watch the time (two hours maximum, if it needs to go beyond that â" bad luck). Having someone outside of the project asking the questions allows programmers to answer questions in an open manner; the project post-mortem isnât a witch hunt. What sort of questions should you ask? Some examples would be; âare you proud of the work you did on the project â" if yes; what in particular? If no; what went wrong?â, âwhat was the single most frustrating part of the project?â, âhow would you do things differently next time?â, âwhat was the most satisfying part of the project?â, âwhich of our processes worked well?â, âwhich of our processes were hard to use?â, âif you could wave a magic want and change something about the project â" what would it be?â, âdid the customer participate effectively? If not, how could we improve this?â.
If you have been tracking bugs over the course of the project, you will be able to analyse these to produce some basic statistics. The sorts of stats I like to go for include; how many issues were logged during the project (and how many of these were bugs vs. feature requests), how many bugs were critical âshow stoppersâ vs. low priority (like UI issues), how many of the bugs did you find compared to how many the client found (this is a good indicator of the effectiveness of your QA process).
Lets talk about the structure of the report itself. As is often my habit, I begin with a Document Purpose paragraph (e.g. âthis document is a deconstruction of how the project went. The hope of this is to learn from our mistakes and identify successful processes which should be continued.â). You will most likely need to edit the answers given by the development team during their debriefing session; for instance, if one of the programmers has said âthe client was a complete ass, he kept changing his mind every 10 minutesâ, thatâs probably not the best of things to be recorded in a document which upper management may see. This kind of statement would be converted to something like âmembers of the development team felt that the client was indecisive with regard to their requirementsâ.

For the Bug Analysis section, go for bullet point statements like â22.5% of all bugs logged were found by the client, the remaining 77.5% were found by usâ.
Lastly, the conclusions paragraph is what its all about. Where you have a chance to make some grand statements which are backed by anecdotal statistics. You may want to say things like âthe bug statistics indicate that as a team, we are not following specifications closely enoughâ or âbased on feedback from the development team, there seems to be a consensus that a more detailed project schedule is neededâ.
Will upper management really care about the project post-mortem report; probably not, at least not directly. But the post-mortem report is like a project schedule or spec, upper management generally wont be interested in the details, but they will appreciate that you have done it and it will be a reflection of your professionalism. Just be sure that it doesnât become a mini-project in itself.
The unfortunate reality with Project Post-mortems (also called Project Debriefing or Lessons Learnt) is that everyone thinks they are a great idea, but they rarely ever get done. I would say the main reason for this is because upper management generally doesnât think its worth the commitment of resources. I have no sure-fire way for remedying this, but a good way of getting support from management is to stress that it wont take much time (e.g. 2 hours worth of debriefing meetings with technical staff, 2 hours to analyse the data, 2 hours to write the report).
Whatâs the point of a post-mortem you may ask? The obvious answer to this question is so you can learn from your mistakes (e.g. âI know for next time to start putting in the request for the SSL certificate much earlierâ). But there are some subtler benefits to be had from creating this report. For one, it lets you analyse the effectiveness of your QA process (e.g. how many bugs in total were logged? how many bugs did you find vs. the client?, how many bugs seem to be the result of coders not following the spec?).
Probably the most important reason for undertaking a project post-mortem is the least obvious; its to engage technical staff, to ask them how they felt about the project. Far too often programmers feel they have been rail-roaded into doing things they didnât want to do during a project, for example; cutting features, following technology choices made by management, having to work over-time because of poor time planning, etc. You must listen to people â" that doesnât necessarily mean you enact the ânerf guns for everyoneâ policy your zaniest programmer requests, it just means sincerely listening to what they have to say.
If possible, I would suggest implementing at least one change based on your development teamsâ feedback since this demonstrates you are actually listening. For example, if programmers are saying âwe worked a lot of over-time to deliver this project, we should get time in lieuâ, I wouldnât propose getting them that time in lieu, I would instead suggest getting each programmer some kind of token gift to recognise their efforts (time in lieu isnât the point, being appreciated is). Also, Iâm against presenting gifts or bonuses to staff in meetings or in public settings. When management types do this, I think there is a certain aspect of âhey everyone, look what a good manager I amâ to it â" instead, you do it in private, you just say âthanks Tony for the extra time you put into the project. I got you a Borders gift voucher for $30. I know its not much, but I just wanted to let you know we did spot the extra effortâ.
The structure of the post-mortem report I use is very streamlined, being only two pages long. If your report comes out to be longer then that, consider stripping information until it gets down to two pages (remember, no one likes to read long documents). The process itself is broken up into three stages; debriefing the development team - where you ask programmers to give their thoughts on how the project went, data analysis - where you produce some simple statistics based on the bugs logged during the project, and lastly, writing the report itself â" where you summarise both the feedback from programmers and make statements about the bug statistics. You may also want to include a conclusion at the end of the report where you âbring it all togetherâ and perhaps make some statements about what went well in the project and what could be improved.
When it comes to the debriefing session with the programmers, try find an independent party to run it. Their role is just to ask the questions youâve prepared, note down the answers, and watch the time (two hours maximum, if it needs to go beyond that â" bad luck). Having someone outside of the project asking the questions allows programmers to answer questions in an open manner; the project post-mortem isnât a witch hunt. What sort of questions should you ask? Some examples would be; âare you proud of the work you did on the project â" if yes; what in particular? If no; what went wrong?â, âwhat was the single most frustrating part of the project?â, âhow would you do things differently next time?â, âwhat was the most satisfying part of the project?â, âwhich of our processes worked well?â, âwhich of our processes were hard to use?â, âif you could wave a magic want and change something about the project â" what would it be?â, âdid the customer participate effectively? If not, how could we improve this?â.
If you have been tracking bugs over the course of the project, you will be able to analyse these to produce some basic statistics. The sorts of stats I like to go for include; how many issues were logged during the project (and how many of these were bugs vs. feature requests), how many bugs were critical âshow stoppersâ vs. low priority (like UI issues), how many of the bugs did you find compared to how many the client found (this is a good indicator of the effectiveness of your QA process).
Lets talk about the structure of the report itself. As is often my habit, I begin with a Document Purpose paragraph (e.g. âthis document is a deconstruction of how the project went. The hope of this is to learn from our mistakes and identify successful processes which should be continued.â). You will most likely need to edit the answers given by the development team during their debriefing session; for instance, if one of the programmers has said âthe client was a complete ass, he kept changing his mind every 10 minutesâ, thatâs probably not the best of things to be recorded in a document which upper management may see. This kind of statement would be converted to something like âmembers of the development team felt that the client was indecisive with regard to their requirementsâ.

For the Bug Analysis section, go for bullet point statements like â22.5% of all bugs logged were found by the client, the remaining 77.5% were found by usâ.
Lastly, the conclusions paragraph is what its all about. Where you have a chance to make some grand statements which are backed by anecdotal statistics. You may want to say things like âthe bug statistics indicate that as a team, we are not following specifications closely enoughâ or âbased on feedback from the development team, there seems to be a consensus that a more detailed project schedule is neededâ.
Will upper management really care about the project post-mortem report; probably not, at least not directly. But the post-mortem report is like a project schedule or spec, upper management generally wont be interested in the details, but they will appreciate that you have done it and it will be a reflection of your professionalism. Just be sure that it doesnât become a mini-project in itself.
Saturday, November 1, 2008
Hiring Programming Staff (Part 1)
Hiring great programmers for your development team (part 1)
The Phone Interview
Few would argue against the notion that the people on a project are the single biggest factor affecting its success. You could have an effective software development methodology in place, but inexperienced or unsuitable coders could destine a project to failure.
The task of finding a good programmer to join your team can be quite difficult and time consuming. I have to admit, Iâve done it the hard way in the past. A few years ago my boss and I spent an entire week trawling through résumés and interviewing people. We received around 240 applications and ended up interviewing 18 people. Needless to say, we got nothing done that week as far as our regular work went. This experience lead me to believe that there had to be a better way of finding top-notch programmers.
A starting point would be to post your job ad on a popular recruitment website (e.g. SEEK, or whichever online service has the biggest market share in your region). The structure and content of your job ad is ultimately up to you, but beginning with a short paragraph describing your company culture is a good idea. A common feature of job adverts for programmers is two separate bullet point lists; one for âmust have skillsâ and another for âhighly regardedâ skills. You may also want to ask people to fill-out a skills matrix when they apply, this does two things: firstly, it weeds out âjob spammersâ (i.e. people that just blindly apply to everything), and secondly, it provides a normalised method for comparing people instead of just relying on information which may or may not be contained in their resume.
After a few days, résumés should start arriving. Generally what I do is open up a résumé, press Ctrl-F and perform a keyword search for the most important requirement for the role. For example, if I wanted a .NET programmer, I would look for the keyword â.NETâ in a personâs résumé, if that particular word didnât appear anywhere in the résumé, next (i.e. the candidate lacks the most basic of requirements).
There is an optional step you can do before contacting an applicant, and that is to ask them to complete an online test. In this situation, you would first review someoneâs résumé to ensure they have the minimum skills for the position, then email them a URL to your online test. Based on the results of their test, you would decide whether its worth investing further time for a phone interview.

An online test does however require commitment of time to mark answers, but it will ensure that only the most technically competent people are progressing further. And yes, I am aware that a person can âcheatâ on online tests. For instance, they could have a friend sitting beside them helping them out, or they could be Googling the answers. But personally, thatâs what I call âbeing resourcefulâ, besides, they will still have to survive a written test when they eventually come in for a face-to-face interview.
If you find a résumé that seems to be a match for the position you are trying to fill, then its time to consider a phone interview. This is where many people go wrong, they organise a face-to-face interview straight away. I believe this is totally unnecessary, you only need to meet perhaps 3-5 people from the total pool of applicants.
Now onto the phone interview. I work from a predefined script, a document about 2-3 pages long with questions relevant to the position. The first set of questions are what I call the âdeal breaker questionsâ. If any of these fail, then you wrap up the interview and move on. The very first question always concerns communication. If you canât understand what the person is saying over the phone, thereâs really nothing you can do for them (you would terminate the interview).
The remaining questions would either relate specifically to the technology you are using within your organisation (e.g. âhow would you rate your C# skills?â) or would be made up of very common interview type questions (e.g. âgive an example of when you had to work under pressureâ). To keep things simple, you generally rate a candidateâs answer as either âBadâ, âFairâ or âGoodâ. As to how you asses an answer, thatâs fairly subjective. However, each question can have a different weighting on its score. The reason for this is because a good answer to the question âwhat would you do if a project was running behind schedule?â is far more significant then a good answer to the question âwhy did you leave your last job?â. Conversely, if a candidate answered the question âhow would you handle a difficult client?â in a negative manner, that may result in an actual deduction of points.

After concluding the phone interview, there is a Post Interview Analysis where you score the candidate on factors such as what their attitude and demeanour were like. These characteristics may be relevant if you are intending for the programmer to interact directly with clients. Finally, you tally the candidates score - the highest scoring people are the ones you want to interview face-to-face.
Where do recruitment or employment agencies fit into the picture? They are fine for the preliminary process (i.e. résumé review and talking to a candidate on the phone). They can be very effective in helping to short-list quality candidates. Do they need to be meeting and interviewing a candidate in person? I donât believe so, itâs unnecessary and adds to the expense of the whole process.

A topic worth mentioning is the choice between hiring someone with a few years of industry experience vs. a recent uni graduate. There are pros and cons to both options, but it generally comes down to two things; personal taste, and how much money is available for the new staff memberâs salary. Unfortunately, in-depth discussion of this topic is beyond the scope of this article, but I will say my own personal preference is to hire new graduates because they cost less and often have excellent production potential when given clear instructions.
Reviewed by Petras Surna
Note: this article is split into two parts because of its length. The two segments are related, but each can be taken as a stand-alone article. Part 1 deals with phone interviews, part 2 focuses on written programmer tests.
The Phone Interview
Few would argue against the notion that the people on a project are the single biggest factor affecting its success. You could have an effective software development methodology in place, but inexperienced or unsuitable coders could destine a project to failure.
The task of finding a good programmer to join your team can be quite difficult and time consuming. I have to admit, Iâve done it the hard way in the past. A few years ago my boss and I spent an entire week trawling through résumés and interviewing people. We received around 240 applications and ended up interviewing 18 people. Needless to say, we got nothing done that week as far as our regular work went. This experience lead me to believe that there had to be a better way of finding top-notch programmers.
A starting point would be to post your job ad on a popular recruitment website (e.g. SEEK, or whichever online service has the biggest market share in your region). The structure and content of your job ad is ultimately up to you, but beginning with a short paragraph describing your company culture is a good idea. A common feature of job adverts for programmers is two separate bullet point lists; one for âmust have skillsâ and another for âhighly regardedâ skills. You may also want to ask people to fill-out a skills matrix when they apply, this does two things: firstly, it weeds out âjob spammersâ (i.e. people that just blindly apply to everything), and secondly, it provides a normalised method for comparing people instead of just relying on information which may or may not be contained in their resume.
After a few days, résumés should start arriving. Generally what I do is open up a résumé, press Ctrl-F and perform a keyword search for the most important requirement for the role. For example, if I wanted a .NET programmer, I would look for the keyword â.NETâ in a personâs résumé, if that particular word didnât appear anywhere in the résumé, next (i.e. the candidate lacks the most basic of requirements).
There is an optional step you can do before contacting an applicant, and that is to ask them to complete an online test. In this situation, you would first review someoneâs résumé to ensure they have the minimum skills for the position, then email them a URL to your online test. Based on the results of their test, you would decide whether its worth investing further time for a phone interview.

An online test does however require commitment of time to mark answers, but it will ensure that only the most technically competent people are progressing further. And yes, I am aware that a person can âcheatâ on online tests. For instance, they could have a friend sitting beside them helping them out, or they could be Googling the answers. But personally, thatâs what I call âbeing resourcefulâ, besides, they will still have to survive a written test when they eventually come in for a face-to-face interview.
If you find a résumé that seems to be a match for the position you are trying to fill, then its time to consider a phone interview. This is where many people go wrong, they organise a face-to-face interview straight away. I believe this is totally unnecessary, you only need to meet perhaps 3-5 people from the total pool of applicants.
Now onto the phone interview. I work from a predefined script, a document about 2-3 pages long with questions relevant to the position. The first set of questions are what I call the âdeal breaker questionsâ. If any of these fail, then you wrap up the interview and move on. The very first question always concerns communication. If you canât understand what the person is saying over the phone, thereâs really nothing you can do for them (you would terminate the interview).
The remaining questions would either relate specifically to the technology you are using within your organisation (e.g. âhow would you rate your C# skills?â) or would be made up of very common interview type questions (e.g. âgive an example of when you had to work under pressureâ). To keep things simple, you generally rate a candidateâs answer as either âBadâ, âFairâ or âGoodâ. As to how you asses an answer, thatâs fairly subjective. However, each question can have a different weighting on its score. The reason for this is because a good answer to the question âwhat would you do if a project was running behind schedule?â is far more significant then a good answer to the question âwhy did you leave your last job?â. Conversely, if a candidate answered the question âhow would you handle a difficult client?â in a negative manner, that may result in an actual deduction of points.

After concluding the phone interview, there is a Post Interview Analysis where you score the candidate on factors such as what their attitude and demeanour were like. These characteristics may be relevant if you are intending for the programmer to interact directly with clients. Finally, you tally the candidates score - the highest scoring people are the ones you want to interview face-to-face.
Where do recruitment or employment agencies fit into the picture? They are fine for the preliminary process (i.e. résumé review and talking to a candidate on the phone). They can be very effective in helping to short-list quality candidates. Do they need to be meeting and interviewing a candidate in person? I donât believe so, itâs unnecessary and adds to the expense of the whole process.
A topic worth mentioning is the choice between hiring someone with a few years of industry experience vs. a recent uni graduate. There are pros and cons to both options, but it generally comes down to two things; personal taste, and how much money is available for the new staff memberâs salary. Unfortunately, in-depth discussion of this topic is beyond the scope of this article, but I will say my own personal preference is to hire new graduates because they cost less and often have excellent production potential when given clear instructions.
Reviewed by Petras Surna
Subscribe to:
Posts (Atom)