Is software development like construction?

I often find myself explaining software development in the veign of construction, especially because my job title is “Architect” and therefore most people automatically assume I use CAD to draw housing designs all day.

It’s not a perfect model, and not intended to be the explanation for all projects, but this did get me thinking about other parts of the construction business. What about other roles?

Disclaimer – I don’t work in construction, so please excuse any faux pas in assumptions about terminology or process 🙂

——————————

Architect [Solutions Architect]
This is my role. The key skills here are the overall “vision” and solid grounding in all disciplines. You don’t have to be a master of all trades (although it obviously helps) but the main thing here is being able to see the “bigger picture”.

An architect needs to be able to understand what the client wants, and bring together all elements of the requirement to create a design that provides what they want on the budget that is available.

An Architect requires enough technical knowledge to be able to provide options, direction and advice.

e.g. “the design is a 5 bedroom house with 3 bathrooms. I know enough to tell you the walls / fittings of each room, and how much floorspace you need, and what the best fit is between technology and practicality”.

SME Engineers [Technical Architects]
These are the subject matter experts. They have years of experience in a specific area (e.g. Plumbing, Electrics, Foundations) and are masters of their trade.

Typically involved in larger projects or for short technical consultation engagements.

e.g. “from the design I recommend you need X strength re-inforced steel beams” … “you will need N-feet of wiring and a specific type of fuse and junction box”

Note – On smaller projects Technical Architects will often take the same role as Technical Leads.

Foreman [Development Technical Leads]
These people know their trade well enough to know how to do a good job, and are also natural team leaders. They make sure that the labourers do the right work, and to the right standards, according to plan.

They are also capable of recommending solutions to problems “on the job”.

e.g. “the current design doesn’t work, but I know it will if you move that window 3-feet to the right / change the materials”

Note – On smaller projects Technical Leads will often take the same role as Technical Architects.

Labourers [Developers]
This is where the actual build gets done. You will have the people who do the same jobs on each project. They are good at it and fast too. Because they do this all the time, the chances are they will actually be quicker than the Architects / Engineers and Foreman too!

You will also have in this category the less experienced apprentices (Junior Developers) who are learning on the job.

e.g. Brick Layers / Plumbers / Plasterers / Electricians

Project Managers
These people spend their tmie making sure that scheduling is on track and keeping touch with the client. They make sure that everything happens at the right time and in the right order.

If the cement doesn’t turn up, or the wrong type of window frames have been ordered then it’s usually the Project Manager’s fault.

Consultants
You always have consultants, but the distinction between a consultant and another SME (such as Engineers or Architects) is that Consultants provide consultation for the client.

This is not always the case (consultants have a valued place for internal engagements and aiding the project team too!) but generally the main focus is to help the client to understand the requirements, the solution and to provide that much needed face for clients to ask technical questions (and get a lamens response).

——————————

I thought this was an interesting excercise, and certainly helps me to explain what I do to people in a way that they can understand. So few of the great-unwashed masses understand software development, at least this means I don’t need to say “I work in IT” and leave it there 🙂

Of course, some people tend to wear multiple hats and do lots of different jobs … but it also helps to describe in context (just because you are a “Developer” doesn’t mean you can do SQL, C#, CSS and XSLT … in much the same way you wouldn’t expect a builder to be able to do brickwork, plumbing, electrics and plastering!)