<< The Java Posse podcast | Home | Blog it! SIG talk >>
Twitter RSS feed for Simon Brown [Twitter] simonbrown: Eating cream cakes in the sun at jersey zoo ... chillin'

Coding the Architecture RSS feed for Simon Brown [Coding the Architecture] Just a short note to plug a handful of sessions that Kevin and I are presenting at the upcoming Software Architect 2008 conference, 3rd-5th June, London. 1. Coding the Architecture : From Developer to Architect The first is a re-run of our ...

Should architects code?

The age old question - should technical architects write code?

Interesting how this comes up time and time again. Just as some background, we (Evolution) are looking to recruit Technical Architects (Java and/or C#) and an Enterprise Technical Architect. As one of Evolution's senior architects, I'm involved in the interview process and the question around writing code is always prompted by phrases like "I want to remain hands-on".

My opinion on this is that I think that architects should be able to code, particularly if they are going to be involved and responsible for the architecture/design of a system. After all, putting together a feasible, implementable architecture is much easier if you understand at least how some of the technologies work. You can only delegate so much to your team!

With application and system architecture, being able to code is different from actually doing it. A major part of an architects role is about quality assurance, both in terms of the functional and non-functional requirements. Clearly, allocating the architect to development tasks 100% of the time means that they can't take care of their QA responsibilities. The same goes for mentoring the rest of the team. Time needs to be allocated to these activities. We learn by experience and I've certainly been bitten by this in the past.

So when shouldn't an architect write code? Well, for me, that time would come when you are not directly responsible for a project. Here I'm talking about enterprise level architects that are either responsible for many systems and/or making strategic decisions that affect the business. Since a much higher level of knowledge is required here, I don't really see the reason to write code.

At the end of the day, everybody has a slightly different opinion on this. What do you think?



Re: Should architects code?

I would suggest that 'Software Architect' is a role and that the question can be rephrased 'Does software architecture include coding?' Looking at it this way then the answer might be possibly not; software architecture is the processs of designing the functional, technical and operational aspect of the system in question (or something along those lines - I'm sure there are many definitions and my initial stab at one can be improved). Drawing an analogy with architecture in the construction industry, it's about designing the building and how it's going to be used, and doesn't include actually laying bricks.

This is where my analogy falls down. On many software projects the [software] application architect will do coding (and I would argue should) simply because as well as being good at architecture they are more than likely very good at coding. They are also in an excellent position to help build the application (they wrote it's architecture). In addition, unless the project is quite sizeable and long-running the activities of a software architect will not fill their time completely and will probably not excessively clash with the development activity such that they can't do both roles.

Re: Should architects code?

An architect’s role is to 1) Provide the Technology solution for a business requirement 2) Design the solution 3) Ensure the design and code is as per the quality attributes 4) Mentor the team and also the client. 5) Ensure the right process and methodologies are followed. To do all these he needs to know what the latest in technology is. How his design will be implemented in this technology. Test the code against the quality attributes. Explain all these to the team and solve their problems. How can any one with out having a hands on experience (be it on java code or Sql server indexes or a data farm) will be able to do this?? Yes construction architects may do it with out hands on, because their industry is matured. They don’t keep getting new versions of steel or cement every quarter. They speak a common language across the globe. When such a maturity comes to software industry software architect can also design systems without much of hands on. But that’s a long long way ahead.

Re: Should architects code?

I would say yes, for two reasons: a) written standards don't work - hand your technical design to 10 programmers and you'll be lucky if 1 of them even opens the front page - in my experience the people who end up doing the work are often surprised to find that there IS a functional spec or design document - let alone are prepared to follow it. So your standards and design have to be in some form that MUST be listened to - such as uml diagrams that code is generated from, base level frameworks, stubs or tests. Anything else is largely pointless. b) however good you are, the farther away from the system you are, the less good your architecture will be. An architect who is enforcing their enterprise architecture by making sure people all use [these] technologies, [these] processes and [these] libraries will succesfully be able to come up with low impact changes that lead the enterprise towards an every increasing line of success. The architect who stands back, looks at the problem, and prepares a "perfect" solution will arrive at a non-cohesive set of projects each of which may internally be consistent, but which as a whole form a conglomerate which is neither easily maintained nor useful as a corporate base for future development. Just as in the old proverb - "give a man a fish and you feed him for a day, teach a man to fish, and you feed him for a lifetime" - an architect who designs a solution to the current business need is a complete waste of time. An architect should be devoted to the "process" of development and the frameworks we are developing from. It is only then that you get true exponential improvements in productivity.

