Dave Hawes Blog
It is all about delivering

Developers are only a cog in a software development project

March 5, 2010 09:12 by davehawes

I have been following a new blog by Tim McOwan called www.devballs.com and it focuses on delivering software using a Scrum Process.

His latest article, Guess What? Scrum Developers should be cutting code, period! has provoked some interesting comments and my comment turned out to be so long I decided it should become an article in it’s own right. The comment I was replying to was from Jason Gorman, in a nutshell it was that Business Analysts are not required developers should work directly with the customer.

While I understood what was being said I could not agree with that point of view and it seems that it would be throwing the baby out with the bath water. It sounded very Us and Them which is a bad place to be and seemed to be describing problems associated with a waterfall approach rather than scrum.


I'm a developer and have learnt some very hard and expensive lessons over the last 2 years about the holistic success of software projects, not just the technical success. This has given me a very different view and appreciation of what non-technical people bring to the overall success of a project, essentially removing that developer chip on my shoulder.

I strongly believe:
1)    That BA's can have an important role but are not always essential.
2)    Having a good manager is a must
3)    Using Scrum properly means that everyone knows and values what everyone else is doing.

The Manager

The reason you need a good manager / scrum master is to protect your developers from the customer and enforce the Scrum rules. They ensure the bits of the project jigsaw will fit together. They should be masters of the political game, they should be setting customer expectations, organising the customer's people to be available, keeping them up-to-date, making sure that the developers don't have any impediments stopping their development, keeping an eye on the team, settle any disputes etc. They don't need to cut code they just need to pull it all together. And if they are good nobody notices how hard/well they are working. (well I notice nowadays).

The Business Analyst (BA)

It is a common experience that developers have of a BA who don't deliver great information. However they do get a first version of this information and that can be a full time job in itself. It is hard to organise meetings with the customer. How many times at a first meeting do you ask someone what they want and they just have not thought about it. How many times does one department know what they do but are not really sure what other departments do and fit in. There's another meeting to organise and another then another. Finding out who does what is really really hard and takes a long time. As a developer I don't want to do that for days or weeks at a time, I want to be cutting code.


Where there is complexity and uncertainty in the business requirements let the BA's at it so that an overall picture can emerge and prioritisation of what delivers the most business value can happen. However if it is a fairly small, well defined business requirement I don't think you would need a BA and letting the developer engage directly with the customer would work very well.


The BA also serves another role which is essentially after sales / customer care. Once the software has been written and made live the BA should go back to the customer and see how well it is working. It could be the new software has thrown up some unforeseen problems. This is all very time consuming and having a highly skilled developer doing this makes little sense. It requires a personal and working relationship between the project team and the customer again this takes time to develop. Let the BA’s do this which frees up the developers to write software.

The Developer

We like creating stuff, we like solving technical problems playing with latest technologies, new software packages, coding techniques. Letting a developer loose with the customer to get requirements could quickly turn into an indulgence of what we want to do rather than solving business problems. We will be coming up with the technical solution to a problem before the problem has been properly thought through. It is fairly easy to persuading the customer they need a more complicated solution than is required.


By giving the developers a first version of the requirements and then let us think of the solution is a much more sensible approach. Yes the requirements will consist of nonsense and contradictions but the general direction has been set and we just need to work through the detail. The BA’s and customer will be on hand to help navigate this minefield.

Scrum

Here’s the kicker, using scrum properly ensures high communication and visibility between everyone involved in the project. There should not be “developers in meeting rooms  gassing about it with analysts and managers”. The analysts should be on hand to sit with you when you develop something, even better – get the customer involved. The dev’s will see what the BA’s are doing and visa-versa which should foster a sense of ‘Team’ and if someone isn’t delivering value it will become apparent pretty quickly. They should either be helped to perform or removed from the team.

 

Summary

So in summary, a scrum team needs these different roles and everyone brings value to the project and if they don’t it will be seen and there should be systems to deal with them. The manager protects the dev team and brings it all together, the BA’s build relationships with the business and get requirements and makes sure that the software has delivered value, the dev team get 3 week sprints to develop working software and are able to call on the BA’s / customers to clarify any nonsense and contradictions.


