    <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/">
     <channel>
        <title>ACCU  :: Knowledge-Sharing Architects As An Alternative to Coding Architects</title>
        <link>https://members.accu.org/index.php/articles/2222</link>
        <description>Professionalism in Programming</description>
        <dc:language>en-us</dc:language> 
        <dc:creator>Administrator</dc:creator> 
        <admin:generatorAgent rdf:resource="http://www.xaraya.org" /> 
        <admin:errorReportsTo rdf:resource="mailto:webeditor@accu.org" />
       <sy:updatePeriod>hourly</sy:updatePeriod>
       <sy:updateFrequency>1</sy:updateFrequency>
       <docs>http://backend.userland.com/rss</docs>




<div class="xar-mod-head"><span class="xar-mod-title">Programming Topics + Overload Journal #132 - April 2016</span></div>

<table border="0" cellpadding="1" cellspacing="0">
    <tbody>
    <tr>
        <td valign="top">
            Browse in :
       </td>
       <td valign="top">

                                            <a href="https://members.accu.org/index.php/articles/">All</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c13/">Topics</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c65/">Programming</a>
<br />

                                            <a href="https://members.accu.org/index.php/articles/">All</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c76/">Journals</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c78/">Overload</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c360/">o132</a>
<br />

                                            <a href="https://members.accu.org/index.php/articles/c65-360/">Any of these categories</a>

                    -                        <a href="https://members.accu.org/index.php/articles/c65+360/">All of these categories</a>
<br />
</td>
   </tr>
   </tbody>
</table>




<div class="xar-error">
   <p>
 <strong>Note:</strong> when you create a new publication type,
the articles module will automatically use the templates
<em>user-display-[publicationtype].xt</em>
and <em>user-summary-[publicationtype].xt</em>.
If those templates do not exist when you try to preview or display a new article,
you'll get this warning :-)  Please place your own templates in themes/<em>yourtheme</em>/modules/articles . The templates will get the extension .xt there. </p>
</div>
<div class="xar-norm xar-standard-box-padding">
   <h1><strong>Title:</strong>&nbsp;Knowledge-Sharing Architects As An Alternative to Coding Architects</h1>
<p><strong>Author:</strong>&nbsp;Martin Moene</p>
<p>
<strong>Date:</strong> 08 April 2016 21:29:51 +01:00 or Fri, 08 April 2016 21:29:51 +01:00</p>
<p><strong>Summary:</strong>&nbsp;Should architects write code? Sergy Ignatchenko explores this controversial subject.</p>
<p><strong>Body:</strong>&nbsp;<p>In recent years, quite a few articles have appeared with pro and contra arguments (mostly pro ones) on the question of whether software architects should code. Just to give a few examples, [<a href="#[Bryson15]">Bryson15</a>], [<a href="#[ArchitectsDontCode]">ArchitectsDontCode</a>], and [<a href="#[Mirakhorli16]">Mirakhorli16</a>] all argue for architects coding. There are a few articles out there such as [<a href="#[Langsworth12]">Langsworth12</a>] which are trying to discuss both sides of this choice, but they seem to be overwhelmed by what was probably started by [<a href="#[Coplien05]">Coplien05</a>] and is rapidly becoming a â€˜common wisdomâ€™ of â€˜Architects Should Codeâ€™. Moreover, the â€˜Architects Should Codeâ€™ point of view is supported by lots of developers out there, often by those who suffered from the hands of idiotic architects (who are unfortunately as abundant as not-so-good developers).</p>

<p>We will take a closer look at the arguments presented, double-check them against anecdotal evidence available (a.k.a. what Iâ€™ve seen and heard myself), and see where such analysis leads us. Letâ€™s start with considering the arguments which are commonly presented in this debate.</p>

<h2>Pro architect-coding arguments</h2>

<p><strong>Avoiding being ignorant of implementation details</strong>. In particular, [<a href="#[Coplien05]">Coplien05</a>] has said that:</p>

<p class="blockquote">...many software architects limit their thinking and direction to abstractions, and abstraction is a disciplined form of ignorance. Too many projects fail on â€˜detailsâ€™ of performance, subtleties of APIs, and interworking of components â€“ or, at best, they discover such problems late.</p>

<p>I agree that this is a valid point. However, I donâ€™t agree that it can be only avoided by the architect coding (ways to deal with it without specifically coding will be discussed below).</p>

