Category Archives: General

Scrum, Test-Driven Development, Refactoring and what’s next

It struck me that I’ve been a little quiet of late – I have been rather busy travelling and looking after Cameron!

A few things that I’ve been up to of late:

  1. Adaptive Project Management using Scrum. There is a slide deck here.
  2. Improving Application Quality Using Test-Driven Development. There is a slide deck here.
  3. I’ve run my refactoring session twice now. There is a slide deck here.

I’m also busy working on articles/editorials covering these subjects:

  1. Desktop Development. An editorial-style piece about 2005 being a good year for developers. It will cover “what’s happening to Visual Basic 6” as its primary thread and will touch on Delphi 2005 and Chrome, both of which will have a big impact during 2005!
  2. Product reviews of AutomatedQA’s AQDevTeam and DeluxSoftware‘s Delphi to C# translator.
  3. Using Really Simple Syndication (RSS) To Improve Corporate Communication
  4. Integrating With The Office Research Pane
  5. an unplanned piece on the Visual Studio Tools for Office (VSTO)

14th May 2005 – DeveloperDeveloperDeveloper!
I’m also working on two sessions for Microsoft’s DeveloperDeveloperDeveloper! . I’ll be delivering two sessions: An Introduction to Test-Driven Development and Refactoring in Visual Studio 2005. Amongst many others, Phil, has written a good piece summing up what’s going on!

Writing articles, presenting and user groups…

During January 2005, I co-chaired a meeting that, amongst other things, discussed writing articles and giving presentations. In particular, we were looking at the issues folks have with education and learning techniques.

The discussion arose because folks are happy to flick through articles and attend presentations, but when asked to either write or present themselves, it’s a different ball game. All sorts of reasons were tabled, including: “I don’t know the subject well enough to stand up in front of a group”, “I was never good at writing at school”, “I can’t write 3000+ words” or “I don’t have the tools (software) required to write and prepare an article or presentation”…

This is a shame. A real shame, because more often than not, the developers at the coalface have the most to pass on to their peers.

Articles don’t have to be “full length”, nor do they need demonstrate a complete mastery of the subject: if they demonstrate a technique, highlight a pitfall or save a fellow developer time, then they are of use.

True, there are some authors who write articles because they know the subject inside out, however this shouldn’t stop you! I believe that writing an article (particularly the fact that there is a deadline) focuses the mind considerably. Once you have written your introduction and [possibly] your conclusion/summary, you now have a start and end point: it’s possible to write the “middle” or body of the article in a series of small steps.

Whilst I’m on the subject of articles, I recently delivered a presentation about Writing Technical Articles: hints’n’tips – read more about it here.

Everybody has different presentation skills and techniques. For example, some prefer to use slides (PowerPoint) as their primary delivery mechanism, whereas others prefer to have as few slides as possible and concentrate on their own wit and memory to get them through – these sessions can be good fun, the presenters often spending a lot of time “in the IDE” (for development-oriented sessions).

Call me old fashioned, but I do like my PowerPoint “slide deck”: if anything, it gives me a sequence of steps to follow. One thing that I have learnt over the years is to avoid including code in my slides. Including code in the slide deck instantly means more work to change the slides should the session be re-run for a different language. This is my recommendation: make slide decks language agnostic. Of course, when I say “language” I really mean programming language!

If you think that slide-less sessions are only for the experienced presenter, think again. It’s very likely that you have a “top-tip” that would benefit your peer group in some way. I’ve seen sessions run for over an hour with a page and a half of A4 as notes: once you’re up in front of friendly peers and start to describe your problem, how you solved it, etc. time flies.

“I’m frightend that I’ll not be able to find 60 minutes of content!”
Presentations don’t need to last 60 minutes; they don’t need to last 30 minutes: burn-out is almost a myth – rarely have I seen presenters try to fill a 60 minute slot with 10 minutes of material…and last 10 minutes. It’s usually the other way around, too much material, not enough time. Don’t let this put you off, if you have lots of material, but you don’t want to run for 60 minutes, break the session into two smaller sessions – user groups will appreciate you coming back for a second session either later that day or at another conference later in the year.

