Thursday, August 14, 2008

Do Architects need coding skills?

Do Architects need coding skills?

In the oft cited parallel world of construction and engineering (of buildings), it is true that to be an architect one does not need to necessarily possess brick-laying skills in order to be effective in their role. However, to be an architect one does need to understand the properties of the materials used for construction.

What about software? Most, in fact pretty much all of the (software) architects I know have some background coding experience. The question to be asked is how essential is it to have coding skills? If an architect can get by without having ever laid a brick, is it possible for a software architect to get by without ever written a line of code?

At least at the current state of our discipline, I would say no.

However, a more contentious question maybe – Do Architects need to maintain their coding skills once they’ve achieved the lofty status of architect. Well, I think it depends. Enterprise architects - possibly not (more on that later). However, for application, solution or product architects – I would say yes. There are many reasons why I think this is the case.

Firstly, the job of the architect is to take a definition of what needs to be built and figure out the best way for how to deliver the solution or product given the imposed time and financial constraints (in reality, the architect is also usually involved in figuring out what needs to be built although this should really be the role of the business analyst or product manager). He/she needs to figure out how to break the problem into manageable chunks (high-level design), decide what materials and tools to use (taking into account the current state of the art and the skills of the development organization) and forage for the non-functional requirements or quality attributes. Basically, the objective of the architect is to deliver better faster cheaper. It’s often a difficult job. The architect may also be stretched and be responsible for data design, dynamic modeling and even detailed design activities such as screen design. Essentially, the architect has to provide whatever it takes to ensure the development organization has enough information to be successful in the build out.

The architect may also be pulled into oversight of the development effort. Throwing designs over the wall and turning your back is likely to result in the development organization delivering something different to what is actually required.

Sometimes, models are not enough. They are by their nature abstract which means they are missing details. The details are where the devil lies. The details need to be figured out sooner or later and so the development organization may either choose to figure it out for themselves or involve the architect.

There may be some system requirements that are difficult to articulate in English specifications. Sometimes, code in the form of prototypes provides an ideal communication mechanism to the development team.
The architect is required to look around and observe and evaluate current trends in technology and processes. Maybe, there is some new toolkit or framework that has been developed that promises to help shorten the development cycle or provide some significant value. Of course, the architect has to try out the technology or process outside of the critical path of the project to ensure fit and readiness for the project at hand. Perhaps some prototypes need to be developed. The architect may need to dive in and learn the new technology before making a sound recommendation to embrace or avoid.

The architect shouldn’t be coding on a daily basis. If the architect is spending most of his/her time then I would argue they are not doing architecture. Having said that, coding is a small yet important component of the architect’s repertoire.

9 comments:

yclian said...

Good post.

The computing industry is different with civil engineering, like what you have mentioned, an architect needs not lay a brick himself but to have written some code.. he may have to.

It's all due to the nature of the industry as well as the methodologies and approaches we use for prototyping, design, testing, etc. I don't know what'd be the best words to explain this, but am sure we are telling the same thing.

However, in a project, an architect may not need to write a line of code, but when he's back home he could be involved in open source projects. A civil architect won't be doing those dirty work when he's back home.
yc

Simon Brown said...

I agree - architects do need to be able to code. For me, the key reasons that software architects are different from building architects are (1) technology is ever-changing very quickly whereas bricks, etc aren't and (2) software constructs are abstract whereas bricks, etc are physical.

Cheers
Simon; www.codingthearchitecture.com

kumarpandey said...

I agree with yc. This industry is fundamentally different from others just from the sheer dynamism of it. How often does a sheetrock or a brick goes from version 1 to 10 or a complete framework change. From a personal experience level, I am currently in the process of moving our dashboard to a flash based solution (client side rendering vs the server side). If I had not gone through the process of building a protoype I could never have gotten the full understanding of state of flex, its current limitation etc.
And if the buck stops at me for going with this technology then don't I need to be comfortable with this technology at a level which can only be obtained by getting your hands dirty so to say?

David said...

I must admit I personally hate the word architect when it comes to software engineering. Civil Engineers pass exams before they can use the title and take legal responsibility for their designs.

I personally prefer something like senior technologist if you need a title.

The question of should an architect code comes down to the organization they work for and what kind of architect they are. System architects in large companies seldom code and have no real need to as. They are tasked with how systems interact across a large enterprise.

Application Architects however should code. They are senior developers who are responsible for application design. Their skills need to be up to date.

driveawedge said...

There's another issue that is hinted at in this post an comments but not directly addressed. Being able to code lends the architect a level of respect with the developers that can be acquired in no other way. Rather than simply occupying an ivory tower and offering up solutions that are met with skepticism, the architect can contribute to the implementation, gaining credibility. I have found this to be the quickest and most effective way to get architects and developers on the same page.

And, watch a few episodes of Engineering Disasters (a subseries of Modern Marvels) and you'll see that even in civil engineering, the architects and builders don't always appreciate the challenges of the other. Unfortunately in their world, buildings fall down when this happens.

subeen said...

Thanks for the post and useful discussion.

Jason Chambers said...

driveawedge - I agree with your comments on credibility.

Thanks to everyone for contributing their thoughts and comments.

pcushing said...

"At least at this point in our industry..."

I wonder if / when the tools and materials for building software will become as recognizable as the tools and materials for real world construction. Do you think a.) it will ever reach that point and b.) that your argument changes with more maturity in the industry?

Tiendq said...

I agree too, architects still need coding skills. Of course when you wear an architect hat you will have a lot of architecture tasks to do, but if you have good coding skills you can live "developer life". I like software architecture but coding is forever an old habit, with good coding skills you can write sample code, core component, framework skeleton etc. which help developers a lot. You also can review code to identify tricky bugs, to help developers to stick their code to the models better.