Monthly Archives: November 2009

Is software development like construction?

I often find myself explaining software development in the veign of construction, especially because my job title is “Architect” and therefore most people automatically assume I use CAD to draw housing designs all day.

It’s not a perfect model, and not intended to be the explanation for all projects, but this did get me thinking about other parts of the construction business. What about other roles?

Disclaimer – I don’t work in construction, so please excuse any faux pas in assumptions about terminology or process 🙂


Architect [Solutions Architect]
This is my role. The key skills here are the overall “vision” and solid grounding in all disciplines. You don’t have to be a master of all trades (although it obviously helps) but the main thing here is being able to see the “bigger picture”.

An architect needs to be able to understand what the client wants, and bring together all elements of the requirement to create a design that provides what they want on the budget that is available.

An Architect requires enough technical knowledge to be able to provide options, direction and advice.

e.g. “the design is a 5 bedroom house with 3 bathrooms. I know enough to tell you the walls / fittings of each room, and how much floorspace you need, and what the best fit is between technology and practicality”.

SME Engineers [Technical Architects]
These are the subject matter experts. They have years of experience in a specific area (e.g. Plumbing, Electrics, Foundations) and are masters of their trade.

Typically involved in larger projects or for short technical consultation engagements.

e.g. “from the design I recommend you need X strength re-inforced steel beams” … “you will need N-feet of wiring and a specific type of fuse and junction box”

Note – On smaller projects Technical Architects will often take the same role as Technical Leads.

Foreman [Development Technical Leads]
These people know their trade well enough to know how to do a good job, and are also natural team leaders. They make sure that the labourers do the right work, and to the right standards, according to plan.

They are also capable of recommending solutions to problems “on the job”.

e.g. “the current design doesn’t work, but I know it will if you move that window 3-feet to the right / change the materials”

Note – On smaller projects Technical Leads will often take the same role as Technical Architects.

Labourers [Developers]
This is where the actual build gets done. You will have the people who do the same jobs on each project. They are good at it and fast too. Because they do this all the time, the chances are they will actually be quicker than the Architects / Engineers and Foreman too!

You will also have in this category the less experienced apprentices (Junior Developers) who are learning on the job.

e.g. Brick Layers / Plumbers / Plasterers / Electricians

Project Managers
These people spend their tmie making sure that scheduling is on track and keeping touch with the client. They make sure that everything happens at the right time and in the right order.

If the cement doesn’t turn up, or the wrong type of window frames have been ordered then it’s usually the Project Manager’s fault.

You always have consultants, but the distinction between a consultant and another SME (such as Engineers or Architects) is that Consultants provide consultation for the client.

This is not always the case (consultants have a valued place for internal engagements and aiding the project team too!) but generally the main focus is to help the client to understand the requirements, the solution and to provide that much needed face for clients to ask technical questions (and get a lamens response).


I thought this was an interesting excercise, and certainly helps me to explain what I do to people in a way that they can understand. So few of the great-unwashed masses understand software development, at least this means I don’t need to say “I work in IT” and leave it there 🙂

