Tim Murphy's .NET Software Architecture Blog

February 2014 Entries

How Software Architecture Is Like Photography

Camera20140226 (11)_1

I have found over the years that many of the IT people that I work with have photography as a hobby.  Recently I stopped and realized how similar the skill of a good architect are similar to those used in photography.  Below I explore what I see as common traits.

First and most important to both endeavours is the ability to see both the big picture and the details.  Photographers observer both the individual subject such as a bird and the surroundings that it is interacting with.  A beautiful bird alone can make an impressive picture, but if you capture it in an unusual place or interacting with other animals the interest increases exponentially.  Likewise you may look at one business problem to be addressed by a software system and solve that problem, but if you can put it in the context of the overall business process you can greatly improve the way a business operates.

You need to look at things from different angles.  In photography you may look at a subject from above, below or even behind in order to find a more interesting view.  With business problems we will look at it from different users’ perspective in order to make sure that we are taking the most important use cases into account.  Likewise we will look at different technology solutions to address the business needs in order to handle usage scenarios and volumes.  In order to more easily see these different angles you need to explore different techniques.  Spend time when you are not on a project experimenting with proof of concepts, new technologies.

Tools aren’t everything, but they do make a difference.  If you have a camera phone (who doesn’t?) then you can capture a wide variety of images, but if you want to optically magnify an image or change the how much of the subject is in focus then a camera phone just won’t do the job.  Likewise languages like Javascript are very good a general functionality, but if you need high performance or need to talk directly to the hardware you need a more appropriate language and associated tools.

This is just a generalization of the skills you must acquire to be a good architect.  Add these to your toolkit and continue to find ways to improve your projects for your clients.