Re: Should architects code?

IMVHO with the current state of systems development, it's still very hard (perhaps impossible) to separate the low level concerns of coding from the high level concerns of architecture - be it application architecture ("we'll use pattern X here and algorithm Y there") or system architecture ("we'll put an app server cluster here, a firewall there"). For that reason I believe that it's critical for an architect (of either stripe) to be able to code, since they need to be able to understand how their architectural decisions are going to impact the code and vice versa. So what does it take to be able to code? Again this is just my personal opinion but I reckon it takes practice - I don't believe it's possible to be able to sit down and code productively if you've taken a big break from coding (where a big break might be, say, 12 months). It's all too easy to forget about all the devils in the details and how they percolate up and have an impact on other (seemingly independent) aspects of a system. Perhaps this is another consequence of Joel's Law of Leaky Abstractions? As an aside, in my work (consulting) I frequently come across people whose title includes the word "architect". These tend to be the people I'm most wary of since in many cases they have significant technical responsibility but often haven't touched (or even looked at) code in a long time. IMVHO this is often a recipe for problems.

Re: Should architects code?

Depends on who you ask. It seems everyone and their grandmother has their own definition of what it means to be an architect. I've seen the mess created by so called architects that don't know how to build software. They are usually referred to as PowerPoint architects and insist on making technical decisions instead of the real experts. I would call them politicians instead. Because they make the same kind of bad decisions as politicians. They make technical decisions based on market hype, salespeople's PowerPoints, their nephew's advice or their own very limited experience, because they are lacking the technical knowledge. Instead of asking if they should code I would ask the question: When should an architect code? Should an architect code at all? If we are talking about a 100% political architect (Enterprise, IT or whatever) then he should most probably never code. The architect should let the team make the technical decisions because he doesn't have the expertise himself. My point is that titles tend to get in the way. Let the real experts make decisions and let them implement the solution also. It doesn't really matter if you're an architect or developer. Anyway I like Martin Fowler's articles on the subject: www.martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf http://www.martinfowler.com/bliki/BuildingArchitect.html

Re: Should architects code?

PowerPoint architecture goes hand in hand with those that think architecture is all about generating reams of UML diagrams before handing them off to a bemused development team. Actually, this is one of the reasons that I don't get model-driven architecture but I'll save that for another day.

On the basis that an application/system architect will remain hands-on, we've often discussed what percentage of their time should be allocated and somewhere around 40%-60% seems to feel right. You do need *some* time to do the QA stuff, mentoring, etc but you also do need to keep your hands dirty. This is what I ideally like to do on projects.

Interesting point about having a big break from development activities and it raises an interesting question. For whatever reason (e.g. had enough of coding, want to do more strategic consulting work, etc), there must be a time in an architect's career when they give up coding for good. Be really interesting to hear from anybody that has taken this route and transitioned away from the techie stuff.

Re: Should architects code?

My natural reaction is "of course they should be able to!" They need to be able to test out assertions that others make with spike code. It should be one of their tools, along with being able to assess the "big picture" and give good guidance to developers.

Re: Should architects code?