I read a book about 6 years ago called Coding Slave by Bob Reselman, it was a good read. One bit stuck in my mind and that was us coders are like Charlemagne’s scribes and I think this is very true:
http://www.informit.com/articles/article.aspx?p=170198

It has taken me a long time to appreciate this but now I appreciate the value others bring I am much happier in my own work.


LLBLGen Pro presentation at Dev Evening UK – ORM Showdown

February 26, 2010 22:59 by davehawes

I was privileged to be able to give a talk last night about an Object Role Mapper (ORM) tool that I have been using for over 2 years now called LLGLGen Pro. Dev Evening is a .NET user group near me which I have been attending for the last 4 months or so. Every meeting @mrlacy ensures there is a new and interesting topic for the techies that attend.

A few weeks ago @devevening asked if anyone had use any An ORM is a tool that lets you generate all the boring / boilerplate code of getting data in and out of a database to a Data Access Layer (DAL) as easy as possible. I had done a fairly decent amount of research into the topic 2 years ago when I was looking at creating my own websites. I decided on LLBLGen pro as my tool of choice and have not looked back. I thought this would be a great opportunity to explain to other developers the reasons for my decision.

My summary is this:

  1. I have no desire to be good at getting data in an out of databases. I would rather concentrate on business problems
  2. Getting an ORM gives me the experise of experts at little or no cost
  3. Paying for an ORM gives me professional support and a product with a roadmap
  4. LLBLGen fits my way of thinking, is easy to use and well worth the 249 euros!

Tags:
Categories:
Actions: E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed

A fix for the MSCrm 4 Developer toolkit devbuild.bat not building

February 10, 2010 14:06 by davehawes

I have just been setting up a new Crm project using the MS Crm4 Developer toolkit. Hats off to the guys at MCS, its a great bit of work and is packed full of amazing features which if used properly will ensure extra quality and best practice in the development of a Crm4 solution.

However I did have a bit of a problem with it which I have managed to fix – the default DevBuild.bat MSBuild script would not register my plugins if I ran my Crm server on any port other than 80!

I had followed the documentation about changing the server names etc. but whenever it tried to register my plugins the build failed.

It turns out that the MSCrm 4 Developer toolkit will only play nicely out of the box if you are running Crm on port 80, I am running on port 5555 though! After digging through the Plugin deployment tool source code I noticed that if the “CrmServiceAddress” was not specified then it made the url up from the CrmServiceServer but this did not include the port. Therefore the solution was to pass in the full Crm Service Address.

So the fix is this:

Edit the <YourSolutionName>.Common.targets file in the following places (changes are in red)

Here:

<!-- CRM Server Settings -->
<PropertyGroup>
  <CrmOrganizationName>MyCrmOrg</CrmOrganizationName>
  <CrmServiceServer>localhost</CrmServiceServer>
  <CrmServiceAddress>http://localhost:5555/MSCRMServices/2007/CrmService.asmx</CrmServiceAddress>
  <CrmServiceTimeout>120000</CrmServiceTimeout>
  <CrmServerBinAssemblyDir>C:\Program Files\Microsoft Dynamics CRM\Server\bin\assembly</CrmServerBinAssemblyDir>
  <ForceSynchronousPlugins>true</ForceSynchronousPlugins>
  <PluginDeveloperArguments Condition="'$(ForceSynchronousPlugins)' == 'true'">/sf</PluginDeveloperArguments>
</PropertyGroup>

Here:

<UKDynamics.MSBuildTasks.Crm4.Plugins.RegisterSolution
     OrganizationName="$(CrmOrganizationName)"
     ServiceAddress="$(CrmServiceAddress)"
     ServerName="$(CrmServiceServer)"
     Protocol="$(CrmServiceProtocol)"
     Timeout="$(CrmServiceSolutionTimeout)"
     RegisterFile="%(CrmPluginSolution.FullPath)"
     WorkingDirectory="$(CrmServerBinAssemblyDir)" >
     <Output TaskParameter="Duplicates" PropertyName="DuplicatePlugins"/>
   </UKDynamics.MSBuildTasks.Crm4.Plugins.RegisterSolution>

