Software Design

The Proposal Design Pattern

I've finally finished a write up on the Proposal Design Pattern. This design pattern was originally presented in the November 1997 issue of Object Magazine, and hasn't really been seen since. I've been intending on writing this for some time, but the words never seemed to flow - until now.

The essence of the pattern is that real world “changes of state” are almost always agreed upon by accepting a proposal of that change that has been prepared in advance.

Read more ...

Locality Counts

A friend of mine recently sent me a link to an interesting article "Not Your Father's Von Neumann Machine: A Crash Course in Modern Hardware".

One of the interesting elements discussed in this article is the relative cost of memory access. An access satisfied from L1 cache (closest to the processor) might take just 3 clock cycles, but an access requiring access to main memory might take 200 clock cycles.

That's a massive difference in performance.

Want to get more done, faster?

Situated Geekery
Several of the tips that I included in my recent user group presentation Towards Maintainability were oriented towards improving the quality of the code - making it easier to understand, safer to modify, and so on.

A recent post How TDD and Pairing Increase Production on the Situated Geekery Blog is making a similar point, though from a different perspective - that of increasing productivity now rather than maintainability later.

Defining Polymorphism

Saw an interesting question on StackOverflow today: Polymorphism - Define In Just Two Sentences

Reading the answers, it seemed to me that everyone was getting bogged down in the technical aspects, and was missing the essential point of the term.

Of Colour and Presentation

The careful use of colour – of hue, saturation and lightness – can improve a user interface greatly.

Sometimes the best use is to avoid distraction, allowing people to concentrate on differences that matter; sometimes the best use is to add information, revealing differences that were previously hidden.

Mark Miller (of DotNetRocks and DevExpress fame) spends a lot of time focussing on this area, treating it (rightly, in my opinion) as a competitive advantage.

Real World Information Modelling: Naming

Despite the growing maturity of our industry, there are some mistakes that seem to be repeated by each new generation of developers.

We have good technical standards for how we document our information structure – from good old Entity-Relationship diagrams through to the UML. There are even some attempts to provide general guidance on information modelling – the Nebulon Archetypes aka Colour Modelling are one good example – but in too many ways the lessons learnt by one generation of modellers are left for the next to learn anew.

Validation and Domain Driven Design

I read an interesting blog post today from Justin Etheredge talking about how Validation should be handled in the context of a system using Domain Driven Design principles.

Single Reponsibility Principle

I have a draft post explaining the Single Responsibility Principle that I've been working on for the last couple of months. I've just never been able to find a simple way to explain it that's not open to misinterpretation.

I'm going to have to junk that post completely, because it's now obsolete.

Check out this explanation, put together by Brent Brown and posted by Jarod Ferguson:

srp1.jpg

Brilliant!

Giving your Application a voice

No, I’m not talking about using speech synthesis to abuse your users when they make a mistake – though the idea has merit … I’m instead referring to a blog entry written by Oren Eini back in August.

Oren made the suggestion that your application should have a blog – a place where it can post informative messages about normal operation and abnormal conditions.

A Server out of Space

This morning I discovered that our StarTeam server was being uncooperative – refusing to accept check-ins because of a lack of available storage space.

Users were receiving this message:

space.png

A quick look at the appropriate network share revealed plenty of space – while the hives were configured to use up to 99% of the available space, the share was only 86% full.

Weirdness.

Delving into the log file, I found this message (formatted for this post):

On Thresholds

I had a production system go down this week - one minute no problem, the next, critical functionality stopped working.  Worse, it didn't die because something broke - it went down by design. And did so without warning.

Fail Loudly

The premise that systems should "fail fast" is pretty well established - the idea has it's own wikipedia page, and any number of books talk about it as a fundamental premise.

For example, Release It! from the Pragmatic Bookshelf makes several references to Fail Fast in Chapter 5: Stability patterns.

Working with WPF

Recently, on one of the mailing lists I read, someone wrote:

With WPF, I see development and training time being bumped up (at least) a notch or two for no reason other than having a flasher UI.

I thought it worth sharing my response ...