Posts Tagged ‘Design’

  

Inspiring Great Design

I recently acquired a design tool – a set of IDEO method cards, where each card presents a design approach or a method of gaining inspiration. IDEO’s design philosophy is to keep people at the center of the design process, and the four categories they divide the cards into reflect this:

Ask people to help.
Look at […]

Organizing Information: Using Tags versus Categories

I recently upgraded WordPress - the software that runs this site - to version 2.3. New in this latest version is support for tags. Each post can be associated with any number of keywords or key phrases called tags, and navigation elements can be added to display the set of tags. Probably the most commonly […]

Designing for Deployability

In my previous article Architecting for Deployability, I wrote about the importance of deployability - how reliably and easily software can be deployed from development into the production environment. To accomplish this, one approach I recommended was to encapsulate differences between environments to isolate them from the majority of the application, and thus simplify deployment. […]

Error Handling and Reliability

I have been thinking a lot lately about how to create reliable systems. I previously examined the link between complexity and reliability. Recently, however, I have come to appreciate the impact of error handling on reliability. For the purposes of this discussion, I consider two aspects of reliability: correctness - does the application produce the […]

The Reuse Trap in Software Design

I stared at my code on the screen, but inspiration wouldn’t come. I was trying to design a new feature which shared some commonalities with the existing code base. In particular, there were a couple classes that I knew I could reuse. I just wasn’t sure how they would have to be modified because I […]

Fail Fast or Degrade Gracefully?

There are two approaches to handling internal application errors. In the fail fast approach you immediately terminate the operation (or even the application) once an error is detected. In the degrade gracefully approach you try to continue with as much of the operation as you can.
For quite a while I have been a firm proponent […]

How to Write Good Unit Tests

My previous post on How to Create Maintainable Software talked about the importance of automated testing. Working with automated test suites over the years, I’ve found that creating good tests is a skill that needs to be developed. I’ve seen many cases of unit tests that I’d consider poor or bad due to a number […]

How to Create Maintainable Software

My previous article talked about the importance of maintainable software. In this article I provide some recommendations on how to create software that is maintainable - easy to change with minimal risk and impact.
What are the specific challenges facing developers maintaining software?

They probably did not originally develop the software, and may not even […]