Sunday, May 17, 2009

Thorough architecture-- remember testability!

When architecting software, be sure to document which test utilities you anticipate will be needed to validate your application.

Think about each operational step that is required-- then think if you had just performed that step, how would you be assured everything went well?

As an example, let's pretend you've just architected an application that should help you load some data to a backend data store (maybe a database, maybe an indexed file system, maybe something else)
  • How would you be sure the data you've loaded is really there?
  • How would you be sure it's *all* there?
  • How do you know it's available?
  • How do you know it wasn't mangled in the process of loading it?
  • Can you access it from all the places you need to access it?
If I were the operator charged with running these processes (loading the data), I'd want some sort of script I could run to make sure the data got where it was supposed to go. The time to think about this is in planning your architecture-- thinking of such things will lead you to consider the needs of your stakeholders and will give you insights into parts of your application you may have overlooked.