What a joke

By Digbyswift at June 27, 2010 07:05

England’s performance was just ludicrous! Aren’t they supposedly some of the best players in the world?!

Thank god they’re giving their fees to charity!

Handling the impossible project

By Digbyswift at June 24, 2010 00:56

I’m currently finishing the first phase of a project that has caused a few sleepless nights. The causes I can comfortably lay at the door of my boss:

  • He agreed a fixed fee up front with the client without any analysis of requirements;
  • He agreed a go-live date up front, again without analysis of requirements.

You might say that this is actually not an issue. This happens all the time, right? How many projects have you worked on when you’ve actually known the budget? Or when the specification for the project has been written after the horse has bolted?

Sure, this probably isn’t an issue if the project is relatively small and one that you can boilerplate from another project. However, in this case, the client wanted us to build an e-commerce/auction application, that once spec’d out required approximately 1050 man hours – that’s around 30 weeks, one developer working flat-out. This also making the assumption that I had captured all the tasks – which inevitably I hadn’t.

My boss promised up front that the client could have it in 12 weeks.

Every developer knows that given any week of development, he will not get 100% development time one one project. Maybe, 75-80%? The rest will be meetings, helping colleagues etc. So, to me, the task was ludicrous. Even with two developers working flat out, the timings still did not add up.

I’ve done my math and the fixed fee agreed with the client, before any specification was written, requirements analysed etc. was a hefty 5-figure value short of just the development cost. Add to this the cost of design, planning, project management costs and then contingency, and you can see that this is simply ludicrous.

This is what we did

So in a nutshell, this is what we did:

  • Myself and another developer worked flat out for the 12 weeks;
  • We hired a contractor to do a independent chunk of the project;
  • We drafted in a third colleague at times to pick up certain tasks;

The 4 weeks testing originally scoped, became 1 week and then the site went live.

The result

It was not my intention to go live after such a short testing period. In fact, no internal was done at all and barely one week of client testing. But the client wanted it live and we weren’t in a place to argue. The result was that a sub-standard site was released to the public:

  • There was missing functionality;
  • There was buggy functionality;
  • There was functionality that just didn’t work;
  • The work the contractor had done was untested and error strewn;
  • The client required changes that were difficult to incorporate due to the buggy nature of the site;
  • The client required changes that they hadn’t realised they wanted till they saw a complete, functioning version of the site.

In addition to this, because the testing phase was cut short and, as it turns out, the client didn’t sign off the specification, the issue-fixing stage will be ongoing for quite some time.

Lessons learnt?

Its easy to say, but don’t let your boss promise anything to the client until a project brief has passed your or the lead developer’s eyes.

How can a project be costed if there is no analysis of what the project will actually entail?

You may upset your boss by insisting on being involved as it will be seen that you are overcomplicating a process that he/she needs control over. But the benefits out-weigh the additional time spent, even if this is 30 minutes doing a high-level analysis of your bosses interpretation vs. the clients brief.

I’m actually very happy how the project has turned out. I’m less happy about the stress that it has caused. But it has up-skilled members of the team, given colleagues the encouragement that larger projects, when handled in a certain way needn’t be difficult and shown core weaknesses in the company’s project delivery process that we can improve upon for next time.

Code Complete

By Digbyswift at June 23, 2010 05:34

After a recommendation by Jeff Atwood’s Coding Horror, I picked up a copy of Code Complete. I have not got very far through it but this isn’t because its hard going. Its because I’m re-reading almost every paragraph such is the quality of the information.

Everything is backed up with references from industry research and so far everything makes so much sense. By far the best book I have bought this year!

Upgrading to MVC2: No parameterless constructor error

By Digbyswift at February 25, 2010 05:00

I cam across this today and it bugged the hell out of me. I am using a custom ControllerFactory (kindly provided by Steve Sanderson’s awesome Pro ASP.NET MVC Framework) set in the global.asax.cs as such:

protected void Application_Start() 
{ 
    RegisterRoutes(RouteTable.Routes); 

    // Configure log4net 
    log4net.Config.XmlConfigurator.Configure(); 

    // Configure CastleWindsor 
    ControllerBuilder
        .Current
        .SetControllerFactory(new WindsorControllerFactory()); 
}

During the upgrade this stopped working and i started getting the following error:

System.MissingMethodException: No parameterless constructor defined for this object


I tracked the error down to the fact the constructors in my Controllers were not being initialized and I found the following quote from the breaking changes section of the What’s New in ASP.NET MVC 2:

Custom controller factories are often used to provide dependency injection for ASP.NET MVC applications. To update the custom controller factories to support ASP.NET MVC 2, change the method signature or signatures to match the new signatures, and use the request context parameter instead of the property.

After a little digging, the only change I needed to make was altering my custom ControllerFactory’s GetControllerInstance() override from:

protected override IController GetControllerInstance(Type controllerType) 
{ 
    return (IController)_container.Resolve(controllerType); 
}


to

protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) 
{ 
    return (IController)_container.Resolve(controllerType); 
}

So many projects, so little time – NHibernate membership provider first

By Digbyswift at January 17, 2010 09:17

I know I have to finish off building my NHibernate-based Membership provider – its about 75% there, but I also want to start writing a bug tracker, a CRM (which may as well include the bug tracker), a light weight CMS and actually post relevant stuff to this website …

First things first. I’ll get the membership provider out of the way.

Hopefully I’ll post something about that later. Basically, the Membership provider that ships with .Net2.0 is fine but I need it to do more.

I need mine to be able to:

  • Handle user session objects as well as simple logged in/out cookies;
  • Have a more robust security question/answer model;
  • Handle a slightly more complex user model, i.e. one with multiple addresses, contact details etc.
  • Be more compact and contained, i.e. I don’t want to have to keep writing the code that should already be in the provider.

I know these are straight forward but I want them to be out of the box when I plug my provider in.Finally, an ex-colleague implemented a means of preventing session hijacking which I want to have a stab, and do it at without using databases if at all possible.

Kieron McIntyre

C# .Net Developer, based in Leeds. Married, happy and always learning