If you are using slides, I used to aim for about 1 minute per slide…now I aim for 3 minutes per slide. This means that a 60 minute developer-oriented session requires 20 slides; this includes “non-content” slides such as the title, closing slide, questions, jump to demo, agenda, etc. Your mileage may vary, try to work out a ratio that’s good for you.

Tools (software)
Writing and preparing presentations doesn’t require very expensive software. I use the following applications on a regular basis: Microsoft Word, although Notepad will suffice. PaintShop Pro, PowerPoint. Obviously if your article or presentation is about a development language you will need to use that too!

I use the screen capture and cropping capabilities of PaintShop Pro: editors like screenshots to be focused on a primary topic, they don’t need the Start menu or system tray included in the capture! PowerPoint can be handy for creating diagrams: it has a useful ‘save slide to GIF’ option in the SaveAs menu (do remember to crop the image as PowerPoint saves the whole slide!)

Notepad is a great little “paragraph editing” tool. Often, when I’ve written an article I read over it and don’t like the way a paragraph reads. I copy the paragraph into Notepad and then make each sentence a paragraph in its own right (i.e. double carriage return at the end of each sentence). This lets me work on each sentence in isolation. I can gradually pull the original paragraph back together. This trick also works for those articles that are “word length limited”, i.e. must be 950 words plus/minus 10. Breaking a paragraph out, re-wording it, then putting it back together again can reveal paragraphs that are using too many words to say too much or even too little!

Finding an audience
So maybe I’ve convinced you to part with a few paragraphs of text or even pushed you into presenting a short session?

Who publishes short articles?

Who accepts short presentations?

Who can support me and ensure that my article(s) and/or presentation(s) are delivered in a group of friendly peers?

The answer is easy: your local User Group/Community (or may be not so local! User Groups are usually very happy to have ‘guest’ speakers and authors from other parts of the country!) Indeed, cross-cross-pollination between user groups is something that I believe should be encouraged: we’re all one team, trying to help each other wherever possible.

Where can I find my local User Group/Community?
Well, if you are in Scotland, a good place to start is the Scottish Developers Web Community.

Elsewhere in the UK, there are (as of 7th April 2005):

Developer Fusion
Digital South Yorkshire
Harrogate Digital Forum
London .NET
Scottish Developers
The Access User Group
The Developers Group
The London Database Developers Forum
The Scottish Small Business Server User Group (SSBSG)
The Thames Valley User Group .NET
The UK SQL Server Community
UK Exchange Server Professionals

I’m sure that there are more, if you are a user group leader, let me know and I’ll update the list.

Another excellent source of user group informaton, and one that the list above is based upon, can be found at Microsoft’s Developer Community web page, or here at Sun’s Java User Group web page.

Writing Technical Articles

I gave a presentation to an enthusiastic bunch of user group leaders today.

The presentation was about how I set about writing technical articles, it gave a series of hints’n’tips relating to such things as:

  1. Structuring an article (I recommend writing the Intro and Summary first)
  2. Page Layouts (column-based publications do mean writers have to spend a little time thinking about how much code they include and the size of screenshots)
  3. Common English Language usage pitfalls

Despite me being totally de-hydrated, the session ran on time!

The slide deck is available here.

My session was followed by the editor and publisher of DNJ Online – Matt gave a session about the process of sub-editing, contractual issues, libel, copyright and a whole host of other areas authors should be aware of. Amazingly, Matt and I didn’t talk to each other prior to delivery of our sessions; equally amaziningly, our sessions complemented each other rather well 🙂

Alex Homer is coming to Edinburgh