And Here:

<!-- Unregister a Plugin Solution -->
<Target Name="UnregisterCrmSolution"
        Condition="Exists('$(IntermediateOutputPath)PluginRegister.cache')" >
  <Message Text="Unregistering Crm Solution ... " Importance="high" />
  <UKDynamics.MSBuildTasks.Crm4.Plugins.UnregisterSolution
    OrganizationName="$(CrmOrganizationName)"
    ServiceAddress="$(CrmServiceAddress)"
    ServerName="$(CrmServiceServer)"
    Timeout="$(CrmServiceTimeout)"
    PluginAssemblyName="$(AssemblyName)"
    />

  <Microsoft.Build.Tasks.Delete Files="$(IntermediateOutputPath)PluginRegister.cache" />
</Target>

Then it seems to work and you can set any port number you want.


Tags:
Categories: MS CRM4 | MS CRM | MSBuild
Actions: E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed

Getting to grips with Microsoft Team Foundation Server (TFS) and Scrum for Team Systems

February 9, 2010 16:13 by davehawes

This is the first of probably many shorted posts about the stuff I am learning about Microsoft Team Foundation Server and using the Scrum for Team Systems template.

I have just started as a senior developer on a brand new Crm4 project and we are currently setting up all the toys, such as TFS to manage the work. We are using the Crm 4 Developer toolkit, which has also been ‘fun’ trying to make work!

I will write short posts about problems I have and the solution that I use to solve them.

First then is adding ‘Teams’ and ‘Environments’ to the TFS project using the Scrum Template.

I was getting the following error:

“You don’t have enough permissions to complete the import operation.”

 scrum-add-teams

My user account had all the right permissions as per the various forums about the same problem and I was a little stumped.

It turns out that this is a 3rd party webpart which is just an ASP.net application. I decided to try setting the permission right in it’s web.config found here:

C:\inetpub\wwwroot\ScrumforTeamSystem

I changed the identity tag so that it did not impersonate but used an account I knew had the right permission.

<!-- Explicitly apply Trust level and identity impersonation -->
<trust level="Full"/>
<identity userName="<MyWindowsLogin>" password="<Password>"/>

Guess what, I can now add teams and environments. I’m not sure what when wrong to make this necessary but at least I can start adding some proper value to the project now!


Tags:
Categories:
Actions: E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed

Building an iPhone app without a Mac

January 9, 2010 18:50 by davehawes

This article is about what I have had to do, as someone with a Microsoft technologies background, to get setup to write an iPhone app. I ended up getting my Samsung NC10 netbook to dual boot Windows 7 and MacOS X Snow Leopard so I could achieve it.

The first problem that I needed to solve was the development More...


Reflection on my emotions during my LeWeb experience

December 11, 2009 19:41 by davehawes

This article is about my experience at LeWeb and the range of emotions I felt there as an entrepreneur who has invested all the money I have into my own Internet start-up which is yet to make a profit. There were a lot of things that were sweet but also something that left me with a slight bitter taste. I started with high hopes, then taking the rose tinted glasses off and having doubts about the wisdom of what I’m doing, feeling a bit let down until my spirit was re-invigorated by a raw and inspirational talk by one of the LeWeb speakers.

davehawes-at-leweb It was a big week for my company’s websites. My whole team have worked really hard over the last year to create them and we had the honour to be invited by PayPal to demonstrate our http://www.tcbooker.com website, a market place for training courses in the UK, which uses PayPal’s new Adaptive Payments API on their stand at LeWeb..(we’re using Chained Payments if anyone is interested!).