Of course, some people tend to wear multiple hats and do lots of different jobs … but it also helps to describe in context (just because you are a “Developer” doesn’t mean you can do SQL, C#, CSS and XSLT … in much the same way you wouldn’t expect a builder to be able to do brickwork, plumbing, electrics and plastering!)

How do you present CAPTCHA accessibly?

Following on from my presentation this week on Building an Accessible SharePoint System I had an interesting query from one of the attendees regarding accessible CAPTCHA methods.

For those who haven’t come across the term, CAPTCHA refers to the method of challenging users with a query that a human could pass but computers cannot (typically represented by images that display distorted text).

The query related directly to accessibility, and specifically how would you achieve CAPTCHA methods in an accessible way?

CAPTCHA themselves have the following statement on their website:

“CAPTCHAs must be accessible. CAPTCHAs based solely on reading text — or other visual-perception tasks — prevent visually impaired users from accessing the protected resource. Such CAPTCHAs may make a site incompatible with Section 508 in the United States. Any implementation of a CAPTCHA should allow blind users to get around the barrier, for example, by permitting users to opt for an audio or sound CAPTCHA”

This of course does not account for users who are both visually impaired and audible impaired (for example, a user who was both blind and deaf).

The solution to this could include a number of workarounds, including mathematical questions (“what is one plus two?”) or more “natural language” queries (“What is the colour of the sky on a clear day?”) but these could also present other problems.

Firstly generating enough of these prompts to disrupt predicting the responses to them would be problematic. You then have to consider cultural and language barriers, as well as other impairments such as textual or numerical dyslexia.
It’s certainly a difficult topic and one that is a challenge to get right without either leaving your site in an inaccessible state or leaving it open to programmatic mis-use.

To find out more about CAPTCHA you can visit the CAPTCHA Website or the CAPTCHA Wikipedia article.

Building an Accessible SharePoint System – Slide Decks, Source Code and Downloads (SUGUK London – November 25th)

First of all a big thank you to everyone who attended the session, and many thanks to Chris O’Brien for his presentation on ECM in SharePoint 2010 and also to Matt Taylor for pulling the strings behind the scenes and getting it organised!

You can find links to all of the Slide Decks and Source Code that was used in the Building Accessible SharePoint Systems session below.

There is loads of material, with links to all of the tools and websites I mentioned including the Disability Discrimination Act, the WCAG 2.0 and WAI ARIA guidelines, the new online SharePoint 2010 SDK and the ASP.Net 4.0 Whitepaper … plus links to all of the tools that were mentioned.

The slides also include notes on each of the topics and the demo notes refer to the source files that were used in the demo!

In the mean time if anyone wants to contact me with any questions feel free to use the medium of your choice:

Twitter: @MartinHatch

Cheers, thanks for coming and hope to see you all again soon!

Let me know if you have any trouble accessing them.

Otherwise you can get the individual files below:
[Update – some of the links were broken before – fixed now!]

Thanks again!

Why I chose Blogger?

I’ve already had this question asked to me, and my blog only moved yesterday! Why did I move from the “Microsoft” Live Spaces to the “Google” Blogger / Blogspot?

Unfortunately it was depressingly simple. I got fed up with the lack of features on Live Spaces. My more popular posts were being flooded with spam comments, I had no way of changing the URL (even within the spaces namespace, let alone use my own custom one!) and I was quite limited in terms of available templates.

The main features I like with Blogger are therefore:

  • Moderation of comments and support for blocking “bots” from posting comments
  • Ability to control comments on a post by post basis!
  • Ability to control URL
  • Support for custom domain names
  • Complete control over HTML template / colours / styles
  • Multiple {Tags | Labels | Categories} per post (why does Live Spaces only allow 1??)
  • Better post navigation (tag clouds and tree-view for post archive)
  • Improved analytics (or .. more accurately Google Analytics, which I probably could have used on Live Spaces but the built-in statistics for Live Spaces are extremely poor). 
  • Improved Text Editor for posting new posts (better paragraph / styling support, ability to post an older publishing date and AutoSave is awesome!)

In the end it seemed like a no brainer. I’ve been putting it off mainly because I didn’t want to have to go around updating all my links (plus my Google and Bing rankings will probably takes ages to catch up again).

But now I’ve taken the plunge I’m much happier, just got to put some elbow grease into getting it ship-shape in terms of styling and links (not to mention plenty of new posts too!)

New Blog Launched!

This marks the birth of my new blog; 🙂

I’ve still got some styling work to do (so you can expect that to change yet!) but otherwise have my brand new shiny blog.

It’s powered by BlogSpot/Blogger (a.k.a. Google) and if you were wondering why, it’s because I get more finite control over the layout, I get better reporting (Google Analytics) and I can have my own domain name 🙂

So come, enjoy and be merry!

SharePoint 2010 and Office 2010 Beta released!

Yep, Microsoft have got slightly ahead of expectations and the official public beta release of SharePoint 2010 and Office 2010 is now out (although you need a TechNet or MSDN subscription at the moment!).

You can find the download information as well as more details on the relevant websites:

For those of you who have access to the Technical Preview of SharePoint 2010 you can expect to see quite a few changes and improvements in the beta version. For those of you who haven’t seen either, you’re in for a treat!

How to add a Lookup Field to your List dynamically and programmatically

This is an old old problem, and for Content Types it has been easily realised that this can be solved by using a Feature Receiver and creating the lookup through code (to set the lookup list GUID .. something that you cannot do through CAML).

The biggest problem with Lookup fields is with List Definitions. You can still add the Lookup Field to your schema.xml, but it won’t do anything without knowing which list it is supposed to lookup to so you typically end up with a field that doesn’t work.

Now you can get around this IF you know the URL or the ID of the field you want to lookup to, but most list definitions that you release can be created anywhere so this is very rarely possible. Now .. in my particular example, we wanted the Lookup to lookup to itself! In this case, there really isn’t any URL or method through the schema.xml that we can use for this, and managed code is the only route … the main problem there is that there is no “ListAdded” event that you can trap when your list gets created … but then I had a spark of inspiration!

The solution was surprisingly simple and came in a bit of a eureka moment… SPListEventReceiver “OnFieldAdding” event.

You can bind in event receivers using a variety of methods (not covered here) but for my example I bound it into the schema.xml as part of my list definition (so this code only ever executes when the list is created).

The “OnFieldAdding” event then executes every time a new field is added to the list, and this includes fields provisioned from the schema.xml! All I then needed to do was identify the field (which I could do easily because I knew the Field ID) and then I could use managed code to manipulate the SPField object and fill in all the blanks that I couldn’t do from the schema.xml!

I really like this method, as it has opened the door to a way of executing code on a list when it is created. Now I admit it’s not exactly bullet proof because it potentially executes the code a LOT of times (although ideally you would remove the event handler once you’ve finished executing what you needed to), but it was a really nice “other option” .. and certainly one I hadn’t considered before!

NewSID is dead.. duplicate machine SID no longer a problem?

Well, this one was gob-smacking! A colleague of mine (Tristan Watkins) pointed me at this article from Mark Russinovich, the developer of the “NewSID” tool that so many people use for creating a new machine SID for a machine (typically after a re-image or copying a virtual machine).
Well, it seems we don’t need to bother anymore and never really did, at least in the vast majority of cases!
It’s a little surprising that the SID duplication issue has gone unquestioned for so long, but everyone has assumed that someone else knew exactly why it was a problem. To my chagrin, NewSID has never really done anything useful and there’s no reason to miss it now that it’s retired.
To read more, go check out Mark’s blog post here:
Update – A good follow up summary has also been written by one of my colleagues, Tristan Watkins.

Presenting at SUGUK London 25th November

Yep, I’m taking the plunge and finally presenting publicly 🙂
I’m going to take the stand to talk about Developing an Accessible SharePoint System based on our experiences in designing and building the Intranet and Website for the Royal National Institute for Blind People (RNIB).
I’ll be going into technical detail about development techniques for customising the front-end and back-end interface of SharePoint, as well as some of the more rounded issues around accessibility (such as the age old "accessibility versus compliance" discussion).
I’ll also hopefully get the opportunity to show off our new SAS (SharePoint Accessibility Solution) framework and show the audience an example of a WCAG 2.0 AAA system running on MOSS 2007.
Please feel free to come along (assuming you are in the London area on November 25th, arrive 6:00pm for a 6:30pm start!). It’s free to attend, and Microsoft usually do a good show by providing free pizza, tea and coffee! 🙂
You can sign up at the SUGUK forum thread here:
Look forward to seeing you there!