Excellent news, Alex Homer (of ASPToday, Wrox Press and Addison-Welsey fame) is coming to Edinburgh on the 12th of April 2005. Rumour has it, Dave Sussman might be there too! Alex and/or Dave will be presenting at the end of the first MSDN Roadshow day.

Take a look at what Scottish Developers have said about it here.


On Saturday I played my first ever game of paintball, with my VBUG buddies, Graham, George and Geoff (the 3Gs?)

I have to say it was rather enjoyable and I would go back, despite feeling rather sore the next day!

Sadly we made a tactical error, we split ourselves over two teams. Clearly a group of four would have made for more tactical play, even though we mixed a Delphi-head with the Visual Basic-heads!

The day started at about 1000 and ran to about 1600ish (I left at 1500). I played 5 games out of a probable 7.

The Bedlam organisation was good: there are seven play zones or battlegrounds each about 100m long by 30m wide. Our instructor was Chris, he knew his stuff and made sure we all enjoyed ourselves.

Boy, those pellets hurt! They don’t taste very nice as I discovered! (despite a face mask, a pellet still exploded and made it to my chin!)

Kudos to Graham for suggesting paintballing!


Microsoft Most Valuable Professional (MVP) Award

I would like to thank all those who nominated me for the Windows Server System – XML Web Services Microsoft Most Valuable Professional (MVP) Award.

I received notification of the award this morning.

I will of course, continue to serve the development community during 2005!

If there is anything you would particularly like an article or presentation about, or if you would just like to chat about your development issues, please drop me an e-mail (via, at the bottom)

How much pressure is required to make somebody more productive?

Michael has written another great post here. I don’t want to steal his thunder, so please go read his post (it’s an excellent read), then read my thoughts below!

Earlier this year a good friend and colleague was discussing (with my boss) the idea of increasing workload and the pressure required to improve/increase productivity. Working out just how much more work an individual can cope with is difficult and is one that Michael covers in his post. Too much work and the individual goes in to shutdown mode, too little and they procrastinate.

Whilst I agree with increasing a person’s workload, it’s important to consider the unseen work they might be undertaking. For example, and I don’t wish to blow my own trumpet, I put in a lot of hours for my employer (more on this in a moment) and I put in a lot of voluntary hours writing/presenting for Scottish Developers, the Developers’ Group and Agile Scotland, amongst others.

I’ve recently seen my employer’s workload increase, particularly the amount of travel has increased. This has meant sacrifices elsewhere: writing takes time and inclination, without both, writer’s block is very common. After a working week involving a lot of travel and 6-8 hours of working time each day too, one doesn’t really feel up to firing up the laptop to start work on articles and presentations!

Earlier in this post I mentioned that I put in a lot of hours for my employer. I put the hours in just to get the job done: and I try my best to make sure it’s a “good job, well done” too. I’m sure that I procrastinate, who doesn’t? I’m sure that I sometimes take longer to complete a task than the next person, again who doesn’t? What I have noticed however, and this is a general observation, not specific to any organisation, is that there are folks out there who take a long time completing what should be a simple task. Of course, there are similar folks who can complete the same simple task in a much shorter time-scale than was ever expected.

Productivity comes through “getting on with it”, it comes with the realisation of “task completion”: the more tasks that an individual completes, the more productive they should become. Ultimately, the individual will set their own threshold. For productive individuals, this will be easy and should require no outside involvement, which, IMHO, is a bad thing: outsiders shouldn’t try and alter individuals thresholds unless the individual concerned is the worst kind of procrastinator, the kind who never finishes anything.

The Best of Delphi 2005

the best of Delphi 2005
On the 29th of November 2004 I will be speaking at The Best of Delphi 2005: an event organised by The Developers’ Group.

The event takes place here: 1 Whitehall Place, London, SW1A 2EJ and starts at 0900 – be there!

The full agenda can be found here.

I’ll be speaking about two subjects: refactoring and XML Web Services.