The first thing to mention is how many big name personalities and companies there were at the event. It was opened with a ‘Fireside chat’ with Jack Dorsey, the founder of Twitter. Here is a guy who’s service is currently changing the world and is what every aspiring tech entrepreneur wants to be. He talked about how he created the first version of Twitter back in 2000 using an email dropbox to get messages More...


Tags:
Categories: Conference | LeWeb | paypal
Actions: E-mail | Permalink | Comments (3) | Comment RSSRSS comment feed

Coding for Charity @ CharityHack ‘09

September 22, 2009 13:11 by davehawes

I signed up for this Paypal event 5 weeks ago when I first saw it on Twitter - CharityHack. I thought it was going to be a couple of days of workshops where Paypal show developers how to use their new Adaptive Payments API…. how wrong was I!

The penny only dropped More...


Tags:
Categories: C# | charity | hacking | paypal
Actions: E-mail | Permalink | Comments (4) | Comment RSSRSS comment feed

Using CAPTCHA in the physical world

August 27, 2009 11:27 by davehawes

One thing that I have had to do over the last year is to hire people to help build by websites. Anyone that has been in the hiring position will know the pain that follows placing an advert… the deluge of CV’s which are generally very poor quality. I was discussing recently with some colleagues the filtering technique for applicants I use which has been very successful for me. It was pointed out to me that I was essentially implementing a CAPTCHA system – but in the physical rather than virtual world.

The idea is More...


Talking about my websites @ The Skiff in Brighton and a reflection on working for The Man

July 28, 2009 01:03 by davehawes

It was 2 weeks ago now but I had the privilege of giving a 20 minute talk at the £5 App event in Brighton.

My slide deck of the talk will be at the bottom of this post for download if anyone is interested. The event was recorded by Ian Ozsvald and posted on his blog as well as the £5 App website.

I talked about quitting my job and hiring a small team to help develop the websites I had created into something with more quality and could be a commercial success. I wish I had had a little more time as I didn’t get do demo any of the functionality but it was great to be able to talk about them! The websites are http://www.skillbook.co.uk http://www.safetytrainingnetwork.co.uk and http://www.trainingcoursebooker.com .

On reflection there was one point which I wish I had made. I have spent most of my career working for large companies which we can call ‘The Man’ and at the talk I was congratulated for ditching ‘The Man’ and doing my own thing. However this implies that working for ‘The Man’ is a bad thing and this is where I wish I had made the following point.

In my opinion More...


When explicitly binding asp:ListView the first item’s EditItem == null in the ItemUpdating event

July 27, 2009 22:51 by davehawes

I have just had one of those weeks where nothing seems to be simple, now finally after countless hours of head scratching I think I have a solution to a problem that has dogged me for over a month now.

I am using an asp:ListView on the Online File Store of my http://www.skillbook.co.uk website (check it out, it’s free to sign up to!!). I decided to explicitly bind my data to the control rather than use the <%# Bind(“”) %> syntax for reasons that are not important. During testing we had reports that when saving an edit of the first item in a page an exception was being thrown the good old ‘object reference is not equal to an object’.

Back on the Dev environment I could not reproduce it. On the internal server I could not reproduce it. On the live server it was falling over like my 5 week old baby trying to stand when I clicked save.

I have found other people with this problem:

http://forums.asp.net/p/1275744/2424258.aspx#2424258

http://www.ureader.com/msg/14254035.aspx

but no solution. With the pressure on to fix this in the live environment I have finally found a solution that seems to work, and I’m afraid that it is phugly code.

With the listView.EditItem == null the answer for me was just to get the item out of the ListView using the index that is sent through as part of the ListViewUpdateEventArgs.

So instead of:

                 ASPxTextBox txtName = (ASPxTextBox)listView.EditItem.FindControl("txtName");

It becomes:

                 ASPxTextBox txtName = (ASPxTextBox)listView.Items[e.ItemIndex].FindControl("txtName");

 

I really hope this helps some people out there!


Tags:
Categories: ASP.net
Actions: E-mail | Permalink | Comments (2) | Comment RSSRSS comment feed