I recently attended a couple of “unconference” style sessions called The Pragmatic Java Architect, run by the people from The Pragmatic Architect.

In retrospect, I found it interesting in that not many of the discussions focussed specifically on Java; most of them were about what an architect does and how an architect interacts with the rest of the team and organisation. This could be due to the fact that most of the attendees described themselves as programmers who were interested in becoming architects, rather than people who were already architects and were therefore more interested in the architect’s role in general rather than about specific points. I was hoping that more of the people that had attended the first one would attend the second so that the discussions could pick up where they left off, but it was mostly a different group of people so that didn’t happen as much as I had hoped.

It could also be due to the fact that the term means different things to different people and, importantly, to different organisations. Some organisations have a very well defined architect role, but this definition can vary between organisations. Some organisations don’t have official architects and either don’t realise that architecture needs to happen or think that it will just happen automatically. Other organisations do recognise the role of the architect, but do not have people with that specific title; rather the responsibility of the architecture falls to someone who also has a number of other responsibilities. Mine is in the last of these groups but I am trying to change that.

People agreed on a number of points over the two days though. Those that have stuck with me are these, all of which I feel are important:

  1. Having somebody who plays the role of the architect is important to successful project delivery. This person might not have the title of architect, but they must have the relevant experience and must have enough available time to devote to defining the architecture amongst whatever other responsbilities they have on the project and elsewhere.
  2. A good architect is usually someone who has already been a relatively senior developer. This gives him an essential wealth of knowledge and experience on which to draw when making architectural decisions.
  3. An architect should still get time to do development. There are various reasons for this, which I’ll discuss more fully later.
  4. Successful implementation of an architecture can depend on whether or not the architect is part of the team on an ongoing basis. This allows him to see whether or not the decisions he made are the right decisions and also to ensure that the programmers in the team are using the architecture in the way it was designed to be used. This ties in with point three.

People seemed to agree on these points at both sessions. Or maybe the people who disagreed just kept quiet. :-)

To expand on points three and four above: there are a few different ways in which the architect can be involved in development and ongoing projects. These each have their own reasons for them and benefits gained from them. We got to discussing these more fully in the latter part of the second session. These are a combination of my own thoughts and those that came out of the session:

An architect can develop architectural spikes (or “tracer bullets”) early in the project as a basic check that the architecture that he has defined is suitable for the task. This is a proof of concept task and is important as an early verification of the architecture. However, the architect can still be involved in day to day development on the project on an ongoing basis after this task is completed.

Being involved in this manner allows the architect to get first hand experience of how his architecture works in practice and learns from his mistakes and also from his good decisions. He also learns from the mistakes of the developers using the architecture. These mistakes might be on the side of the developer, in which case the architect can guide them to using the architecture in the way it was intended, or they might be on the side of the architecture, in which case the architect considers adjustments that can be made and learns a valuable lesson for next time. It also increases the chances of the architect gaining the respect of the developers on the project because they see that he is willing to work with his own architecture. This is important to get the developers to “buy in” to the architecture rather than having them disregard it as an annoyance that is being imposed on them by an external party.

An architect also needs to keep up to date with new technologies, products, libraries, etc, and this is best done by experimenting with them. If he can not get R&D time in which to do this, then he can try to get a few small tasks on another project using the technology or on an internal project if there are any available.

In my organisation, the architect is almost always the “tech lead” of the project which is a combination of the roles of architect and that of technical team lead. I prefer to be involved in development – either helping people fix bugs, picking up a few tasks here and there or pairing with different developers for short periods – but find it important not to have actual development tasks assigned to me. If I do, then these usually get in the way of my architectural and team leading responsibilities.

I have written a lot more than I had planned to and, in doing so, have some up with a number of other topics that I would like to cover but I’ll decide that I’m finished now and address those in other posts soon.

Leave a Reply

You must be logged in to post a comment. Login »