In my experience there are 3 different types of architect:
  • Techie architects – good coders, designers, mentors, trouble shooters, delivers etc. but are best practice zealots who follow all that has gone before them.
  • Project management / hand waving architects – they no longer code but are very good at facilitating technical decisions and delivery. When you go down this route your natural progression is Enterprise Architect/CTO where you influence the decisions made at the board level.
  • Visionary architects – excellent coders who are good at seeing the even bigger picture (Frameworks) and are not afraid of doing things completely differently based on experience. They prove things in code but are very poor at final delivery and will often take shortcuts to prove their point. These are the rarest of architects and are very hard to pigeon hole into a job title in a lot of organisations. Their effort feeds back to both of the above. Techie architects make it really work and project mangement architects sell it to the business.

I think you need all 3 types and sometimes you need to be all 3 types. Your own personal preference comes from what you enjoy and what you are good at. In most organisations the structure is Technical Architect, Enterprise Architect and CTO. Rather rigid but all are important. The structure comes from the need to scale the business and the higher you raise up the tree more you need to base decisions on the wider business and economic situation.

I would classify myself as 20% visionary, 20% techie, 20% Project management architect and the remainder would be classic coder because I still enjoy solving a hard core calculation/business problem. More importantly I find this feeds the other 3 architecture disciplines. I go through periods where I gravitate towards one more than the others. Most importantly I am still hands on! I have only had one job where I fore filled all of the above in the right measures. The reward is amazing when you influence decision at the board level, through the whole development lifecycle and are at the end “flicking” the go live switch and seeing the impact on the business literally minutes later! Shame the money ran out on the development side! We always delivered scaleable working complex software but I am not sure which architectural area I didn’t exercise properly! However, the client was often seduced by the latest “brain fart” ideas without calculating their return on their investment!

Re: Should architects code?

Enterprise Architects may not have been Technical Architects previously in their career. They may have come from Business Architecture or Information Architecture. The question is as appropriate as asking "Should architects still build ontologies?", or "Should architects still define business processes in IEDF0?". IMHO all IT Management should have some sort of technical background, and programming is a key skill, but a management team of ex-programmers is a nightmare in experience. The wise enterprise architect knows to trust the developers. The developer is expert in the tactics, the enterprise architect in the strategy. Generals are very bad at shooting and digging trenches, but they all did it once upon a time. Private soldiers can't do logistics. Where this breaks is the police where Chief Constables who were once plain Constables get completely out of touch and impractical. Two similar organizations, one pulls it off, one doesn't. Why? In the Army, a couple of times a year, the generals still roll their sleeves up and join in. You only need to programm 1 week a year to keep your hand in.

Re: Should architects code?

Let's take a new look at what architecture could mean. In building, the architect does not install windows, wiring etc. but at an abstract level he specifies the various tasks so completely that the workmen ought not to be able to take design decisions.

In England half a century ago the Leo computer company arranged something like this, in business applications, where the coders were obliged to follow a fully detailed set of instructions, without exercising any discretion. This approach has been lost. It should have been retained, and the coding of course automated when that became possible.

Now software is immaterial, and weightless, so why not automate the task of the worker completely and eliminate the coding?  Or a lot of it, anyway. This would imply the software architect would need the ability to produce a totally complete specification, not the vague stuff that UML can provide.

It is possible and has been done, by a small group of un-financed experts. Sorry to seem to push a commercial product here, but my aim is in fact to inform the community about possibilities and also achievements. Buy the book ISBN 0-8493-8086-3 for an account of the technology I am speaking about, or read a couple of ECBS'03 and '04 papers - see www.stateworks.com for details.

Our idea is in fact to totally specify the software behavior in detail, and then execute that specification, in an environment separated from the data handling. The coded modules which all projects would also need are then easily attached to a read-made framework, and the system never goes crazy by losing track of its precise state.This works very well, producing bug-free systems, applied mainly in the embedded control system area or telecommunications to date, but the concepts are quite general, and scale up to handle big projects, unlike most solutions proposed in this field.

The architects would not need to code, but would need to understand coding well enough to farm out the various coding tasks, easily specified and tested, to other staff.

 

Re: Should architects code?

Seriously...how can you suggest an architecture and not be able to code it yourself? You're credability is on the line. Architects who don't or won't code are nothing more than Project Managers in hidning.

Add a comment Send a TrackBack