Sunday, July 27, 2008

Completion Bonds for software projects

My friend Eric, who will be presenting at Agile 2008, points to an interesting talk to be presented at the conference: insuring IT projects by using the equivalent of a completion bond (more info). [The original idea is from a Valtec colleague of Eric's.]

A completion bond, also known as a completion guarantee, is a legal undertaking by the guarantor to the film's financier(s) that the film will be completed and delivered to the specification agreed (i.e. based on the agreed script, featuring the agreed principal cast, being of roughly the agreed length etc.), by the date agreed in their contracts with the producer and within the agreed budget. The guarantor works closely with the films producer and may "step in" (take over) one or more aspects of the film if things are not going according to plan. Corrective action could involve anything from minor tweaks to the budget to bringing in a new director. In the worst case the guarantor will repay the film's financiers, but usually it is usually in everybody's interests to deliver a film, even if it does not meet the full original vision. The guarantor of course charges a fee, which is typically 4% - 6% of the film's budget.

As a side note, big budget Hollywood films are "self-guaranteed" :)

It is interesting to contemplate if such a bond could work for IT projects. Some of the pros I can think of:
  • Assuming you can find a guarantor with enough IT experience, the guarantor can validate whether the scope/budget/deadlines of the project are realistic or not. (If they are not realistic then the guarantor will sell the bond for a very high price!)
  • Many financial clients would be comfortable with the concept of insurance and terms like "strike price" ("production price")
  • A guarantor would have the authority to force the hard decisions to keep a project on track
and some of the cons:
  • I could see the temptation for a guarantor to mainly tweak the budget, rather than guiding major aspects of the project (depends on the skill set of the guarantor I guess)
  • Giving regular updates to the guarantor could add significant overhead to small (3-5 people) projects

Saturday, July 26, 2008

Using multi-threaded javascript to simplify AJAX

Concurrent.Thread is a JavaScript library that provides a thread-like syntax similar to that found in Java and C#. e.g. create, stop, sleep, notify and yield methods. (Finally, a sleep function for JavaScript!) This allows you to program in a synchronous way, possibly simplifying code flow and readability compared to the usual callback style of JavaScript.

For example, a typical asynchronous XMLHttpRequest (AJAX) flow that looks something like this:


var req = new XMLHttpRequest();
req.open("GET", url, true);
req.onreadystatechange = callback1;
req.send(null);

function callback1() {
if (req.readyState == 4) {
if (req.status == 200) {
alert(req.responseText);
} else {
alert(req.statusText); // Error
}
}
}


could alternatively be implemented in a synchronous way like so:


<script type="text/javascript" src="Concurrent.Thread.js"></script>
<script type="text/x-script.multithreaded-js">
var req = Concurrent.Thread.Http.get(url, ["Accept", "*"]);
if (req.status == 200) {
alert(req.responseText);
} else {
alert(req.statusText);
}
</script>


The synchronous code appears more compact, which could help make large application more readable.

How does Concurrent.Thread implement multi-threading in single threaded browser JavaScript engines? By simulating threads with time slicing.

Any downsides to using Concurrent.Thread? I suspect it will be a little slower due to simulating threads. It is also a very large download at 500k! (gzip it!)

Friday, July 11, 2008

Agile Smells - Do you need agile deodorant?

"Agile Smells" is a catalog of warning signs that your agile project may (or may not) be about to go horribly wrong.

Let me contribute a few other smells I've come across:

"Can you change that estimate? / Can you revise the remaining estimates DOWN?"

This is a variation of Executive Pressure. After a few sprints the teams velocity stabilizes and it becomes clear the hoped for project deadline can not be met. Instead of adjusting the usual project management variables - time, scope, resources (and quality, although quality should be the last variable to be sacrificed) - the initial reaction is to apply pressure to the developers to work longer hours . In most cases it was not the developers who set the original project deadline. A more constructive approach is to and adjust the usual variables as the project progresses.

Sign-Off

"You can't change your mind. It's been signed off!" You're still thinking waterfall. Accept that the business owners will change their minds - for any number of reasons - even after the corresponding story has been completed. Any changes become a new story, which of course has to be prioritised.

"What is a chicken?"

Although people may say they have committed to using agile it is often not a priority for them to do some basic reading on the subject. For example, I've lent people the very thin and straight-to-the-point Agile Software Development with Scrum, but if a few days later they can't tell me the story of the Chicken and the Pig then I know they are not that interested in the subject.

150 Funniest Resume Mistakes, Bloopers and Blunders Ever

If you've ever had to wade through a ton of resumes to find a few good people then you may have come across a few of these:
  • “Career break in 1999 to renovate my horse”
  • Hobbies: “enjoy cooking Chinese and Italians”
  • Candidate wrote résumé as a play - Act 1, Act 2, etc.
  • “Skills: Strong Work Ethic, Attention to Detail, Team Player, Self Motivated, Attention to Detail”
  • Why Interested in Position: “to keep my parole officer from putting back me in jail”
  • Experience: “Have not yet been abducted by aliens.”
  • “Consistently tanked as top sales producer for new accounts.”
  • “It’s best for employers that I not work with people.”
  • “Personal interests: donating blood. Fourteen gallons so far.”
  • Skills: “I have technical skills that will take your breath away.”
  • Accomplishments: “Brought in a balloon artist to entertain the team.”
  • Personal: “My family is willing to relocate. However not to New England (too cold) and not to Southern California (earthquakes). Indianapolis or Chicago would be fine. My youngest prefers Orlando’s proximity to Disney World.”
  • Background: “28 dog years of experience in sales (four human).”
  • Objective: “I am anxious to use my exiting skills.”

Thursday, July 03, 2008

Google/Yahoo! may soon be able to "search" your Flash applications

A consideration for building any consumer focused website is that many of the new breed of Rich Internet Application (RIA) technologies (AJAX, Flash, Silverlight, etc) are not easily navigated by search engines ("indexed"), and therefore sites that are RIA-heavy do not appear at the top of searches people do for relevant terms.

Those Search Engine Optimization (SEO) consultants you've hired to look over your website probably told you to go easy on the Flash animations. But that may be about to change. Adobe announced a couple of days ago that they will be working closely with Google and Yahoo! to provide technology to extract indexable content from Flash files:

"...We are giving a special, search-engine optimized Flash Player to Yahoo and Google which is going to help them crawl through every bit of your SWF file. This Flash Player will act just like a person would in some cases. It will click on your buttons, it will move through the states of your application, get data from the server when your application normally would, and it will capture all of the text and data that you’ve got inside of your Flash-based application..."

That sounds pretty grand. Google have posted a more down-to-earth explanation of what they expect to index from Flash files, which includes text-based stuff like blocks of text and URLs. (You can hide text from Google by turning it into an image :))

(Picture from Doug McCune's blog)

So how do you get your Flash-heavy site to the top of Google? Nobody knows since the Google rank algorithm is proprietary and constantly being tweaked. [NOTE TO SELF - Which reminds me, I must get around to doing a blog post on SEO since I've seen many clients come up with a grand vision for a website, only to have to make radical changes once SEO is considered.]

Equally interesting is the fact that Microsoft was not mentioned in the press release. Was Microsoft given the opportunity to participate? Did they not want to participate as that may give Flash an advantage over their own Silverlight RIA technology? Or maybe Microsoft are interested in promoting a non-keyword based way to search.