I don’t know about you, but I’m a lazy coder: I like my IDE to help me as much as possible. I used to be happy with simple stuff like indenting or “outdenting” blocks of code. Then along came code completion, heaven! Naturally I crave for more, more productivity gains, more guarantees that the code I write is syntactically correct and it is consistent.

The refactoring support in Delphi 2005 provides such guarantees: no longer do you have to rely on cut’n’paste to move chunks of code around (many a customer-facing error has been made with “cut’n’paste”!).

Use Refactoring To Move From Win32 Delphi to Delphi 2005
Moving your application from one version of Delphi to another is never quite as easy as it looks. Even more so if it’s from Win32 Delphi to Delphi for .NET!

Consider a legacy Delphi 5 application that was written around the time Delphi 5 was released. Like all code that was written “a while ago” (a couple of weeks ago in my case!), you probably look at some old code and think: “did I really write that?” and/or “I haven’t a clue how that piece of code actually works”. If those quotations ring true for you, Delphi 2005’s refactoring (and unit testing) is something you should be very interested in: refactor what you don’t understand.

Delphi 2005’s refactorings will let you re-write (alter the design of) your old code whilst preserving the functionality. Similarly, if you don’t understand how a piece of code works, Delphi 2005’s unit testing will let you write tests to “surface” an understanding.

If your application doesn’t use any third party components, then moving from say Delphi 5 to 6 or 5 to 7 is probably the simple matter of a recompile, perhaps with one or two minor code changes.

However, if your application uses third party components, your move to a new version of Delphi typically will involve an upgrading those very same components! And this is where it can get a little hairy. My experience has shown that moving a moderate-sized application from Delphi 5 to Delphi 7, whilst taking into account a raft of third party component upgrades, sparks off the need to re-test and often re-write large parts of the application.

Similarly, moving from Win32 Delphi to Delphi 8 or Delphi 2005 also necessitates that your application is retested after the move.

It is for reasons like these that Borland have incorporated two features into Delphi 2005: refactoring support and unit testing via NUnit. Refactoring brings with it the productivity gains we are all looking for and NUnit provides us with a means of ensuring that the refactoring hasn’t broken anything. Refactoring and unit testing are made for each other: I will cover refactoring during my session and Dr.Bob will cover unit testing in his.

Attend this session if you want to learn how to be more productive within the Delphi IDE (Win32 or .NET), how to be more responsive to your customer’s [changing] needs and how to bring your application to market faster thus encouraging an early return on investment and realising profit sooner rather than later.

XML and Web Services
Between Delphi 6 and Delphi 2005, the bottom line functionality of Delphi’s support for protocols like the Simple Object Access Protocol (SOAP) and web services hasn’t really changed very much. Granted, there have been bug fixes and upgrades to support newer versions of World Wide Web Consortium (W3C) standards, but if you look at the applications that can be created using Delphi, not much has changed.

So why spend 45 minutes talking about it?

Well, there are plenty of good reasons, least of all:

1. Delphi 2005 could be the version you have been waiting for: a lot of folks follow “odd numbers”, Delphi 3, 5, 7…Delphi 2005 is the next logical version. If you plan to adopt Delphi 2005, and you are coming from Delphi 5, then it is possible that your Delphi 2005 application architecture will need to involve web services.

2. Delphi 2005 could be the version that you plan to “migrate to .NET” with. You’ll need an understanding of what’s in .NET that can help you: this session will provide you with an understanding of how to integrate your application(s) using .NET’s XML support and will show you how to interact with other applications running elsewhere on the Internet.

Building applications that rely on web services to serve up their functionality might sound odd. However, think about how your existing applications are architected: you probably use “layers” or abstractions to shield GUI functionality from database access functionality, for example.

Building an application using web services instantly gives you a layer of abstraction: you can implement functionality once, and then use it from a GUI client application, and web client application or even a mobile device – anything platform that is capable of consuming a web service could potentially become a user of your application.

This suggests that your application could be used in more remote locations….increasing the return on investment and bringing your application into profit much sooner.