<p><strong>Responsibility</strong>. The most common argument in favour of architects coding is that architects should be responsible for the delivery of the project. I am not arguing with the â€˜should be responsibleâ€™ part, but I donâ€™t see that being responsible necessarily means coding. Yes, a good architect must work closely with the delivery team [<a href="#[Bryson15]">Bryson15</a>]. No, working closely with the delivery team doesnâ€™t necessarily mean coding (which is consistent with [<a href="#[Langsworth12]">Langsworth12</a>]).</p>

<p><strong>Feedback</strong>. The second common line of pro-architect-coding arguments is that development is an inherently iterative process, so architecture should evolve as the product is being developed. I am not arguing with this point either, but I agree with [<a href="#[Langsworth12]">Langsworth12</a>] that not writing code doesnâ€™t necessarily mean lack of feedback. </p>

<p><strong>Respect</strong>. For the project to be successful, the architect should be respected by the team. Once again, there is no argument against this point. Moreover, it does imply that architect should be able to write code. </p>

<p><strong>Observation 1</strong>: â€œ<em>Developers have more difficulty [than architects] implementing architectural choices</em>â€ [<a href="#[Mirakhorli16]">Mirakhorli16</a>]. This observation is interesting because it has a solid science behind it (there was a scientific study, with statistical analysis etc.). And yes, my own experience does support this observation. Once again, there is nothing to argue about here.</p>

<p><strong>Observation 2</strong>: â€œ<em>Non-architecture savvy developers introduce more defects into architecturally significant code snippets than architecture-savvy developers</em>â€ [<a href="#[Mirakhorli16]">Mirakhorli16</a>]. This one is also supported by solid science, and once again my own experience supports this observation as such. And no, I still donâ€™t see why it means that the architect should code.</p>

<p>As you see, I do not argue with any of the points commonly presented as arguments for architects coding. On the other hand, I do not see why they necessarily mean architects should be coding on a day-by-day basis. Of course, I realize that â€˜I donâ€™t see why this or that point means codingâ€™ is a very weak argument â€“ that is, until I can articulate a development model which addresses all these issues without coding. Donâ€™t worry â€“ it will follow below.</p>

<h2>Contra architect-coding arguments</h2>

<p>Now we should consider the other side of the story, and see why architects coding might not be that good an idea. Note that weâ€™re speaking about those architects who do work closely with code, but do not code themselves.</p>

<p><strong>Not seeing the forest for the trees</strong>. A biggie. Working on one part of the whole large project reduces opportunities to see the Big Picture. This is especially risky if your project has the concept of â€˜code ownershipâ€™, but even without it, an architect too busy with debugging a piece of code is less likely to â€˜swap outâ€™ of this task to see a substantial architectural problem in the adjacent project. Been there, seen that (and was guilty of it myself too).</p>

<p><strong>Time is better spent on other parts of the same project</strong>. This one seems to be strongly underestimated, but it is just a fact of life. There are only 24 hours in a day, and it is much more efficient for a good architect to spend her time on the other code-related things, such as code reviews and sharing knowledge about the architecture of this specific project (as well as about programming practices in general) with team members. More on this below.</p>

<p>Context switches are expensive (and no, Iâ€™m not speaking about threads). By the very nature of the architectâ€™s job, on the one hand he needs to be â€˜readily availableâ€™ as soon as somebody needs architectural advice. The usual pattern goes as follows: somebody wants to add a function (class, whatever) to an infrastructure-level API, effectively exposing certain previously hidden implementation details. At this point, it is the architectâ€™s job to say that it doesnâ€™t belong here, and should be done on top of existing API in such and such manner (which happens 80% of the time), or to agree that such a function is indeed necessary (remaining 20%). This pattern happens all the time for all the teams around the world (from a kernel team to a big government development, with everything else in between). Even for a team of 5, this process leads to interruptions being quite frequent (and the larger the team, the more interruptions experienced). On the other hand, being involved in a significant development requires concentration for several days, and such interruptions cause â€˜context switchesâ€™ from coding to architecture advice. These â€˜context switchesâ€™ (just as for threads) tend to be extremely annoying and lead to suboptimal decisions both for coding and for architectural advice. </p>

<p>While DIY is easier in the short run, it doesnâ€™t scale, and knowledge-sharing does scale in the long run. Another biggie. If the architect is a hands-on one but she doesnâ€™t code, then to fix some architecture-related problem sheâ€™ll need to explain the problem (and how to solve it) to somebody else. And as soon as youâ€™re explaining something, it means that the knowledge and, even more importantly, the â€˜feelingâ€™ about the architecture of your specific project is spread among developers. This is extremely beneficial in the long run (both according to Observation 2 above, and according to my own experience). Yes, for a good architect it is much easier and faster to code it herself. But after doing it herself, very little has changed in the minds of the other developers, so the next time she will need to code it herself again; and again; and again. It means that the development process doesnâ€™t really scale well. On the other side, if she spends more time now to explain things, the next time there will be more understanding of this kind of task (in terms of Observation 2, there will be more architecture-savvy developers in the long run), so more and more tasks can be safely delegated (and will be done according to the proper architecture for this project, too). I see this point as a Really Big Argument for knowledge sharing practices.</p>

<p><strong>Dependency on the Architect</strong>. As noted above, non-coding (but working closely with code) architects are pretty much forced to share their knowledge to have things running. As a nice side effect, the very same knowledge sharing weakens a dependency on the architect (and reducing any dependency on a specific person is a Universally Good Thingâ„¢). While not-so-good architects might go nuts after realizing this point, good ones donâ€™t need to protect their jobs by being â€˜the only person who knows how to change this damn thingâ€™.</p>

<h2>Contra architect-coding non-arguments</h2>

<p>There are also several non-arguments which are often pushed to support non-coding architects.</p>

<p><strong>Architecture should not be concerned with implementation details</strong>. A Really Bad non-argument. In my book, an architectâ€™s job is to deliver a solution, plain and simple. Doing that means that the architect needs to be sure that more-or-less optimal implementations are possible for all the components of the architecture; moreover, the architect needs to suggest these implementations if the need arises.</p>

<p><strong>Architecture is written once, then the architect can leave for another project</strong>. Note that this one is very different from the â€˜Time is better spent on other parts of the same projectâ€™ point made above. Moving on to a different project, at least until current project enters the maintenance phase, is an almost-sure recipe for disaster.</p>

<p><strong>Architect is a high-level role, is all about business lunches with customers, and developers even donâ€™t know how to play golf</strong>. I donâ€™t even want to discuss this one. If youâ€™re an architect and are thinking along these lines â€“ youâ€™re horribly out of place.</p>

<p><img src="http://accu.org/content/images/journals/ol132/Ignatchenko/Ignatchenko-01.png" /></p>

<h2>Two things which work</h2>

<p>Ok, weâ€™ve stated all the arguments (and ignored non-arguments) from both sides. Now we need to architect a system which provides a reasonable balance of the answers.</p>

<p>Actually, there are at least two approaches which work. The first one is very simple â€“ an architect whoâ€™s coding (yes, current â€˜common wisdomâ€™). It will work, at least as long as the architect is not too concerned about his own part of code and is not interrupted too often. However, knowledge sharing wonâ€™t happen, pretty strong dependency on the architect will still exist (which is a good thing for the architect, but not necessarily for the project), and lack of time for reviewing code may lead to code quality taking a slippery road towards being unmanageable. All these issues are admittedly non-fatal, but I know that we can do better than that.</p>

<p>The second approach is the one I am arguing for, and I prefer to name it the â€˜knowledge-sharing architectâ€™.</p>

<h2>Knowledge-sharing architect</h2>

<p>Here weâ€™ll be speaking about an architect who is one of the best coders around, but is not normally coding herself. </p>

<p>Note that for a knowledge-sharing architect, â€˜not normally codingâ€™ does not mean â€˜not involved with codeâ€™, but the exact opposite: â€˜working with as much code as possibleâ€™. Such â€˜working with codeâ€™ can and generally should involve most of the following: </p>

<ul>
	<li>code reviews (formal ones and informal ongoing ones too)
		<p>these often lead to showing â€˜how to code it betterâ€™</p></li>
	
	<li>pair programming (which was in particular suggested by [<a href="#[Coplien05]">Coplien05</a>], though I donâ€™t think that it is the only thing which can work in this regard)</li>
	
	<li>considering architecture-change (and often certain high-level API-change) requests from the team
		<ul>
			<li>these normally lead either to an explanation â€˜how to do itâ€™â€¦</li>
			<li>â€¦or to changes to APIs, code guidelines, etc.</li>
		</ul>
	</li>
	
	<li>and discussions with team members on possible solution for arising problems (which lead to guidelines updates etc.).</li>
</ul>

<p>Letâ€™s see how such a knowledge-sharing architect will deal with the pro and contra arguments listed above.</p>

<p>Both responsibility and feedback are right within the process, and respect among coders is not too difficult to achieve (after all, our architect is one of the best coders around). The impact of Observation 1 is not too bad (as there is a constant education, and enough time for code reviews). With regards to Observation 2, the long-terms effects of having a knowledge-sharing architect are much better than with the coding-architect approach due to, well, knowledge sharing.</p>

<p>One additional argument in this regard is: â€œhow do knowledge-sharing architects maintain that level of brilliance in coding once they donâ€™t code anymore?â€ The answer is simple: as knowledge-sharing architects (as described above) are working with more code rather than with less code, this will help them to keep their coding skills top-notch. In other words (and for one specific example): knowledge-sharing architects are giving up up-to-date training in the skill of â€˜how to find that off-by-one errorâ€™ in exchange for the skill of understanding the code of the others (and learning new tricks from them too). There is no magic here, and to improve one skill, you need to give up another one, but I am arguing that the skill of understanding whatâ€™s going on is more important for an already good coder than day-to-day training in figuring out rather stupid bugs (and 90% of all the bugs are outright stupid, so  dealing with them doesnâ€™t benefit coding skills much).</p>

<p>Now letâ€™s consider the arguments listed in the contra section. With a knowledge-sharing architect, â€˜Not seeing the forest for the treesâ€™ has much less chance to occur, and there is more time for working with code (so that much more code can be covered; this is also helped by not having those expensive context switches). Even more importantly, due to knowledge sharing the development process becomes more scalable, and dependency on the architect is reduced.</p>

<h2>Side-by-side comparison</h2>

<p>Letâ€™s summarize the above findings in a table:</p>

<table class="journaltable">
	<tr>
		<th></th>
		<th>Coding architect</th>
		<th>Knowledge-sharing architect</th>
	</tr>
	
	<tr>
		<td>Ignorance about implementation details</td>
		<td>No</td>
		<td>No</td>
	</tr>
	
	<tr>
		<td>Responsibility</td>
		<td>Yes</td>
		<td>Yes</td>
	</tr>
	<tr>
		<td>Feedback handling</td>
		<td>Time permitting</td>
		<td>Yes</td>
	</tr>
	
	<tr>
		<td>Respect of team members</td>
		<td>Yes</td>
		<td>Yes</td>
	</tr>
	
	<tr>
		<td>Observation 1: difficulty with implementing architectural choices</td>
		<td>Better in the short run, but no knowledge sharing in the long run</td>
		<td>Worse in the short run, but better in the long run</td>
	</tr>
	
	<tr>
		<td>Observation 2: more defects from non-architecture-savvy developers</td>
		<td>Better in the short run, but no knowledge sharing in the long run</td>
		<td>Worse in the short run, but better in the long run</td>
	</tr>
	
	<tr>
		<td>Not seeing the forest for the trees</td>
		<td>Medium risk</td>
		<td>Low risk</td>
	</tr>
	
	<tr>
		<td>Time available to spend on architectural issues</td>
		<td>Less time</td>
		<td>More time</td>
	</tr>
	
	<tr>
		<td>Expensive â€˜context switchesâ€™</td>
		<td>More</td>
		<td>Less</td>
	</tr>
	
	<tr>
		<td>Knowledge sharing</td>
		<td>Worse</td>
		<td>Better</td>
	</tr>
	
	<tr>
		<td>Dependency on the architect</td>
		<td>Stronger</td>
		<td>Weaker</td>
	</tr>
</table>

<p>As you can easily see from the table above, I am a big fan of the â€˜knowledge-sharing architectâ€™ approach. And it has worked for me in quite a few projects too. Yes, a coding architect might work (and is indeed orders of magnitude better than an architect who has no clue about the code), but a knowledge-sharing architect will generally work better.</p>

<h2>Exceptions</h2>

<p>While the knowledge-sharing architect is not normally coding, there are a few exceptions to this rule-of-thumb. </p>

<h3>The very beginning of the project</h3>

<p>One Big Exception to the â€˜architect not codingâ€™ rule-of-thumb usually occurs at the very beginning of the project.</p>

<p>It is always a good idea for the architect to establish a framework which will be used for the project, and it is often a good idea for the architect to write a big chunk of such a framework (and the first implementation over it) himself. </p>

<p>At this point in the project, the team (at least the part which can meaningfully participate in development) is small, so knowledge-sharing is not that big issue; and as the team is small, lack of time is not a big issue either. It means that at these early stages, the advantages of the architect coding may easily outweigh the knowledge-sharing aspect.</p>

<p>However, it is a Really Good Idea to prepare for moving to the knowledge-sharing phase as soon as the framework that defines the architecture is written, and not to be â€˜the only person who knows about this piece of codeâ€™ longer than is absolutely necessary.</p>

<h3>Things which nobody else can do</h3>

<p>The second exception occurs when (for the sake of your project, I really hope these occur really rarely) it happens that the architect is the only person who can implement a certain feature. (While in theory it shouldnâ€™t happen, in reality it does.) As we stated, the ideal architect should be one of the best coders around, and the other good coders might not have sufficient understanding of the Big Picture â€“ or the time â€“ to implement this specific feature.</p>

<p>In such rare cases you simply wonâ€™t have an option other than for the architect to code this feature herself, and it wonâ€™t be the end of the world. Note, though, that this is different from the â€˜architect coding only the difficult stuffâ€™ approach (which was criticized in [<a href="#[Bryson15]">Bryson15</a>], and I do agree with that criticism): here weâ€™re not speaking about cherry-picking the difficult (and interesting) stuff, but rather about doing it when there are simply no other options. </p>

<h2>Conclusion</h2>

<p>I hope that I have managed to convince you that a knowledge-sharing architect is better than a coding architect. The difference is subtle, but Iâ€™ve seen teams with knowledge-sharing architects scale better, and deliver higher quality code, than those teams with merely coding architects. While YMMV, and batteries not included, there are good reasons for these observations (which were outlined above).</p>

<p>However, there is one big practical problem with switching to the	â€˜knowledge-sharing architectâ€™ development model. The problem is that most good architects wonâ€™t be willing to give up coding (often â€˜cherry-pickingâ€™ the most interesting pieces, but thatâ€™s beyond the scope now), so the question of how to convince them to start knowledge-sharing isnâ€™t likely to be trivial. </p>

<p>On the other hand, as soon as it is understood that knowledge-sharing architects are beneficial to the project as a whole, the architect naturally faces a dilemma: either to continue to code (in the understanding that this is not the best way to serve the project), or to start knowledge-sharing. While certainly not an easy choice, this might lead to a switch for your architect from coding to knowledge-sharing (and if it doesnâ€™t, it is usually better not to push them too hard, as a persistently unhappy knowledge-sharing architect wonâ€™t be any better than a happy coding one).</p>

<p>In any case, there is no argument that having an architect who has no clue about the code and doesnâ€™t bother himself with â€˜implementation detailsâ€™ is pretty much a guaranteed one-way ticket to a nothing-good-comes-out-of-it land.</p>

<p><img src="http://accu.org/content/images/journals/ol132/Ignatchenko/Ignatchenko-02.png" /></p>

<h2>Acknowledgement</h2>

<p>Cartoons by Sergey Gordeev from Gordeev Animation Graphics, Prague.</p>

<h2>References</h2>

<p class="bibliomixed"><a id="[Coplien05]"></a>[Coplien05] <a href="https://sites.google.com/a/gertrudandcope.com/info/Publications/Patterns/TopTenPatterns">https://sites.google.com/a/gertrudandcope.com/info/Publications/Patterns/TopTenPatterns</a></p>

<p class="bibliomixed"><a id="[Bryson15]"></a>[Bryson15] <a href="http://www.infoq.com/articles/architects-should-code-bryson">http://www.infoq.com/articles/architects-should-code-bryson</a></p>

<p class="bibliomixed"><a id="[Mirakhorli16]"></a>[Mirakhorli16] <a href="http://blog.ieeesoftware.org/2016/02/why-should-software-architects-write.html">http://blog.ieeesoftware.org/2016/02/why-should-software-architects-write.html</a></p>

<p class="bibliomixed"><a id="[ArchitectsDontCode]"></a>[ArchitectsDontCode] <a href="http://c2.com/cgi/wiki?ArchitectsDontCode">http://c2.com/cgi/wiki?ArchitectsDontCode</a></p>

<p class="bibliomixed"><a id="[Langsworth12]"></a>[Langsworth12] <a href="http://randomactsofarchitecture.com/2012/11/20/should-software-architects-write-code/">http://randomactsofarchitecture.com/2012/11/20/should-software-architects-write-code/</a></p>

<p class="bibliomixed"><a id="[NoBugs15]"></a>[NoBugs15] â€˜No Bugsâ€™ Hare, â€˜Non-Superfluous People: Architectsâ€™. <em>Overload</em> #127.</p>
</p>
<p><strong>Notes:</strong>&nbsp;</p>
<p><em>More fields may be available via dynamicdata ..</em></p>
</div>
</channel>
</rss>
