<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/atom10full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0"><id>tag:blogger.com,1999:blog-10280668</id><updated>2008-07-06T10:05:01.246-05:00</updated><title type="text">Brad Appleton's ACME Blog</title><link rel="alternate" type="text/html" href="http://bradapp.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/posts/default?start-index=26&amp;max-results=25" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/posts/default" /><author><name>Brad Appleton</name><uri>http://www.blogger.com/profile/15136106921504315995</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>201</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by/2.0/" /><link rel="self" href="http://feeds.feedburner.com/bradapp" type="application/atom+xml" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site.</feedburner:browserFriendly><entry><id>tag:blogger.com,1999:blog-10280668.post-5501118105195252664</id><published>2008-06-12T00:57:00.002-05:00</published><updated>2008-07-06T09:59:37.238-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><category scheme="http://www.blogger.com/atom/ns#" term="Traceability" /><category scheme="http://www.blogger.com/atom/ns#" term="Links" /><title type="text">Traceability Matrix in an Agile Project</title><content type="html">&lt;span style="font-family: georgia;"&gt;&lt;a href="http://www.infoq.com"&gt;InfoQ.com &lt;/a&gt;summarized an email-list discussion thread on the subject of using a &lt;a href="http://www.infoq.com/news/2008/06/agile-traceability-matrix"&gt;Traceability Matrix in an Agile Project&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I contributed quite a lot to the thread, and InfoQ apparently included many of the key things I said along with the related URLs to articles I've written. (Thanks guys!)&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/bradapp/~3/328104929/traceability-matrix-in-agile-project.html" title="Traceability Matrix in an Agile Project" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10280668&amp;postID=5501118105195252664&amp;isPopup=true" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/5501118105195252664/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/posts/default/5501118105195252664" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10280668/posts/default/5501118105195252664" /><author><name>Brad Appleton</name><uri>http://www.blogger.com/profile/15136106921504315995</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://bradapp.blogspot.com/2008/06/traceability-matrix-in-agile-project.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10280668.post-1193185714173540715</id><published>2008-06-08T00:06:00.006-05:00</published><updated>2008-07-06T10:05:01.473-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><category scheme="http://www.blogger.com/atom/ns#" term="Project-Mgmt" /><title type="text">Iterative and Incremental redefined redux</title><content type="html">&lt;span style="font-family:georgia;"&gt;The agile community has written much about this in the past year or so:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;em&gt;&lt;a href="http://c2.com/cgi/wiki?IterativeVsIncremental"&gt;Iterative vs Incremental&lt;/a&gt;&lt;/em&gt; - from the first (and original) Wiki Web&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.stickyminds.com/s.asp?F=S13178_COL_2"&gt;&lt;em&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;a href="http://www.stickyminds.com/s.asp?F=S13178_COL_2"&gt;The Neglected Practice of Iteratation&lt;/a&gt;&lt;/em&gt; - by Jeff Patton&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://jan-so.blogspot.com/2008/01/difference-between-iterative-and.html"&gt;&lt;em&gt;Difference between Iterative and Incremental Development&lt;/em&gt;&lt;/a&gt; - nice visual depiction &lt;/li&gt;&lt;li&gt;&lt;em&gt;&lt;a href="http://www.agilar.org/blog/2008/04/no-waterfall-trap/"&gt;No Waterfall Trap&lt;/a&gt;&lt;/em&gt; -- an even better visual depiction of the difference between iterative and incremental &lt;/li&gt;&lt;li&gt;&lt;a href="http://alistair.cockburn.us/"&gt;&lt;strong&gt;Alistair Cockburn&lt;/strong&gt;&lt;/a&gt; (pronounced "Coh-burn") has written several papers on the subject: &lt;ul&gt;&lt;li&gt;&lt;em&gt;&lt;a href="http://www.stsc.hill.af.mil/crosstalk/2008/05/0805Cockburn.html"&gt;Using Both Incremental and Iterative Development&lt;/a&gt;&lt;/em&gt; -- Crosstalk, May 2008 &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.stickyminds.com/BetterSoftware/magazine.asp?fn=cifea&amp;amp;id=108"&gt;&lt;em&gt;Iterative and Incremental Development: How &amp;amp; Why you should be doing BOTH&lt;/em&gt;&lt;/a&gt; -- Better Software, April 2008 &lt;/li&gt;&lt;li&gt;&lt;em&gt;&lt;a href="http://alistair.cockburn.us/index.php/Incremental_means_adding%2C_iterative_means_reworking"&gt;Incremental means adding, Iterative means reworking&lt;/a&gt;&lt;/em&gt; -- Jan 2008 (I dont care for this definition, but the article has lots of good references/resources) &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;&lt;a href="http://www2.umassd.edu/SWPI/xp/articles/r6047.pdf"&gt;Iterative and Incremental Development: A Brief History&lt;/a&gt;&lt;/em&gt; -- by Craig Larman and Victor Basili, IEEE Computer, June 2003 &lt;/li&gt;&lt;/ul&gt;Apologies in advance for being a "stick in the mud" on this one - I'm not particularly happy with the definitions so far. I searched around some more on the WWW and came across one I like a lot that I think better meets our needs.&lt;br /&gt;&lt;br /&gt;It is from the paper &lt;a href="http://www.ibm.com/developerworks/rational/library/mar05/bittner/"&gt;&lt;em&gt;What is Iterative Development? (part 1)&lt;/em&gt;&lt;/a&gt;, by Ian Spence and Kurt Bittner,&lt;br /&gt;&lt;blockquote&gt; &lt;u style="font-style: italic; font-family: trebuchet ms; color: rgb(102, 51, 0);"&gt;&lt;strong&gt;Iterative and Incremental Development&lt;/strong&gt;:&lt;/u&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 51, 0);font-family:trebuchet ms;" &gt;A style of development that involves the iterative application of a set of activities to evaluate a set of assertions, resolve a set of risks, accomplish a set of development objectives, and incrementally produce and refine an effective solution:&lt;/span&gt;&lt;br /&gt;&lt;ul style="font-style: italic; font-family: trebuchet ms; color: rgb(102, 51, 0);"&gt;&lt;li&gt;It is &lt;em&gt;iterative&lt;/em&gt; in that it involves the successive refinement of the understanding of the problem, the solution's definition, and the solution's implementation by the repetitive application of the core development activities.&lt;a href="http://www.ibm.com/developerworks/rational/library/mar05/bittner/index.html#notes"&gt;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; &lt;/li&gt;&lt;br /&gt;&lt;li&gt;It is &lt;em&gt;incremental&lt;/em&gt; in that each pass through the iterative cycle grows the understanding of the problem and the capability offered by the solution. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Several or more applications of the iterative cycle are sequentially arranged to compose a project. &lt;/li&gt;&lt;/ul&gt;&lt;span style="font-style: italic; color: rgb(102, 51, 0);font-family:trebuchet ms;" &gt;Sadly, development can be iterative without being incremental. For example, the activities can be applied over and over again in an iterative fashion without growing the understanding of the problem or the extent of the solution, in effect leaving the project where it was before the iteration started.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 51, 0);font-family:trebuchet ms;" &gt;It can also be incremental without being truly iterative. For example, the development of a large solution can be broken up into a number of increments without the repetitive application of the core development activities.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 51, 0);font-family:trebuchet ms;" &gt;To be truly effective the development must be both iterative and incremental. The need for iterative and incremental development arises out of the need to predictably deliver results in an uncertain world. Since we cannot &lt;/span&gt;&lt;em style="font-style: italic; font-family: trebuchet ms; color: rgb(102, 51, 0);"&gt;wish&lt;/em&gt;&lt;span style="font-style: italic; color: rgb(102, 51, 0);font-family:trebuchet ms;" &gt; the uncertainty away, we need a technique to master it. Iterative and incremental development provides us with a technique that enables us to master this uncertainty, or at least to systematically bring it sufficiently under control to achieve our desired results.&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;I like that this definition separated iterative from incremental and then defines them together. I would summarize it as follows (but I like the above better, even if it is longer):&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;blockquote style="color: rgb(0, 0, 102); font-style: italic;"&gt;&lt;strong&gt;Iterative development&lt;/strong&gt; is the cyclical process of repeating a set of development activities to progressively elaborate and refine a complete solution. The “unit” of iterative development is an “&lt;em&gt;iteration&lt;/em&gt;”, which represents one complete cycle through the set of activities.&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;Incremental development&lt;/strong&gt; is the process of developing and integrating the parts of a system in multiple stages, where each stage implements a working, executable subset of the final system. The “unit” of incremental development is an “&lt;em&gt;increment&lt;/em&gt;”, which represents the executable subset of the system resulting form a particular stage&lt;/blockquote&gt;&lt;span style="font-size:100%;"&gt;&lt;strong style="font-family: georgia;"&gt;&lt;br /&gt;Iterative and Incremental development&lt;/strong&gt;&lt;span style="font-family:georgia;"&gt; is &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:Tahoma;font-size:100%;"  &gt;therefore ...&lt;br /&gt;&lt;/span&gt;&lt;blockquote style="font-style: italic; color: rgb(0, 0, 102);"&gt;&lt;span style="font-family: georgia;font-family:Tahoma;font-size:100%;"  &gt;the application of an iterative development lifecycle to successively develop and refine working, executable subsets (increments) of a solution that evolves incrementally (from iteration to iteration) into the final product.&lt;/span&gt; &lt;ul  style="font-family:georgia;"&gt;&lt;li  style="font-family:georgia;"&gt;&lt;span style="font-size:100%;"&gt;Each &lt;em&gt;iteration&lt;/em&gt; successively elaborates  and refines the &lt;em&gt;understanding&lt;/em&gt; of the problem, and of the solution's definition &amp;amp; implementation by learning and adapting to feedback from the previous iterations of the core development lifecycle (analysis, design, implementation &amp;amp; test).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:georgia;font-size:100%;"  &gt;Each &lt;em&gt;increment&lt;/em&gt; successively elaborates and refines the &lt;em&gt;capability&lt;/em&gt; offered by the solution in the form of  tangible working results that can be demonstrated to stakeholders for  evaluation.&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;span style="font-family:georgia;"&gt;An &lt;strong&gt;Agile Iteration&lt;/strong&gt; is a planned, time-boxed interval (typically measured in weeks) whose output is a working result that can be demonstrated to stakeholders:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;&lt;ul&gt;&lt;li&gt;Agile Iterations focus the whole team on collaborating and communicating effectively for the purpose of rapidly delivering incremental value to stakeholders in a predictable fashion. &lt;/li&gt;&lt;li&gt;After each iteration, the resulting feedback and data can be examined, and project scope &amp;amp; priorities can be re-evaluated to adapt the project's overall performance and optimize its return-on-investment &lt;/li&gt;&lt;/ul&gt;So in addition to the non-agile-specific definitions above, we see that &lt;span style="font-weight: bold;"&gt;Agile iterations are &lt;span style="font-style: italic;"&gt;adaptive&lt;/span&gt;&lt;/span&gt;, in that they use the previous results and feedback to learn, adjust and recalibrate for the next iteration. And &lt;span style="font-weight: bold;"&gt;Agile increments are &lt;span style="font-style: italic;"&gt;tangible&lt;/span&gt;&lt;/span&gt;, in that they can be executed and made accessible to stakeholders for demonstration and evaluation.&lt;br /&gt;&lt;br /&gt;That's my story and I'm sticking to it!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/bradapp/~3/328104930/iterative-and-incremental-redefined.html" title="Iterative and Incremental redefined redux" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10280668&amp;postID=1193185714173540715&amp;isPopup=true" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/1193185714173540715/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/posts/default/1193185714173540715" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10280668/posts/default/1193185714173540715" /><author><name>Brad Appleton</name><uri>http://www.blogger.com/profile/15136106921504315995</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://bradapp.blogspot.com/2008/06/iterative-and-incremental-redefined.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10280668.post-4986788325117368715</id><published>2008-06-02T02:10:00.002-05:00</published><updated>2008-07-06T09:46:28.500-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CM" /><category scheme="http://www.blogger.com/atom/ns#" term="Version-Control" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><title type="text">The Laws of Codeline (Thermo)Dynamics</title><content type="html">&lt;span style="font-family:georgia;"&gt;Some of the discussion with my co-authors on our &lt;a href="http://http//www.cmcrossroads.com/content/view/10487/641/"&gt;May 2008 CM Journal article on Agile Release Management&lt;/a&gt; spurred some additional thoughts by me that I hope to refine and work into a subsequent article later this year.&lt;br /&gt;&lt;br /&gt;Release Management is about so much more than just the code/codeline (and it being "shippable") it's not even funny. Some other articles to reference and mention some key points from are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.acmqueue.com/modules.php?name=Content&amp;amp;pa=showpage&amp;amp;pid=424"&gt;Breaking the Major Release Habit&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cmcrossroads.com/content/view/6737/135/"&gt;Release Management - Making it Lean and Agile&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Kevin Lee has written some GREAT stuff on Release Management that relates to Agile. The best is from the first and last chapters of his book on "The Java™ Developer's Guide to Accelerating and Automating the Build Process" but bits of pieces of it can also be found at:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.buildmeister.com/whitepapers/AgileSCMInTheEnterprise.pdf"&gt;Agile SCM in the Enterprise&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.buildmeister.com/viewarticle.php?id=8"&gt;Software Release Management Best Practices&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.buildmeister.com/viewarticle.php?id=26"&gt;Agile Software Delivery&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.buildmeister.com/viewarticle.php?id=4"&gt;Architecting the Build Process&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;ANY discussion about Release Management also needs to acknowledge that there is no single "the codeline",  not just because I may have different codelines (Development-Line plus Release-Line) working toward the same product-release, but ESPECIALLY because no matter how Agile you are, the reality is that you will typically need to support MULTIPLE releases at the same time (at the very least the latest released version and the current under development version, but often even Agile projects need to support more than one release in the field)&lt;br /&gt;&lt;br /&gt;So, when dealing with multiple release-line, and any "active development lines" for each of those, and the overall mainline, we really should say something overall about how to manage this "big picture" of all these codelines across multiple releases and iterations:&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;What is the relationship between development line, release-line and release-prep codeline?&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;How do the above three "lines" relate to "mainline"&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;What is the relationship between the different release-lines for the different supported releases&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;What is the overall relationship between the mainline and the release-lines (and if the mainline is also a release-line, which release is it?)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family:georgia;"&gt;The above questions and the ability to give some big picture "advice" on relating it all together (the stuff of pattern &lt;span style="font-style: italic;"&gt;languages&lt;/span&gt;) is &lt;span style="font-weight: bold;"&gt;precisely&lt;/span&gt; where Laura Wingerd's writing on "channeling the flow of change" and her chapter on "&lt;a href="http://www.oreilly.com/catalog/practicalperforce/chapter/ch07.pdf"&gt;How Software Evolves&lt;/a&gt;" fits in! It tells us&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;The overall Mainline model&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;The different types of codelines ("line" patterns), and what kinds of builds take place on each of them&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;The relationships of those to the mainline&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;When+Why to branch (and from which "types" of codelines)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;When+Why to merge across codelines (as a general rule)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family:georgia;"&gt;&lt;br /&gt;These are where Laura's rules for "the flow of change" apply. And her concept of "change flow" is very much applicable to the Lean/Agile concept of "flow of value". The Tofu scale and "change flow" rules/protocol have to do with order+flow of codeline policies across the entire branching structure when it comes to making decisions about stability -vs- speed. One codeline's policy might make a certain tradeoff, but it is the presence of multiple codelines and how they work together, and how their policies define the overall flow of change across codelines, that forms the "putting it all together" advice that is key to release management across multiple releases+codelines.&lt;br /&gt;&lt;br /&gt;In some way's you could make an overall analogy to the Laws or Thermodynamics and the realities of codeline management. Software and codelines tend, over time, to grow more complex and, if unchecked,&lt;br /&gt;"Entropy" (instability) quickly becomes the most dominating force to contend with in their maintenance. See&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;"&lt;a href="http://www.manageability.org/blog/stuff/the-8-laws-of-software-evolution"&gt;The 8 'Laws' of Software Evolution&lt;/a&gt;"&lt;http: org="" blog="" stuff="" evolution=""&gt;, and ...&lt;/http:&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;&lt;http: org="" blog="" stuff="" evolution=""&gt;"&lt;a href="http://www.manageability.org/blog/stuff/laws_of_software_complexity"&gt;The Laws of Software Complexity&lt;/a&gt;"&lt;/http:&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family:georgia;"&gt;&lt;http: org="" blog="" stuff="" evolution=""&gt;&lt;br /&gt;The "entropy" (instability) doesnt just happen within a codeline. It can actually get far more hideous when it happens across codelines via indiscriminate branching from, or merging to, other codelines. This is what happens when you don't respect the principles and rules of "change flow" (from Wingerd) which ultimately stem from the rules of smooth and steady (value-stream) flow from Lean.&lt;br /&gt;&lt;br /&gt;The Laws of Thermodynamics are about energy, entropy, and enthalpy. In the case of release management and codelines ...&lt;br /&gt;&lt;/http:&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;&lt;http: org="" blog="" stuff="" evolution=""&gt;&lt;span style="font-style: italic;"&gt;energy &lt;/span&gt;relates to effort &amp;amp; productivity&lt;/http:&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;&lt;http: org="" blog="" stuff="" evolution=""&gt;&lt;span style="font-style: italic;"&gt;entropy &lt;/span&gt;relates to stability/quality versus complexity&lt;/http:&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;&lt;http: org="" blog="" stuff="" evolution=""&gt;&lt;span style="font-style: italic;"&gt;enthalpy &lt;/span&gt;relates to "order" (i.e., in the sense of structure and architecture as Christopher Alexander uses the term "order"). It is the "inverse" of entropy.&lt;/http:&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family:georgia;"&gt;&lt;http: org="" blog="" stuff="" evolution=""&gt;&lt;br /&gt;We could call them them "&lt;span style="font-weight: bold; font-style: italic;"&gt;Laws of Codeline Dynamics&lt;/span&gt;" :-)&lt;br /&gt;&lt;br /&gt;Energy misspent degrades flow, creates waste, and hurts productivity/velocity. In traditional development, we often see "fixed scope" with resources and schedule having to vary in order to meet the "scope" constraint. IN Agile development we deliberately "flip" that triangle upside down (see the picture in the article at &lt;http: com="" articles="" p="703792"&gt; &lt;a href="http://www.informit.com/articles/article.aspx?p=703792"&gt;here &lt;/a&gt;under the title "The Biggest Change: Scope versus Schedule - Schedule Wins").  So we are fixing "resources" and "schedule" and allowing scope to vary.&lt;br /&gt;&lt;br /&gt;This might be one way of viewing the law of conservation of energy. If we fix resources and time (and insist on "sustainable pace" or "40hr work week") then we're basically putting in the same amount of effort over that time-box, but the key difference is how much of that effort results in "giving off energy" in the form of waste ("heat" or "friction") versus how much of that energy directly adds value. Both "Value" and "Enthalpy" degrade or depreciate over time, and adding more energy (effort) doesnt necessarily mean value is increased.&lt;br /&gt;&lt;br /&gt;To make sure that energy goes toward adding value (and minimizing waste) we need to focus on the flow of value, and hence the flow of change/efforts to create value (the latter is one reasonable definition of a "codeline" or a "workstream"). to ensure a smooth, steady, and regular/frequent flow, there are certain rules we need to impose and regulate stability within and across codelines to better manage all those releases.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Laws_of_thermodynamics"&gt;&lt;span style="font-weight: bold;"&gt;Zeroth Law of Thermodynamics&lt;/span&gt;&lt;/a&gt; (from Wikipedia)&lt;br /&gt;&lt;/http:&gt;&lt;/http:&gt;&lt;/span&gt;&lt;blockquote style="font-style: italic; color: rgb(153, 51, 153);"&gt;&lt;span style="font-family:georgia;"&gt;- If two thermodynamic systems are each in thermal equilibrium with a third, then they are in thermal equilibrium with each other.&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-family:georgia;"&gt;Translation to codelines ... this law of "thermal equilibrium" is a law of "codeline equilibrium" of sorts. (Does this mean If two codelines are are "in equlibrium" with a third codeline, then they are "in sync"? and with each other? here "in sync" doesnt mean they have the same frequency, it means their is some synchronization pattern regarding their relative stability and velocity. In Lean Terms, this would refer to "nested synchronization" and "harmonic cadence"). This might imply the "mainline" rule/pattern or one of Wingerd's rules of change-flow.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;First Law of Thermodynamics&lt;/span&gt;&lt;br /&gt;&lt;blockquote style="font-style: italic; color: rgb(153, 51, 153);"&gt;- In any process, the total energy of the universe remains the same.&lt;/blockquote&gt;This is the statement of conservation of energy for a thermodynamic system. It refers to the two ways that a closed system transfers energy to and from its surroundings - by the process of heating (or cooling) and the process of mechanical work.&lt;br /&gt;&lt;br /&gt;This relates to effort &amp;amp; changes expended resulting in the creation of value and/or the creation of waste. We have activities that add value (which we hope is development), activities that preserve value (which is what much of SCM attempts do, given that it doesnt directly create the changes, but tries to ensure that changes happen and are built/integrated with minimal loss of energy/productivity/quality), and then we have activities (or portions of  activities) that create waste (and increase entropy rather than preserving or increasing enthalpy/order)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Second Law of Thermodynamics&lt;/span&gt;&lt;br /&gt;&lt;blockquote style="font-style: italic; color: rgb(153, 51, 153);"&gt;- In any isolated system that is not in equilibrium, entropy will increase over time&lt;/blockquote&gt;So this is the law of increasing instability/complexity/disorder. The "key" to preventing this from happening is achieving and then maintaining/preserving "equilibrium". How do we achieve such equlibrium? we do it with the "release enabler" patterns for codeline management (which help ensure "nested synchronization" and "harmonic cadence" in addition to achieving a balance or equilibrium between stability and velocity (to smooth out flow).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Third Law of Thermodynamics&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;blockquote style="color: rgb(153, 51, 153);"&gt;&lt;span style="font-style: italic;"&gt;- As temperature approaches absolute zero, the entropy of a system&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;approaches a constant minimum.&lt;/span&gt;&lt;/blockquote&gt;In our case, "Temperature" could be regarded as a measure of "energy" or "activity". As the energy/activity of a codeline approaches zero (such as a release in the field that youve been supporting and would LOVE to  be able to retire that codeline sometime real soon), it's instability approaches a constant minimum.&lt;br /&gt;&lt;br /&gt;This is perhaps another more polite way of saying something we already said in our article on "&lt;a style="font-style: italic;" href="http://www.cmcrossroads.com/content/view/6752/534/"&gt;The Unchangeable Rules of Software Chang&lt;/a&gt;e", namely that "absolute stability" means &lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;dead&lt;/span&gt;&lt;/span&gt;  (as in, "no activity"), and should serve as a reminder that our goals is not the prevention of change in order to achieve some ideal "absolute stability", for such an absolute would mean the project not just "done" but "dead".&lt;br /&gt;&lt;br /&gt;On the other hand, it also speaks to us as a guideline for when it is safe to retire old codelines, and when to change their policy in accordance with their "energy level"&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/bradapp/~3/328104931/laws-of-codeline-thermodynamics.html" title="The Laws of Codeline (Thermo)Dynamics" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10280668&amp;postID=4986788325117368715&amp;isPopup=true" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/4986788325117368715/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/posts/default/4986788325117368715" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10280668/posts/default/4986788325117368715" /><author><name>Brad Appleton</name><uri>http://www.blogger.com/profile/15136106921504315995</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://bradapp.blogspot.com/2008/06/laws-of-codeline-thermodynamics.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10280668.post-565576242089515650</id><published>2008-05-26T09:04:00.002-05:00</published><updated>2008-07-06T09:09:59.103-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Lean" /><category scheme="http://www.blogger.com/atom/ns#" term="Version-Control" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><title type="text">An Agile Approach to Release Management</title><content type="html">&lt;span style="font-family: georgia;"&gt;My Agile SCM co-authors Rob Cowham, Steve Berczuk, and myself have written an article for the &lt;/span&gt;&lt;a style="font-family: georgia;" href="http://www.cmcrossroads.com/component/option,com_magazine/func,show_edition/id,181/Itemid,641/"&gt;May CM Journal&lt;/a&gt;&lt;span style="font-family: georgia;"&gt; on &lt;/span&gt;&lt;a style="font-family: georgia;" href="http://www.cmcrossroads.com/content/view/10487/641/"&gt;&lt;span style="font-style: italic;"&gt;An Agile Approach to Release Management&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: georgia;"&gt;We're relatively pleased with the article, and all collaborated together quite well.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/bradapp/~3/328086283/agile-approach-to-release-management.html" title="An Agile Approach to Release Management" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10280668&amp;postID=565576242089515650&amp;isPopup=true" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/565576242089515650/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/posts/default/565576242089515650" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10280668/posts/default/565576242089515650" /><author><name>Brad Appleton</name><uri>http://www.blogger.com/profile/15136106921504315995</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://bradapp.blogspot.com/2008/05/agile-approach-to-release-management.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10280668.post-5790293582281891571</id><published>2008-05-19T01:54:00.002-05:00</published><updated>2008-07-06T09:04:29.278-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Books" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><title type="text">BOOK: Software Teamwork - Taking Ownership for Success</title><content type="html">&lt;span style="font-family:georgia;"&gt;&lt;a href="http://http//www.agilejournal.com/content/view/788/186/"&gt;My review&lt;/a&gt; of Jim Brosseau's &lt;b&gt;Software Teamwork: Taking Ownership for Success&lt;/b&gt; is available in the &lt;a href="http://www.agilejournal.com/component/option,com_magazine/func,show_edition/id,68/Itemid,186/"&gt;May issue of the Agile Journal&lt;/a&gt;. It is nothing less than &lt;span style="font-weight: bold;"&gt;&lt;span style="font-style: italic;"&gt;outstanding!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;I found &lt;strong&gt;&lt;a href="http://www.amazon.com/Software-Teamwork-Taking-Ownership-Success/dp/0321488903http:/www.amazon.com/Outside-Software-Development-Successful-Stakeholder-based/dp/0131575511"&gt;Software Teamwork&lt;/a&gt;&lt;/strong&gt;&lt;strong&gt; &lt;/strong&gt;to be an immensely helpful, intensely practical, profusely insightful field guide to improving team outcomes and changing team behaviors by focusing on interpersonal action and personal leadership. This book belongs on any software team-leader's bookshelf, along with Jean Tabaka's &lt;a href="http://www.amazon.com/Collaboration-Explained-Facilitation-Software-Development/dp/0321268776"&gt;Collaboration Explained&lt;/a&gt; and Murray Cantor's &lt;a href="http://www.amazon.com/Software-Leadership-Guide-Successful-Development/dp/0201700441"&gt;Software Leadership&lt;/a&gt;.&lt;strong&gt;  &lt;/strong&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;&lt;br /&gt;Other articles in this issue on the theme of "&lt;span style="font-style: italic;"&gt;Challenges with Distributed Agile&lt;/span&gt;" are:&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.agilejournal.com/content/view/783/186/"&gt;Softening Iterations - Setting up for success&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.agilejournal.com/content/view/782/186/"&gt;Overcoming Resistance to Change with Distributed Agile&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.agilejournal.com/content/view/781/186/"&gt;Agile Adoption Patterns&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.agilejournal.com/content/view/786/186/"&gt;KPIs for Agile Teams&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/bradapp/~3/328086284/book-software-teamwork-taking-ownership.html" title="BOOK: Software Teamwork - Taking Ownership for Success" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10280668&amp;postID=5790293582281891571&amp;isPopup=true" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/5790293582281891571/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/posts/default/5790293582281891571" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10280668/posts/default/5790293582281891571" /><author><name>Brad Appleton</name><uri>http://www.blogger.com/profile/15136106921504315995</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://bradapp.blogspot.com/2008/05/book-software-teamwork-taking-ownership.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10280668.post-1524023058667622554</id><published>2008-05-13T00:47:00.000-05:00</published><updated>2008-07-06T08:54:21.063-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Version-Control" /><category scheme="http://www.blogger.com/atom/ns#" term="Links" /><title type="text">Distributed Version-Control Guide on InfoQ.com</title><content type="html">Nice little guide on&lt;a href="http://www.infoq.com/"&gt; InfoQ.com&lt;/a&gt; about &lt;a href="http://www.infoq.com/articles/dvcs-guide"&gt;Distributed Version Control&lt;/a&gt; - that's twice in two months that the "&lt;a href="http://www.infoq.com/agile"&gt;agile&lt;/a&gt;" section of &lt;a href="http://www.infoq.com/"&gt;InfoQ.com&lt;/a&gt; has had a decent article on the subject!&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/bradapp/~3/328074198/distributed-version-control-guide-on.html" title="Distributed Version-Control Guide on InfoQ.com" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10280668&amp;postID=1524023058667622554&amp;isPopup=true" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/1524023058667622554/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/posts/default/1524023058667622554" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10280668/posts/default/1524023058667622554" /><author><name>Brad Appleton</name><uri>http://www.blogger.com/profile/15136106921504315995</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://bradapp.blogspot.com/2008/05/distributed-version-control-guide-on.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10280668.post-9041091865949434728</id><published>2008-05-06T01:39:00.003-05:00</published><updated>2008-07-06T08:46:32.942-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><category scheme="http://www.blogger.com/atom/ns#" term="Links" /><title type="text">From PMBoK to Agility</title><content type="html">&lt;span style="font-family: georgia;"&gt;I recently learned that &lt;/span&gt;&lt;a style="font-family: georgia;" href="http://www.sligerconsulting.com/"&gt;Michelle Sliger&lt;/a&gt;&lt;span style="font-family: georgia;"&gt;, author of the wonderful 4 part series of articles on &lt;/span&gt;&lt;a style="font-family: georgia;" href="http://tinyurl.com/vvnjc"&gt;Relating PMBoK to Agile Practices&lt;/a&gt;&lt;span style="font-family: georgia;"&gt;, is co-authoring a book with Stacia Broderick entitled the &lt;/span&gt;&lt;a style="font-family: georgia;" href="http://http://www.amazon.com/Software-Project-Managers-Agility-Development/dp/0321502752"&gt;Software Project Manager's Bridge to Agility&lt;/a&gt;&lt;span style="font-family: georgia;"&gt;.  You can even download an excerpt from her website.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: georgia;"&gt;I'm looking forward to this book a great deal, judging by the &lt;/span&gt;&lt;a style="font-family: georgia;" href="http://www.sligerconsulting.com/agile-sofware-development-article-presentation.htm"&gt;excellent articles and presentations&lt;/a&gt;&lt;span style="font-family: georgia;"&gt; of hers that I've read.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/bradapp/~3/328074199/from-pmbok-to-agility.html" title="From PMBoK to Agility" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10280668&amp;postID=9041091865949434728&amp;isPopup=true" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/9041091865949434728/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/posts/default/9041091865949434728" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10280668/posts/default/9041091865949434728" /><author><name>Brad Appleton</name><uri>http://www.blogger.com/profile/15136106921504315995</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://bradapp.blogspot.com/2008/05/from-pmbok-to-agility.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10280668.post-2357922952340444564</id><published>2008-04-30T00:59:00.002-05:00</published><updated>2008-05-27T09:14:32.833-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CM" /><category scheme="http://www.blogger.com/atom/ns#" term="Books" /><title type="text">BOOK: Implementing ITIL Configuration Management</title><content type="html">&lt;span style="font-family:georgia;"&gt;I started reading through the book &lt;a href="http://www.informit.com/store/product.aspx?isbn=0132425939"&gt;&lt;b&gt;Implementing ITIL Configuration Management&lt;/b&gt;&lt;/a&gt;, by Larry Klosterboer. I'm really not what I'd consider an expert on &lt;a href="http://www.blogger.com/en.wikipedia.org/wiki/ITIL"&gt;ITIL&lt;/a&gt; nor &lt;a href="http://en.wikipedia.org/wiki/IT_Service_Management"&gt;IT Service Management&lt;/a&gt;, but I've had more than my fair share of exposure to it and am certainly no "slouch" in that area either.&lt;br /&gt;&lt;br /&gt;This book looks to be an overview of ITIL and to how it applies to configuration management. From there one can extrapolate how much of it relates to CM for not just IT assets and infrastructure but to the software development environment and to software development itself.&lt;br /&gt;&lt;br /&gt;The book includes coverage of the following (from the back cover):&lt;/span&gt;&lt;br /&gt;   &lt;ul&gt;&lt;li&gt;Assessing your current configuration management maturity and setting goals for improvement&lt;/li&gt;&lt;li&gt;Gathering and managing requirements to align ITIL with organizational needs&lt;/li&gt;&lt;li&gt;Describing the schema of your configuration management database (CMDB) &lt;/li&gt;&lt;li&gt;Identifying, capturing, and organizing configuration data&lt;/li&gt;&lt;li&gt;Choosing the best tools for your requirements&lt;/li&gt;&lt;li&gt;Integrating data and processes to create a unified logical CMDB and configuration management service&lt;/li&gt;&lt;li&gt;Implementing pilot projects to demonstrate the value of configuration management and to test your planning&lt;/li&gt;&lt;li&gt;Moving from a pilot to wide-scale enterprise deployment&lt;/li&gt;&lt;li&gt;Defining roles for deployment and ongoing staffing&lt;/li&gt;&lt;li&gt;Leveraging configuration management information: Reporting and beyond&lt;/li&gt;&lt;li&gt;Measuring and improving CMDB data accuracy&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family:georgia;"&gt;&lt;br /&gt;To take the next step, and for a REALLY thorough treatment of how IT service management and CM comes full circle to embrace all of enterprise architecture and software development, I highly recommend Charles Betz' book &lt;b&gt;&lt;a href="http://www.amazon.com/Architecture-Management-Resource-Planning-Governance/dp/0123705932/"&gt;Architecture and Patterns for IT Service Management, Resource Planning, and Governance: Making Shoes for the Cobbler's Children&lt;/a&gt;&lt;/b&gt;. As I mentioned in a &lt;a href="http://blog.bradapp.net/2007/02/book-on-erp-for-it.html"&gt;blog-entry early last year&lt;/a&gt;, this book "really ought to be required reading for anyone that fancies themselves a 'CM professional' (especially Software CM) or an 'Enterprise Architect.'"&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/bradapp/~3/299122793/book-implementing-itil-configuration.html" title="BOOK: Implementing ITIL Configuration Management" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10280668&amp;postID=2357922952340444564&amp;isPopup=true" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/2357922952340444564/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/posts/default/2357922952340444564" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10280668/posts/default/2357922952340444564" /><author><name>Brad Appleton</name><uri>http://www.blogger.com/profile/15136106921504315995</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://bradapp.blogspot.com/2008/04/book-implementing-itil-configuration.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10280668.post-3323920071044471515</id><published>2008-04-22T01:26:00.000-05:00</published><updated>2008-05-27T08:59:05.809-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Lean" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><title type="text">Three Pivotal Practices to Eliminate Waste</title><content type="html">&lt;span style="font-family:georgia;"&gt;I received my program for the &lt;i&gt;&lt;a href="http://www.sqe.com/bettersoftwareconf/"&gt;Better Software Conference &amp;amp; Expo&lt;/a&gt;&lt;/i&gt; this coming June 9-12 in Las Vegas (alas, I will be unable to attend). The description for the keynote that will be given by &lt;a href="http://www.rallydev.com/jeantabakabio.html"&gt;Jean Tabaka&lt;/a&gt; caught my eye. Jean Tabaka is an Agile Coach from &lt;a href="http://www.rallydev.com/"&gt;Rally Software Development&lt;/a&gt; and the author of &lt;a href="http://www.amazon.com/Collaboration-Explained-Facilitation-Software-Development/dp/0321268776" target="_blank"&gt;&lt;b&gt;Collaboration Explained: Facilitation Skills for Software Project Leaders&lt;/b&gt;&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Her keynote is entitled "&lt;i&gt;&lt;a href="http://www.sqe.com/bettersoftwareconf/Keynotes/Default.aspx"&gt;Attacking Waste in Software: Three Practices We Must Embrace Now&lt;/a&gt;&lt;/i&gt;" and the abstract is as follows:&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);font-family:times new roman;" &gt;&lt;br /&gt;&lt;blockquote&gt;One of the seven principles of Lean Thinking is “eliminate waste.” Eliminating waste means minimizing the cost of the resources we use to deliver software to our stakeholders. Jean Tabaka proposes three pivotal practices that we must embrace to aggressively attack waste in software delivery —- &lt;i&gt;Software as a Service (SaaS)&lt;/i&gt;, &lt;i&gt;Community&lt;/i&gt;, and &lt;i&gt;Fast Feature Throughput&lt;/i&gt;:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;&lt;i&gt;Software as a Service (SaaS)&lt;/i&gt;&lt;/b&gt; eliminates waste by deploying software-based services without the cost inherent in traditional software delivery—materials, shipping, time delay, and more.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;&lt;i&gt;Community&lt;/i&gt;&lt;/b&gt; involves stakeholders working together to create products rather than competing among themselves for limited resources. Community eliminates waste by democratizing software development to obviate the need for multiple systems with the same functionality.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;&lt;i&gt;Fast Feature Throughput&lt;/i&gt;&lt;/b&gt; refers to development methods that embrace change and quickly deliver value to customers. It eliminates waste by responding to market pull with short, incremental delivery cycles.&lt;/li&gt;&lt;/ol&gt;When IT and all software organizations embrace these practices, they will eliminate waste within their organizations, reduce the waste that consumes our entire industry, and ultimately support the broad 21st century global mandate to manage our scarce resources.&lt;br /&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;br /&gt;I can't help but think how these same "pivotal practices" apply equally well to Agile CM, resulting (presumably?) in &lt;i&gt;Software CM as a Service (SCMaaS)&lt;/i&gt;, &lt;i&gt;Community&lt;/i&gt;, and &lt;i&gt;Rapid Change-Flow&lt;/i&gt; (where the latter refers to both quickness and responsiveness of change assessment and approval, as well as to development velocity as the changes flow through codelines and become integrated, built, promoted and released).&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/bradapp/~3/299115572/three-pivotal-practices-to-eliminate.html" title="Three Pivotal Practices to Eliminate Waste" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10280668&amp;postID=3323920071044471515&amp;isPopup=true" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/3323920071044471515/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/posts/default/3323920071044471515" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10280668/posts/default/3323920071044471515" /><author><name>Brad Appleton</name><uri>http://www.blogger.com/profile/15136106921504315995</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://bradapp.blogspot.com/2008/04/three-pivotal-practices-to-eliminate.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10280668.post-4080531802960055802</id><published>2008-04-15T01:33:00.001-05:00</published><updated>2008-05-12T10:14:01.287-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CM" /><category scheme="http://www.blogger.com/atom/ns#" term="Design/Arch" /><title type="text">Rise of the Development Environment Architect</title><content type="html">Peter Eeles and I must be subconsciously on the same page. Because at the same time I was blogging about &lt;span style="font-family:georgia;"&gt;&lt;a href="http://bradapp.blogspot.com/2008/02/software-architecture-views-and.html"&gt;Software Architecture Views and Perspectives&lt;/a&gt; and &lt;a href="http://bradapp.blogspot.com/2008/02/software-architecture-quality.html"&gt;Software Architecture Quality Attributes&lt;/a&gt; and their direct applicability to SCM/ALM solution architecture (and software process in general), Peter was working on an article for IBM developerworks entitled &lt;a style="font-style: italic;" href="http://www.ibm.com/developerworks/rational/library/edge/08/apr08/eeles/"&gt;The Rise of the Development Environment Architect&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="font-family: verdana; font-style: italic; color: rgb(51, 51, 51);"&gt;[Development] environments present challenges; and, interestingly, these challenges are similar to those of the systems they support. For example, development environments have to deliver against the required functionality and properties (such as performance and usability), often have to coexist with legacy systems (such as, in the case of a development environment, existing methods and tools), and have to acknowledge other constraints (such as the distributed nature of development teams, and existing skills and infrastructure).&lt;br /&gt;&lt;br /&gt;All in all, creating a well-oiled development environment that accelerates, rather than hinders, project performance is a science unto itself. This is why IBM® Rational® has spent many years specifically developing a services capability that understands the challenges faced by organizations that 1) want to improve developer productivity, and 2) regard their development organization as a strategic differentiator, rather than simply a cost center.&lt;br /&gt;&lt;br /&gt;Our experience has led the Rational team to define a role within the software development lifecycle called the "development environment architect." In October 2007, one hundred of Rational's most experienced development environment architects from across the globe gathered together in the first conference dedicated to this role to share their experiences. This article is a result of that conference and the discussions that took place.&lt;br /&gt;&lt;br /&gt;As you read the concepts presented here, you may well question whether the development environment architect should be a role itself, or whether the individual or team who normally functions in the software or systems architect role should simply add consideration of the development environment to their list of architectural concerns. I believe that both propositions are valid. Furthermore, whenever the role of the "architect" is discussed, it is always qualified with the domain under consideration; thus we speak of a "building architect," "software architect," "systems architect," "enterprise architect," etc. The development environment is simply one of these domains, and one that is not traditionally a concern for the "software architect" role. I therefore believe that the "development environment architect" role is one that hasn't been emphasized before -- hence this article.&lt;br /&gt;&lt;br /&gt;This article has several audiences and objectives. It is relevant to organizations undertaking an improvement to their development environment and who need to understand the value of a development environment architect to help guide their initiative. It is also relevant to those who are responsible for the technical content of the development environment -- i.e., development environment architects -- because this article introduces this responsibility as a role not previously defined. Finally, this article may supplement material contained within a development environment, in helping communicate its content, the role of its architect, and the benefits of having such a role in place.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ibm.com/developerworks/rational/library/edge/08/apr08/eeles/"&gt;Read the full article here&lt;/a&gt;. I may blog later about the similarities and differences between the sort of architecture that Eeles describes versus my &lt;a href="http://blog.bradapp.net/2006/12/dimensions-and-views-of-scm.html"&gt;4+2 Views Model of SCM/ALM Solution Architecture&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/bradapp/~3/288747749/rise-of-development-environment.html" title="Rise of the Development Environment Architect" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10280668&amp;postID=4080531802960055802&amp;isPopup=true" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/4080531802960055802/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/posts/default/4080531802960055802" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10280668/posts/default/4080531802960055802" /><author><name>Brad Appleton</name><uri>http://www.blogger.com/profile/15136106921504315995</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://bradapp.blogspot.com/2008/04/rise-of-development-environment.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10280668.post-2904385965412635035</id><published>2008-04-09T00:11:00.005-05:00</published><updated>2008-05-12T09:59:29.172-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Books" /><title type="text">BOOK: Outside-in Software Development</title><content type="html">&lt;span style="font-family:georgia;"&gt;My review of &lt;b&gt;&lt;a href="http://www.blogger.com/Outside-in%20Software%20Development"&gt;Outside-In Software Development&lt;/a&gt;&lt;/b&gt; is in this month's edition of &lt;a href="http://www.agilejournal.com/"&gt;The Agile Journal&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt;&lt;span style="font-family: times new roman;"&gt; Kessler and Sweitzer's &lt;/span&gt;&lt;strong style="font-family: times new roman;"&gt;&lt;a href="http://www.amazon.com/Outside-Software-Development-Successful-Stakeholder-based/dp/0131575511"&gt;Outside-in Software Development&lt;/a&gt; &lt;/strong&gt;&lt;span style="font-family: times new roman;"&gt;should resonate deeply with all those who genuinely value the principle of customer collaboration in the Agile Manifesto, and with anyone who has played the role of Product Manager for a software project. This &lt;/span&gt;&lt;a style="font-family: times new roman;" href="http://www.joltawards.com/press/020408.htm"&gt;2008 Jolt award Finalist&lt;/a&gt;&lt;span style="font-family: times new roman;"&gt; is &lt;/span&gt;&lt;em style="font-family: times new roman;"&gt;not&lt;/em&gt;&lt;span style="font-family: times new roman;"&gt; a book about eliciting or prioritizing requirements (or "user stories") for an Agile project. This book goes beyond mere user-stories and their ranking or velocity to focus on uncovering the underlying needs and goals of your stakeholders and understanding what truly adds value for the customer and the business.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: times new roman;"&gt;...  I think Outside-in Software Development is a profoundly important book for anyone in the Agile or Lean "camps" because it addresses and embraces the often neglected pieces of the customer-relationship puzzle that emerge from the stakeholders' perspective, often after the software is released. It shows us how many of those same Lean and Agile values of collaboration, responsiveness, waste-elimination, and respect for people can be successfully applied to the users' experience with our software, and to the stakeholders' experience with ourselves in the service of realizing the very business value we strive to deliver.&lt;/span&gt; &lt;/blockquote&gt;&lt;br /&gt;&lt;a href="http://www.agilejournal.com/content/view/778/33/"&gt;Read the full review&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/bradapp/~3/288747750/book-outside-in-software-development.html" title="BOOK: Outside-in Software Development" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10280668&amp;postID=2904385965412635035&amp;isPopup=true" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/2904385965412635035/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/posts/default/2904385965412635035" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10280668/posts/default/2904385965412635035" /><author><name>Brad Appleton</name><uri>http://www.blogger.com/profile/15136106921504315995</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://bradapp.blogspot.com/2008/04/book-outside-in-software-development.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10280668.post-3284810152556271228</id><published>2008-04-02T09:29:00.005-05:00</published><updated>2008-05-12T10:00:00.881-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Books" /><title type="text">BOOK: Programming Groovy and Groovy Recipes</title><content type="html">&lt;span style="font-family:georgia;"&gt;I just received an advance copy of &lt;b&gt;&lt;a href="http://www.pragprog.com/titles/vslg/programming-groovy"&gt;Programming Groovy&lt;/a&gt;&lt;/b&gt; from the &lt;a href="http://www.pragprog.com/titles"&gt;Pragmatic Programmer's Bookshelf&lt;/a&gt;. This complements their work that came out last month on &lt;a href="http://www.pragprog.com/titles/sdgrvr"&gt;&lt;span style="font-weight: bold;"&gt;Groovy Recipes&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;From the &lt;/span&gt;&lt;span style="font-family:georgia;"&gt;&lt;b&gt;&lt;a href="http://www.pragprog.com/titles/vslg/programming-groovy"&gt;Programming Groovy&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:georgia;"&gt; book webpage:&lt;br /&gt;&lt;blockquote style="font-family: times new roman; font-style: italic; color: rgb(102, 0, 0);"&gt;Groovy brings you the best of both worlds: a flexible, highly productive, agile, dynamic language that runs on the rich framework of the Java Platform. Groovy preserves the Java semantics and extends the JDK to give you true dynamic language capabilities⎯programming in Groovy feels like you’re using an augmented Java. Programming Groovy will help you learn and take advantage of the latest version of this rich dynamic language, so you can be a more productive Java Platform developer.&lt;/blockquote&gt;From the &lt;/span&gt;&lt;span style="font-family:georgia;"&gt;&lt;a href="http://www.pragprog.com/titles/sdgrvr"&gt;&lt;span style="font-weight: bold;"&gt;Groovy Recipes&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family:georgia;"&gt; book webpage:&lt;/span&gt;&lt;span style="font-family:georgia;"&gt;&lt;br /&gt;&lt;blockquote style="font-family: times new roman; font-style: italic; color: rgb(102, 0, 0);"&gt;If you’re a busy Java professional who needs quick solutions to everyday problems, then Groovy Recipes is for you. The Groovy language and Grails web framework give you seamless integration with your legacy Java code while adding the flexibility and dynamism of a scripting language and giving you modern, agile, time-saving techniques. Groovy allows you to write code the way you always thought you should—you’ll never look at Java the same way again.&lt;/blockquote&gt;&lt;/span&gt;&lt;span style="font-family:georgia;"&gt;For those who like Ruby and Rails and the ability to access other Java frameworks and APIs, but also really want their Java-like syntax (and hence more than just JRuby), these are &lt;i&gt;the&lt;/i&gt; books to read. &lt;a href="http://groovy.codehaus.org/"&gt;Groovy&lt;/a&gt; even has its own answer to Rails called "&lt;a href="http://grails.codehaus.org/"&gt;Grails&lt;/a&gt;"&lt;br /&gt;&lt;br /&gt;See also:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://dev2dev.bea.com/pub/a/2006/10/introduction-groovy-grails.html"&gt;An Introduction to &lt;b&gt;Groovy&lt;/b&gt; and &lt;b&gt;Grails&lt;/b&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.dzone.com/links/groovy_with_grails_javas_fight_back_to_ruby_on_ra.html"&gt;&lt;b&gt;Groovy&lt;/b&gt; with &lt;b&gt;Grails&lt;/b&gt; – Java’s fight back to Ruby on Rails&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://groovy.dzone.com/"&gt;Groovy Zone | Everything for the Groovy &amp;amp; Grails developer&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://aboutgroovy.com/"&gt;AboutGroovy.com&lt;/a&gt;&lt;/li&gt;&lt;li&gt;                 &lt;a href="http://www.ibm.com/developerworks/views/java/libraryview.jsp?search_by=mastering+grails"&gt;                     &lt;i&gt;Mastering Grails&lt;/i&gt;                 &lt;/a&gt;:         Read more in this series to gain a further understanding of Grails and all you can         do with it. &lt;/li&gt;&lt;li&gt;&lt;a href="http://groovy.codehaus.org/"&gt;Groovy homepage&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;                 &lt;a href="http://grails.codehaus.org/"&gt;Grails homepage&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;                 &lt;a href="http://grails.org/doc/1.0.x/"&gt;Grails Framework Reference Documentation&lt;/a&gt;:         The Grails bible.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;                 &lt;a href="http://www.ibm.com/developerworks/views/java/libraryview.jsp?search_by=practically+groovy:"&gt;                     &lt;i&gt;Practically Groovy&lt;/i&gt;                 &lt;/a&gt;:         This developerWorks series is dedicated to exploring the practical uses of Groovy         and teaching you when and how to apply them successfully.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;                 &lt;a href="http://grails.org/plugins"&gt;Grails Plugins&lt;/a&gt;: Documentation for all         Grails plug-ins. &lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/bradapp/~3/288737196/book-programming-groovy-and-groovy.html" title="BOOK: Programming Groovy and Groovy Recipes" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10280668&amp;postID=3284810152556271228&amp;isPopup=true" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/3284810152556271228/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/posts/default/3284810152556271228" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10280668/posts/default/3284810152556271228" /><author><name>Brad Appleton</name><uri>http://www.blogger.com/profile/15136106921504315995</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://bradapp.blogspot.com/2008/04/book-programming-groovy-and-groovy.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10280668.post-4232682024902177505</id><published>2008-03-31T01:33:00.004-05:00</published><updated>2008-05-12T09:55:22.892-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Six-Sigma" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><category scheme="http://www.blogger.com/atom/ns#" term="Design/Arch" /><title type="text">Software Process-Line Architecture and Common Processes</title><content type="html">&lt;span style="font-family:georgia;"&gt;Extending the analogy of &lt;a href="http://blog.bradapp.net/2008/03/software-process-architecture-views-and.html"&gt;software architecture views and quality attributes for software process architecture&lt;/a&gt;, I'd like to spend some time discussing how &lt;a href="http://blog.bradapp.net/2008/03/software-product-line-architecture-and.html"&gt;software product lines&lt;/a&gt; relate to software process architecture and "common processes" across an enterprise.&lt;br /&gt;&lt;br /&gt;Many organizations strive for standard common processes, often as part of a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;CMM&lt;/span&gt;/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;CMMI&lt;/span&gt;-based process improvement. All too often I have seen the mantra of "common process" misused and abused to make the practitioners serve the process instead of the other way around.&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;b style="font-style: italic;"&gt;&lt;blockquote&gt;Processes don't create great software. People and Teams do!&lt;/blockquote&gt;&lt;/b&gt;And while the process needs to meet the needs of the business and the needs of the customer, it has to first and foremost serve the needs of the practitioners so that they in turn may better serve the needs of the business to deliver operational business value.&lt;br /&gt;&lt;br /&gt;Many in management seem to have the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;mis&lt;/span&gt;-impression that "common process" means "no tailoring" and everyone does everything the same way across products and projects throughout the organization. Process variation across products and projects is regarded as something to eschewed and stamped out, beating the offenders into compliance with top-down dictates and mandates and sanctions. If everyone does everything the same way then the people are more or less "plug-and-play replaceable" and can quickly and easily be reallocated to another project or product with zero learning-curve and associated start-up costs.&lt;br /&gt;&lt;br /&gt;This is a dangerous myth that causes irreparable harm to process improvement and common/standard process efforts. Anything that focuses on individuals and interactions as subservient to common processes and standard tools  is doomed to fail, and those organizations often end-up with the processes they deserve (along with many disgruntled, frustrated workers).&lt;br /&gt;&lt;br /&gt;The purpose of such common processes and tools is &lt;i&gt;not&lt;/i&gt; to be a rigid restrictive &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;straightjacket&lt;/span&gt; for replaceable people. The intended purpose is to recognize that such people are &lt;i&gt;irreplaceable&lt;/i&gt; and to provide a flexible knowledge framework to guide and enable them as the help each other collaborate to learn, grow, and lead in the discovery, practical application and effective execution of practices and improvements that are the best fit for a particular product, product, community and business-environment.&lt;br /&gt;&lt;br /&gt;The intended purpose common software processes is quite simply that of process and knowledge reuse! And as such it shares many of the same fundamental problems and solutions as that of software reuse. Indeed it could even be argued that software process reuse is but a special case of software reuse. And current prevailing industry wisdom on the subject suggests that software product-lines show the greatest promise of leveraging software reuse for greatest business value.&lt;br /&gt;&lt;br /&gt;In software reuse, we seem to recognize that "one size does not fit all." We acknowledge that even though different products, components, and platforms may share common features, that each one may have different project parameters and environments with different quality attributes and engineering-tradeoffs that need to be "preferred" and optimized that particular application: dynamic versus static, performance versus memory, storage versus latency, throughput versus bandwidth, single versus multi processing, optimistic versus pessimistic concurrency, security versus availability, and on and on.&lt;br /&gt;&lt;br /&gt;Software process reuse is no different. Different products and projects have their own uniquely differentiating value proposition (if not there would be no business-need to attempt them in the first place). And those differentiating aspects warrant many kinds of process variation across projects, products, technologies and teams.&lt;br /&gt;&lt;br /&gt;Those coming from a &lt;a href="http://en.wikipedia.org/wiki/Six_Sigma"&gt;SixSigma &lt;/a&gt;background may point out how SixSigma strives for reducing process variation. But it's all too easy to forget the context for that is when repeatably reproducing the same output from the same inputs for the same desired set of quality attributes and tradeoffs (not to mention the "kinds" of variation SigSigma is appropriate for trying to eliminate).&lt;br /&gt;&lt;br /&gt;So I would advocate the translation and application of &lt;a href="http://bradapp.blogspot.com/2008/03/software-product-line-architecture-and.html"&gt;software product-line practices&lt;/a&gt; to software processes (software "Process-Lines" or "Process Families" if you will) and the treatment of such &lt;a href="http://bradapp.blogspot.com/2008/03/software-product-line-architecture-and.html"&gt;common processes as first class architectures&lt;/a&gt; that need to accommodate the &lt;a href="http://blog.bradapp.net/2008/02/software-architecture-views-and.html"&gt;views and perspectives&lt;/a&gt; of ALL their critical stakeholders, and which should identify their essential &lt;a href="http://blog.bradapp.net/2008/02/software-architecture-quality.html"&gt;quality attributes&lt;/a&gt; and tradeoffs, approaches to &lt;a href="http://blog.bradapp.net/2008/03/commonality-and-variability-management.html"&gt;managing commonality and variability&lt;/a&gt;, and apply appropriate patterns and tactics (such as &lt;a href="http://blog.bradapp.net/2008/03/software-modifiability-tactics.html"&gt;modifiability tactics&lt;/a&gt; for software processes and projects) to meet those objectives.&lt;br /&gt;&lt;br /&gt;In light of the above, Lean &amp;amp; Agile software development define an &lt;a href="http://en.wikipedia.org/wiki/Architectural_Style"&gt;&lt;span style="font-style: italic;"&gt;architectural style&lt;/span&gt;&lt;/a&gt; for such process families and their architecture. Lean and Agile principles identify some of the critical &lt;a href="http://bradapp.blogspot.com/2008/03/software-process-architecture-views-and.html"&gt;process-quality attributes&lt;/a&gt; for such efforts. And the corresponding enterprise and its product offerings and their market segments may identify additional quality attributes that needs to met (such as security, regulatory auditability/compliance, large-scale and/or distributed projects and teams, etc.)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/bradapp/~3/288726551/software-process-line-architecture-and.html" title="Software Process-Line Architecture and Common Processes" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10280668&amp;postID=4232682024902177505&amp;isPopup=true" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/4232682024902177505/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/posts/default/4232682024902177505" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10280668/posts/default/4232682024902177505" /><author><name>Brad Appleton</name><uri>http://www.blogger.com/profile/15136106921504315995</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://bradapp.blogspot.com/2008/03/software-process-line-architecture-and.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10280668.post-3963088465706718216</id><published>2008-03-24T00:21:00.008-05:00</published><updated>2008-04-30T00:47:14.781-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Design/Arch" /><title type="text">Commonality and Variability Management</title><content type="html">&lt;span style="font-family:georgia;"&gt;Continuing the previous discussion on &lt;a href="http://bradapp.blogspot.com/2008/03/software-product-line-architecture-and.html"&gt;software product-lines&lt;/a&gt; ...&lt;br /&gt;&lt;br /&gt;Central to the notion of product-lines and product-families are tracking and managing three different kinds of software assets:&lt;ul&gt;&lt;li&gt;common/core assets that are shared by all the products in the product-line&lt;/li&gt;&lt;li&gt;shared assets that are common to some products but not others, and ...&lt;br /&gt;&lt;/li&gt;&lt;li&gt;product-specific assets (or custom-components) that are specific to a single product in the product-line.&lt;/li&gt;&lt;/ul&gt;Architecture for such product-lines is all about managing commonality and variability, and easing their evolution to achieve a diverse family of products to achieve economies of scale from reusing common assets. &lt;a href="http://www.jot.fm/issues/issue_2007_01/column1.pdf"&gt;Change/Configuration Management for SPLs&lt;/a&gt; is a very challenging problem. And variability management techniques often come down to a matter of &lt;a href="http://www.softwareproductlines.com/introduction/binding.html"&gt;binding-times&lt;/a&gt;. There are also more advanced strategies (some involving mathematical models).&lt;br /&gt;&lt;br /&gt;A few resources on the subject of Commonality and Variability are as follows:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A good (albeit old) article on &lt;a href="http://practise2.cs.tut.fi/pub/papers/VarMgnFinal.pdf"&gt;&lt;i&gt;Variability Management in Software Product Lines&lt;/i&gt;&lt;/a&gt; has a nice overview of some basic variability enabling techniques and the use of binding time&lt;/li&gt;&lt;li&gt;A dissertations on &lt;a href="http://dissertations.ub.rug.nl/faculties/science/2004/j.g.wijnstra/"&gt;&lt;i&gt;Variation Mechanisms and Multi-view Architecting in Platform-based Product Family Development&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://dx.doi.org/10.1142/S0218194004001804"&gt;&lt;i&gt;Expressing Product Diversification -- Categorizing And Classifying Variability In Software Product Family Engineering&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Coplien, Weiss and Hoffman wrote a nice overview article on &lt;a href="http://doi.ieeecomputersociety.org/10.1109/52.730836"&gt;&lt;i&gt;Commonality and Variability in Software Engineering&lt;/i&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Alan Shalloway has an excellent introductory article on &lt;a href="http://www.netobjectives.com/ezines/ez0407NetObj_Commonality_and_Variability_Analysis.pdf"&gt;&lt;i&gt;Commonality and Variability Analysis&lt;/i&gt;&lt;/a&gt; in conjunction with Design Patterns.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;In July 2006 I presented at the Dr Dobbs' &lt;i&gt;Architecture &amp;amp; Design World&lt;/i&gt; conference about &lt;a href="http://blog.bradapp.net/2006/08/scm-patterns-for-agile-architectures.html"&gt;SCM Patterns for Agile Architectures&lt;/a&gt;, which included a section on managing variations. I summarized that portion of the presentation as follows:&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;ul&gt;&lt;b&gt;Use Late-Binding instead of Branching:&lt;/b&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Build/Package Options&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Feature Configuration/Selection&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Business Rules&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Think about which of the following needs to "vary" and what needs to stay the same:&lt;/b&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Interface vs. Implementation vs. Integration&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Container vs. Content vs. Context&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Commonality &amp;amp; Variability analysis&lt;/b&gt; helps identify the core dimensions of variation for your project&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Use a combination of strategies&lt;/b&gt; based on the different types of needed variation and the "&lt;a href="http://www.blogger.com/blog.bradapp.net/2006/12/dimensions-and-views-of-scm.html"&gt;&lt;span style="font-style: italic;"&gt;dimension&lt;/span&gt;&lt;/a&gt;" in which each one operates&lt;/ul&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/bradapp/~3/276218401/commonality-and-variability-management.html" title="Commonality and Variability Management" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10280668&amp;postID=3963088465706718216&amp;isPopup=true" title="1 Comments" /><link rel="replies" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/3963088465706718216/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/posts/default/3963088465706718216" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10280668/posts/default/3963088465706718216" /><author><name>Brad Appleton</name><uri>http://www.blogger.com/profile/15136106921504315995</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://bradapp.blogspot.com/2008/03/commonality-and-variability-management.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10280668.post-5089768607040353598</id><published>2008-03-17T02:05:00.002-05:00</published><updated>2008-04-23T09:30:12.957-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Design/Arch" /><title type="text">Software Product-Line Architecture and Product-Families</title><content type="html">&lt;span style="font-family:georgia;"&gt;Extending the analogy of &lt;a href="http://blog.bradapp.net/2008/03/software-process-architecture-views-and.html"&gt;software architecture views and quality attributes for software process architecture&lt;/a&gt;, I'd like to spend some time discussing &lt;a href="http://en.wikipedia.org/wiki/Software_product_lines"&gt;software product lines&lt;/a&gt;. According to the &lt;a href="http://www.sei.cmu.edu/productlines/"&gt;SEI website on software product-lines&lt;/a&gt;, A &lt;i&gt;Software Product-Line&lt;/i&gt; is defines as follows:&lt;br /&gt;&lt;br /&gt;&lt;blockquote face="times new roman" style="font-style: italic;"&gt;A software product line (SPL) is a set of software-intensive systems that share a common, managed set of features satisfying the specific needs of a particular market segment or mission and that are developed from a common set of core assets in a prescribed way.&lt;/blockquote&gt;&lt;br /&gt;At &lt;a href="http://www.softwareproductlines.com/"&gt;SoftwareProductsLines.com&lt;/a&gt;, Charles Krueger defines them as follows:&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="font-family: times new roman; font-style: italic;"&gt;Software product lines refers to engineering techniques for creating a portfolio of similar software systems from a shared set of software assets using a common means of production.&lt;br /&gt;&lt;br /&gt;The key objectives of software product lines are: to capitalize on commonality and manage variation in order to reduce the time, effort, cost and complexity of creating and maintaining a product line of similar software systems.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Capitalize on commonality&lt;/span&gt; through consolidation and sharing within the software asset inputs, thereby avoiding duplication and divergence.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Manage variation&lt;/span&gt; by clearly defining the variation points and decision model, thereby making the location, rationale, and dependencies for variation explicit.&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;br /&gt;Closely related to software product lines is the notion of &lt;i&gt;software product families&lt;/i&gt; and &lt;a href="http://en.wikipedia.org/wiki/Product_Family_Engineering"&gt;Product Family Engineering&lt;/a&gt;. In many cases the terms product-line and product-family are used interchangeably. Sometimes a product-family is slightly more general in that a product-family may comprise one or more product-lines. The SEI has established a &lt;a href="http://www.sei.cmu.edu/productlines/framework.html"&gt;Framework for Software Product-Line Practices&lt;/a&gt; that encompasses topics such as architecture, organization, patterns, business-case, and even a section on &lt;a href="http://www.sei.cmu.edu/productlines/frame_report/config.man.htm"&gt;configuration management for software product-lines&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/bradapp/~3/276197667/software-product-line-architecture-and.html" title="Software Product-Line Architecture and Product-Families" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10280668&amp;postID=5089768607040353598&amp;isPopup=true" title="2 Comments" /><link rel="replies" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/5089768607040353598/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/posts/default/5089768607040353598" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10280668/posts/default/5089768607040353598" /><author><name>Brad Appleton</name><uri>http://www.blogger.com/profile/15136106921504315995</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://bradapp.blogspot.com/2008/03/software-product-line-architecture-and.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10280668.post-7077410470437250020</id><published>2008-03-09T01:14:00.007-06:00</published><updated>2008-04-23T08:25:57.100-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><category scheme="http://www.blogger.com/atom/ns#" term="Design/Arch" /><title type="text">Software Process Architecture Views and Quality Attributes</title><content type="html">&lt;span style="font-family:georgia;"&gt;After my previous postings on &lt;a href="http://blog.bradapp.net/2008/02/software-architecture-views-and.html"&gt;Software Architecture Views and Perspectives&lt;/a&gt;, &lt;a href="http://blog.bradapp.net/2008/02/software-architecture-quality.html"&gt;Software Architecture Quality Attributes&lt;/a&gt; and &lt;a href="http://blog.bradapp.net/2008/03/software-modifiability-tactics.html"&gt;Software Modifiability Tactics&lt;/a&gt;, the question remains as to what all this has to do with Agile processes or with CM.&lt;br /&gt;&lt;br /&gt;Well, about a year ago I wrote that &lt;a href="http://blog.bradapp.net/2007/05/software-cm-is-not-process.html"&gt;Software CM is NOT a Process!&lt;/a&gt; ...&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="color: rgb(102, 51, 51); font-family: trebuchet ms;"&gt;&lt;i&gt;Software CM creates the medium through which software development changes &amp;amp; activities must flow. &lt;b&gt;Therefore, Software CM is the intentional architecture of software development change-flow.&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;The elements of this Software CM architecture include practices, tools &amp;amp; technology, teams &amp;amp; organizations, valued deliverables &amp;amp; intermediate work-products, changes to and assemblies of these deliverables &amp;amp; work-products, and the set of needed status/tracking reports &amp;amp; measures.&lt;/blockquote&gt;&lt;br /&gt;So now I want to take the perspective of Software CM as an architecture, and I want to consider questions like:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;What are the views and perspectives of an SCM solution architecture?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;How do &lt;i&gt;software&lt;/i&gt; architecture quality attributes relate to software CM (or even process) quality attributes?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;What are the quality attributes that, if attained, will make the resulting software CM and/or process environment &lt;i&gt;Agile?&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I think I answered the first of these questions in my &lt;a href="http://blog.bradapp.net/2006/12/dimensions-and-views-of-scm.html"&gt;Dimensions and Views of SCM Architecture&lt;/a&gt;. I take the perspective of a 4+2 views model comprising Product, Project, Evolution, Environment, Process (+1), and Enterprise (+2). These views straddle the conceptual and physical aspect of both the content and context of the different kinds of "containers" that are to be managed and interrelated. And the dimensions of SCM complexity that prove most challenging are those of scale and diversity, and of differences between artifact change/creation time and decision binding-time.&lt;br /&gt;&lt;br /&gt;The next question involves translating what &lt;i&gt;Availability, Modifiability, Performance, Security, Testability&lt;/i&gt;, and &lt;i&gt;Usability&lt;/i&gt; mean for a "process" architecture. I'll make an initial stab at that (feedback is encouraged):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Process &lt;i&gt;Availability&lt;/i&gt;&lt;/b&gt; might correspond to the availability of the underlying tools and technology that support the process. But it might also need to include both the physical and cognitive "availability" of the process itself. It probably also needs to include the availability of key information (i.e., metrics and reports) to create information radiators, and big visible charts &amp;amp; reports.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Process &lt;i&gt;Modifiability&lt;/i&gt;&lt;/b&gt; is the ease with which the process itself can be adapted, extended/contracted, perhaps even "refactored", and ultimately improved. Rigid processes can't be changed very rapidly in response to a change in business need or direction.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Process &lt;i&gt;Performance&lt;/i&gt;&lt;/b&gt; is probably what most closely translates to flow or throughput of software development. (Although for tools and the supporting computing environment, it clearly has the usual meaning there.)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Process &lt;i&gt;Security&lt;/i&gt;&lt;/b&gt; is ... hmmn, that's a tough one! Would it mean "safety" as in keeping the practitioner safe/secure? Would it mean process quality? Or might it mean the security of the process itself in terms of making sure that only authorized/authenticated persons have access to the knowledge of the system (its requirements, designs, etc.) which may be proprietary/confidential and a significant competitive advantage, and that only those authorized individuals are allowed to execute the roles &amp;amp; workflows that create &amp;amp; modify that system knowledge? Perhaps "security" in this context is all about &lt;i&gt;trust&lt;/i&gt; and trustworthiness: How well does the process ensure the trust and integrity of the system and of itself? How well does it foster trust among its practitioners and consumers?&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Process &lt;i&gt;Testability&lt;/i&gt;&lt;/b&gt; might correspond to the ease with which the process and its results can be tracked/reported (transparency) and audited (auditability). Perhaps it is also related to the ease with which parts of the process can be automated.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Process &lt;i&gt;Usability&lt;/i&gt;&lt;/b&gt; probably has to do with the amount of "friction" the process imposes on the flow/throughput of development. Is it too big? too complex? a poor fit? easy to understand and execute? easy to tell if you did it correctly?&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;What are the "quality" attributes of an "agile" process? Do they include ALL of the above? what about: adaptive? lean? result-driven (i.e. "working software")? self-organization? iterative? collaborative?&lt;br /&gt;&lt;br /&gt;How about some of the traditional "quality" attributes of a CM system: traceability (vs. transparency?), reproduceability? repeatability?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/bradapp/~3/276157928/software-process-architecture-views-and.html" title="Software Process Architecture Views and Quality Attributes" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10280668&amp;postID=7077410470437250020&amp;isPopup=true" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/7077410470437250020/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/posts/default/7077410470437250020" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10280668/posts/default/7077410470437250020" /><author><name>Brad Appleton</name><uri>http://www.blogger.com/profile/15136106921504315995</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://bradapp.blogspot.com/2008/03/software-process-architecture-views-and.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10280668.post-7192036701499255742</id><published>2008-03-02T01:32:00.001-06:00</published><updated>2008-03-09T11:23:37.245-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Design/Arch" /><category scheme="http://www.blogger.com/atom/ns#" term="Links" /><title type="text">Software Modifiability Tactics</title><content type="html">&lt;span style="font-family: georgia;"&gt;Getting back to the subject of my previous blog-entries on &lt;a href="http://bradapp.blogspot.com/2008/02/software-architecture-views-and.html"&gt;Software Architecture Views and Perspectives&lt;/a&gt; and &lt;a href="http://bradapp.blogspot.com/2008/02/software-architecture-quality.html"&gt;Software Architecture Quality Attributes&lt;/a&gt;, I wanted to talk more specifically about the quality attribute of &lt;i&gt;Modifiability&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;The &lt;i&gt;Modifiability&lt;/i&gt; of a software system is related to how minimal is the cost/effort to develop and deploy changes to the software. This relates to well known concepts and principles of coupling, cohesion, maintainability, etc. and is the basis for many of the elements of object-oriented, component-based, and aspect-oriented design ("reuse" is a close cousin for all these as well).&lt;br /&gt;&lt;br /&gt;Software Modifiability Tactics are presented in &lt;a href="http://www.tar.hu/softarchpract/ch05lev1sec3.html"&gt;section 5.3 of Software Architecture in Practice&lt;/a&gt;. A taxonomy is given which relates architectural tactics to architectural patterns ("styles") and the design patterns which are largely concerned with achieving the attribute (in this case "modifiability") for various types of products and contexts. The article &lt;a href="http://www.sei.cmu.edu/news-at-sei/columns/the_architect/architect.htm"&gt;&lt;i&gt;Understanding Architectural Patterns in Terms of Tactics and Models&lt;/i&gt;&lt;/a&gt; even has a nice matrix that maps architectural patterns or styles to the various kinds of modifiability tactics.&lt;br /&gt;&lt;br /&gt;The taxonomy for software modifiability tactics is broken down as follows:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Localize Changes&lt;/b&gt; (increase cohesion)&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Maintain Semantic Coherence&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Anticipate Expected [types of] Changes&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Generalize the Module&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Limit Possible Options&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Abstract Common Services&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Prevent Ripple Effects&lt;/b&gt; (reduce coupling)&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Hide Information&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Maintain Existing Interfaces&lt;/li&gt;&lt;li&gt;Restrict Communication Paths&lt;/li&gt;&lt;li&gt;Use an Intermediary&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Defer Binding-time&lt;/b&gt; (defer decision-making)&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Run-time Registration&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Configuration Files&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Polymorphism/Delegation&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Component Replacement&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Adhere to Defined Protocols&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;In September 2007, an &lt;a href="http://www.sei.cmu.edu/publications/documents/07.reports/07tr002.html"&gt;SEI Technical Report on Software Modifiability Tactics&lt;/a&gt; was published that provides a comprehensive discussion of these modifiability tactics and the architecture/design patterns that can be used to implement them (and some of the tradeoffs involved).&lt;br /&gt;&lt;br /&gt;Links and Resources on Software Modifiability Tactics:&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.tar.hu/softarchpract/ch05lev1sec3.html"&gt;Modifiability Tactics, Chapter 5 section 3&lt;/a&gt; of &lt;a ref="http://www.tar.hu/softarchpract/"&gt;&lt;b&gt;Software Architecture in Practice&lt;/b&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sei.cmu.edu/news-at-sei/columns/the_architect/architect.htm"&gt;&lt;i&gt;Understanding Architectural Patterns in Terms of Tactics and Models&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sei.cmu.edu/publications/documents/07.reports/07tr002.html"&gt;&lt;i&gt;Modifiability Tactics&lt;/i&gt;&lt;/a&gt;, SEI @ CMU Technical Report CMU/SEI-2007-TR-002&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cs.aau.dk/%7Emly/dbsa07/L8_Design_and_Tactics.pdf"&gt;Design and Tactics&lt;/a&gt;, Lecture notes from an Aalborg University course on &lt;a href="http://www.cs.aau.dk/%7Emly/dbsa07/"&gt;Database and Software Architecture&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;In a subsequent blog-entry I will muse about how Modifiability relates to Agility in both software architecture/design and in software &lt;i&gt;process&lt;/i&gt; architecture/design.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/bradapp/~3/248403673/software-modifiability-tactics.html" title="Software Modifiability Tactics" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10280668&amp;postID=7192036701499255742&amp;isPopup=true" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/7192036701499255742/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/posts/default/7192036701499255742" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10280668/posts/default/7192036701499255742" /><author><name>Brad Appleton</name><uri>http://www.blogger.com/profile/15136106921504315995</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://bradapp.blogspot.com/2008/03/software-modifiability-tactics.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10280668.post-8866718974936372144</id><published>2008-02-25T00:32:00.006-06:00</published><updated>2008-05-14T03:02:34.165-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CM" /><category scheme="http://www.blogger.com/atom/ns#" term="Version-Control" /><category scheme="http://www.blogger.com/atom/ns#" term="Links" /><title type="text">Distributed Version Control Systems</title><content type="html">&lt;span style="font-family:georgia;"&gt;A colleague of mine had a question for me about Distributed Versions Control Systems (or DVCS). There are a growing number of such systems these days: &lt;a href="http://www.selenic.com/mercurial/wiki/"&gt;Mercurial&lt;/a&gt;, &lt;a href="http://bazaar-vcs.org/"&gt;Bazaar&lt;/a&gt;, &lt;a href="http://git.or.cz/"&gt;git&lt;/a&gt;, &lt;a href="http://svk.elixus.org/"&gt;svk&lt;/a&gt;, &lt;a href="http://www.blogger.com/www.bitkeeper.com/"&gt;BitKeeper&lt;/a&gt;, &lt;a href="http://gnuarch.org/"&gt;Gnu Arch&lt;/a&gt;, &lt;a href="http://www.darcs.net/"&gt;darcs&lt;/a&gt;, &lt;a href="http://www.monotone.ca/"&gt;Monotone&lt;/a&gt;, &lt;a href="http://codeville.org/"&gt;Codeville&lt;/a&gt;, &lt;a href="http://www.nongnu.org/arx/"&gt;Arx&lt;/a&gt;, just to name a few. I referred them to a &lt;a href="http://www.dwheeler.com/essays/scm.html"&gt;good essay by David Wheeler&lt;/a&gt; that talks about the fundamental differences between distributed vs centralized VCS (among other things).&lt;br /&gt;&lt;br /&gt;I also Googled on the topic and came across some interesting links:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.infoq.com/articles/dvcs-guide"&gt;Distributed Version Control Systems: A Not-So-Quick Guide Through&lt;/a&gt;  &lt;i&gt;[link added 5/13/2008]&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Distributed_revision_control"&gt;Wikipedia page on Distributed Revision Control&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Eric Raymond's &lt;a href="http://www.catb.org/esr/writings/version-control/"&gt;Understanding Version Control&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Ben Sussman on the &lt;a href="http://blog.red-bean.com/sussman/?p=20"&gt;Risks of DVCS&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Ian Clatworthy on &lt;a href="http://ianclatworthy.wordpress.com/2007/10/11/why-distributed-version-control-matters/"&gt;Distributed Version Control: Why and How&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.ianbicking.org/distributed-vs-centralized-scm.html"&gt;Ian Bicking on Distributed vs Centralized VCs&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Another blog-entry on &lt;a href="http://rg03.wordpress.com/2007/06/10/distributed-versus-centralized-version-control-systems/"&gt;DVCS vs VCS&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/"&gt;Introduction to Distributed Version Control Illustrated&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.dribin.org/dave/blog/archives/2007/12/28/dvcs/"&gt;Choosing a Version Control System&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.russellbeattie.com/blog/distributed-revision-control-systems-git-vs-mercurial-vs-svn"&gt;Distributed VCSes: git vs. Mercurial vs. SVN&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://jamesgolick.com/2008/1/21/why-distributed-version-control-matters-to-you-today"&gt;Why Distributed Version Control matters to you, Today!&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://kylecordes.com/2007/10/16/dvcs-80-percent/"&gt;Distributed VCS for the other 80%&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://weblogs.mozillazine.org/preed/2006/11/version_control_system_shootou.html"&gt;Distributed VCS Shootout Redux&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.onlamp.com/pub/a/onlamp/2004/01/29/scm_overview.html"&gt;The New Breed of VCSes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://wincent.com/a/about/wincent/weblog/archives/2007/10/why_distributed.php"&gt;Why Distributed VCS?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://www.zooko.com/revision_control_quick_ref.html"&gt;Zooko's Quick Ref Guide to Free DVCS&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Anyone else have any links they recommend on the topic? (please, no spam/marketing)&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/bradapp/~3/244695413/distributed-version-control-systems.html" title="Distributed Version Control Systems" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10280668&amp;postID=8866718974936372144&amp;isPopup=true" title="2 Comments" /><link rel="replies" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/8866718974936372144/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/posts/default/8866718974936372144" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10280668/posts/default/8866718974936372144" /><author><name>Brad Appleton</name><uri>http://www.blogger.com/profile/15136106921504315995</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://bradapp.blogspot.com/2008/02/distributed-version-control-systems.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10280668.post-6853701212883972827</id><published>2008-02-18T01:35:00.000-06:00</published><updated>2008-02-19T01:47:36.602-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Lean" /><category scheme="http://www.blogger.com/atom/ns#" term="Books" /><category scheme="http://www.blogger.com/atom/ns#" term="Project-Mgmt" /><title type="text">BOOK: Lean Project Management</title><content type="html">&lt;span style="font-family:georgia;"&gt;My review of &lt;b&gt;&lt;a href="http://www.amazon.com/Lean-Project-Management-Principles-Success/dp/1419644068/"&gt;Lean Project Management&lt;/a&gt;&lt;/b&gt; is in the February 2008 issue of &lt;a href="http://www.agilejournal.com/"&gt;the Agile Journal.&lt;/a&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;blockquote&gt;&lt;a href="http://www.amazon.com/Lean-Project-Management-Principles-Success/dp/1419644068/"&gt;Lean Project Management: Eight Principles for Success&lt;/a&gt;, is actually a second edition of the eBook &lt;em&gt;Eight Secrets to Supercharge your Project with CCPM&lt;/em&gt;. It is available both in hardcopy and eBook formats. Lawrence Leach (&lt;a href="http://www.advanced-projects.com/"&gt;www.advanced-projects.com&lt;/a&gt;) is perhaps best known as author of one of the most comprehensive texts on the subject of &lt;a href="http://en.wikipedia.org/wiki/Critical_chain"&gt;Critical Chain Project Management&lt;/a&gt; (CCPM). In this book, subtitled "&lt;em&gt;Combining CCPM and Lean tools to accelerate project results&lt;/em&gt;," the author essentially integrates Lean Thinking into CCPM, along with elements from the &lt;a href="http://en.wikipedia.org/wiki/Theory_of_Constraints"&gt;Theory of Constraints&lt;/a&gt; (TOC) and &lt;a href="http://en.wikipedia.org/wiki/Project_Management_Body_of_Knowledge"&gt;PMBoK/PMI&lt;/a&gt;. Leach calls the result &lt;em&gt;Lean Project Management&lt;/em&gt; or LPM.&lt;br /&gt;&lt;br /&gt;... All in all, I found &lt;em&gt;Lean Project Management&lt;/em&gt; to be a fairly quick read providing a good overview of some TOC and CCPM fundamentals and how they align with Lean thinking, as well as how Lean thinking can be applied to some of more traditional PMBoK methods. Someone looking for a more comprehensive reference on TOC thinking processes and CCPM would probably be better off reading &lt;a href="http://www.amazon.com/exec/obidos/search-handle-url/104-0892980-7646303?_encoding=UTF8&amp;amp;search-type=ss&amp;amp;index=books&amp;amp;field-author=Eliyahu%20M.%20Goldratt"&gt;Goldratt's books&lt;/a&gt;, the work of &lt;a href="http://www.amazon.com/exec/obidos/search-handle-url/104-0892980-7646303?_encoding=UTF8&amp;amp;search-type=ss&amp;amp;index=books&amp;amp;field-author=H.%20William%20Dettmer"&gt;William H. Dettmer&lt;/a&gt;, and the 2&lt;sup&gt;nd&lt;/sup&gt; edition of Leach's &lt;a href="http://www.amazon.com/Critical-Project-Management-Professional-Development/dp/1580530745"&gt;&lt;strong&gt;Critical Chain Project Management&lt;/strong&gt;&lt;/a&gt;. But for those wanting the bird's eye overview with a brief "zoom in" on some of the details, along with how Lean thinking helps tie it all together with some of the more traditional project management methods, Lawrence Leach's &lt;em&gt;Lean Project Management&lt;/em&gt; is a nice overview text describing some of the most powerful aspects of TOC and CCPM through "Lean eyes for the PM guy!"&lt;/blockquote&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a href="http://www.agilejournal.com/articles/featured-books/featured-book%3a-lean-project-management%3a-eight-principles-for-success-by-lawrence-p.-leach.html"&gt;Read the full review&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/bradapp/~3/237416180/book-lean-project-management.html" title="BOOK: Lean Project Management" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10280668&amp;postID=6853701212883972827&amp;isPopup=true" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/6853701212883972827/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/posts/default/6853701212883972827" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10280668/posts/default/6853701212883972827" /><author><name>Brad Appleton</name><uri>http://www.blogger.com/profile/15136106921504315995</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://bradapp.blogspot.com/2008/02/book-lean-project-management.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10280668.post-1935597439560084532</id><published>2008-02-14T01:17:00.002-06:00</published><updated>2008-02-18T09:04:08.350-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Design/Arch" /><category scheme="http://www.blogger.com/atom/ns#" term="Links" /><title type="text">Software Architecture Quality Attributes</title><content type="html">&lt;span style="font-family:georgia;"&gt;Following on to my previous blog-entry about &lt;a href="http://bradapp.blogspot.com/2008/02/software-architecture-views-and.html"&gt;Software Architecture Views and Perspectives&lt;/a&gt;, the book "&lt;a style="font-weight: bold;" href="http://www.tar.hu/softarchpract/index.html"&gt;Software Architecture in Practice&lt;/a&gt;" also describes a method called &lt;i&gt;&lt;a href="http://www.sei.cmu.edu/architecture/add_method.html"&gt;Attribute-Driven Design&lt;/a&gt;&lt;/i&gt; or ADD. This is not yet-another-design-method like BDD or TDD. ADD is concerned software architectural design (so it's at the "architecture-level" rather than what we might normally think of as the "design-level").&lt;br /&gt;&lt;br /&gt;ADD is concerned with explicitly identifying the desired quality attributes of an architecture. Many of us know that simply implementing the (functional) requirements correctly is just the beginning of any good design, and possibly not even the most important attribute of the design. In addition to other attributes like security or availability, there are also attributes like modifiability of an architecture. And it is often these attributes that, if attained, are the true indication of whether or not we've done a good job.&lt;/span&gt;&lt;span style="font-family:georgia;"&gt;&lt;br /&gt;&lt;br /&gt;Some of the more commonly desired quality attributes are:&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li style="font-weight: bold; font-style: italic;"&gt;&lt;span style="font-family:georgia;"&gt; Availability&lt;/span&gt;&lt;/li&gt;&lt;li style="font-weight: bold; font-style: italic;"&gt;&lt;span style="font-family:georgia;"&gt;Modifiability&lt;/span&gt;&lt;/li&gt;&lt;li style="font-weight: bold; font-style: italic;"&gt;&lt;span style="font-family:georgia;"&gt;Performance&lt;/span&gt;&lt;/li&gt;&lt;li style="font-weight: bold; font-style: italic;"&gt;&lt;span style="font-family:georgia;"&gt;Security&lt;/span&gt;&lt;/li&gt;&lt;li style="font-weight: bold; font-style: italic;"&gt;&lt;span style="font-family:georgia;"&gt;Testability&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Usability&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family:georgia;"&gt;Many of us have also often had difficulty trying to explain to management the importance of things like "refactoring" and what that modifiability gives us in return. ADD makes such quality attributes an explicit goal of the architecture design process. One of the first things it asks us to do is the necessary homework (research and interviews) to analyze and identify what are the desired quality attributes for our architecture and its stakeholders. It also defines use-case-like entities called &lt;span style="font-style: italic;"&gt;Quality Attribute Scenarios&lt;/span&gt;, which is a way of expressing such non-functional requirements as an explicit use-case (which can then have an associated business-value).&lt;br /&gt;&lt;br /&gt;ADD also explicitly mentions the use of patterns and tactics as part of its methodology for achieving quality attributes and making design tradeoffs (quality attributes are often the "forces" for a pattern). For each of the common quality attributes above, it identifies a taxonomy of common tactics and patterns used to make good tradeoff decisions for particular aspects of the design.&lt;br /&gt;&lt;br /&gt;Although it look s a bit heavyweight, ADD looks promising in its use of patterns and tactics and recursive/iterative nature. But what I look most about it is that fact that it makes explicit the kinds of quality attributes and their non-functional use-cases or "stories" which can then have business value/priority associated with it, and thereby justify the existence of activities that help realize those attributes of the system.&lt;br /&gt;&lt;br /&gt;For some more information on ADD, see the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.tar.hu/softarchpract/index.html"&gt;Software Architecture in Practice&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;The SEI webpage on &lt;a href="http://www.sei.cmu.edu/architecture/add_method.html"&gt;Attribute-Driven Design&lt;/a&gt;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;The paper &lt;a href="http://www.sei.cmu.edu/plp/bilbao_paper.pdf"&gt;&lt;span style="font-style: italic;"&gt;Quality Attribute Design Primitives and ADD&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;a href="http://csdl2.computer.org/comp/proceedings/icse/2001/1050/00/10500745.pdf"&gt;Introduction to the ADD Method&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;&lt;a href="ftp://ftp.sei.cmu.edu/pub/documents/07.reports/07tr005.pdf"&gt;A Practical Example of Applying ADD&lt;/a&gt;&lt;/span&gt; (SEI Technical Report)&lt;/li&gt;&lt;li&gt;&lt;a href="http://realworldsa.dotnetdevelopersjournal.com/softwarearchitecturelinks.htm"&gt;Links from Real-world Software Architecture&lt;/a&gt; in .NET Developer's Journal&lt;/li&gt;&lt;li&gt;Presentation from Paul Clements on &lt;a href="http://www.it.iitb.ac.in/ClementSeminarSeries/Seminar3DesigningSoftwareArchitectures.pdf"&gt;&lt;span style="font-style: italic;"&gt;Designing Software Architectures&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The paper &lt;a href="http://www.cse.lehigh.edu/%7Ecrh/Publications/2005/HofmeisterWICSA05.pdf"&gt;&lt;span style="font-style: italic;"&gt;Generalizing a Model of Software Architecture Design from Five Industrial Approaches&lt;/span&gt;&lt;/a&gt; (by a star-studded list of authors in the field)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Now I want to ask the question of &lt;span style="font-style: italic;"&gt;applying this same idea to software processes and software process architecture&lt;/span&gt;:  Seems to me that in Agile development, we're really not anti-process, but there are some really important things (quality attributes of a process?) that we feel are often left out to pasture by a lot of the very formal, CMMI-based processes we witness. Perhaps they're ignoring these important process-design quality attributes? (as embodied in the Agile Manifesto?)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/bradapp/~3/237011013/software-architecture-quality.html" title="Software Architecture Quality Attributes" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10280668&amp;postID=1935597439560084532&amp;isPopup=true" title="2 Comments" /><link rel="replies" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/1935597439560084532/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/posts/default/1935597439560084532" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10280668/posts/default/1935597439560084532" /><author><name>Brad Appleton</name><uri>http://www.blogger.com/profile/15136106921504315995</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://bradapp.blogspot.com/2008/02/software-architecture-quality.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10280668.post-2993399780527471159</id><published>2008-02-10T02:01:00.005-06:00</published><updated>2008-03-09T11:26:37.531-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Design/Arch" /><category scheme="http://www.blogger.com/atom/ns#" term="Links" /><title type="text">Software Architecture Views and Perspectives</title><content type="html">&lt;span style="font-family:georgia;"&gt;I'm fairly interested in the literature on Software Architecture Views and Perspectives. Folks here may remember by work on &lt;a style="font-style: italic;" href="http://blog.bradapp.net/2006/12/dimensions-and-views-of-scm.html"&gt;Dimensions and Views of SCM Architecture&lt;/a&gt; as one of the reasons why ...&lt;br /&gt;&lt;br /&gt;The text of the entire 2nd edition of the "&lt;a style="font-weight: bold;" href="http://www.tar.hu/softarchpract/index.html"&gt;Software Architecture in Practice&lt;/a&gt;" textbook is available online as one source fo information on the subject (among others). I found another good link (&amp;amp; book reference) at &lt;a href="http://www.viewpoints-and-perspectives.info/"&gt;http://www.viewpoints-and-perspectives.info/&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;It's the website for the book "&lt;a href="http://www.blogger.com/Software%20Systems%20Architecture:%20Working%20With%20Stakeholders%20Using%20Viewpoints%20and%20Perspectives"&gt;&lt;span style="font-weight: bold;"&gt;Software Systems Architecture: Working With Stakeholders Using Viewpoints and Perspectives&lt;/span&gt;&lt;/a&gt;" by Nick Rozanski and Eoin Woods. They classify/use "Viewpoints" and "Perspectives" as follows:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Viewpoints:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Functional&lt;/li&gt;&lt;li&gt;Information&lt;/li&gt;&lt;li&gt;Concurrency&lt;/li&gt;&lt;li&gt;Development&lt;/li&gt;&lt;li&gt;Deployment&lt;/li&gt;&lt;li&gt;Operational&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Perspectives:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Security&lt;/li&gt;&lt;li&gt;Performance and Scalability&lt;/li&gt;&lt;li&gt;Availability and Resilience&lt;/li&gt;&lt;li&gt;Evolution&lt;/li&gt;&lt;li&gt;Accessibility&lt;/li&gt;&lt;li&gt;Development Resource&lt;/li&gt;&lt;li&gt;Internationalization&lt;/li&gt;&lt;li&gt;Location&lt;/li&gt;&lt;li&gt;Regulation&lt;/li&gt;&lt;li&gt;Usability&lt;/li&gt;&lt;/ul&gt;Found a few other links too:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Paul Clements' presentation on &lt;a href="http://www.cs.up.ac.za/download.php/ISS2006/Clements/ISS2006_Clements.pdf"&gt;View-Oriented Representation of Software Architecture&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://wiki.umn.edu/view/Main/SoftwareArchitecture"&gt;https://wiki.umn.edu/view/Main/SoftwareArchitecture&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://http//ece.ut.ac.ir/classpages/S85/SoftwareArchitecture/"&gt;http://ece.ut.ac.ir/classpages/S85/SoftwareArchitecture/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://www.se.auckland.ac.nz/courses/SOFTENG325/lectures/"&gt;Lecture slides+notes from a University of Auckland Software Architecture course&lt;/a&gt; that are heavily-based off the material in the textbook&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cs.aau.dk/%7Emly/dbsa07/"&gt;Lecture slides+notes from a Univ of Aalborg Database and Software Architecture course&lt;/a&gt; where several of the lectures are based off the same materials&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/bradapp/~3/236990287/software-architecture-views-and.html" title="Software Architecture Views and Perspectives" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10280668&amp;postID=2993399780527471159&amp;isPopup=true" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/2993399780527471159/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/posts/default/2993399780527471159" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10280668/posts/default/2993399780527471159" /><author><name>Brad Appleton</name><uri>http://www.blogger.com/profile/15136106921504315995</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://bradapp.blogspot.com/2008/02/software-architecture-views-and.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10280668.post-8034289440747265846</id><published>2008-02-04T03:18:00.002-06:00</published><updated>2008-02-15T09:36:43.033-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Lean" /><title type="text">KanBan is NOT Iteration-Free!</title><content type="html">&lt;span style="font-family:georgia;"&gt;Regarding my &lt;a href="http://blog.bradapp.net/2008/01/katch-kanban-kraze.html"&gt;previous posting about Software KanBan&lt;/a&gt;, much as I really do like it and have nothing but the utmost respect for the likes of Corey Ladas and David Anderson, there is one major quibble I have with some of the stuff being said ...&lt;br /&gt;&lt;br /&gt;I think all the stuff saying it is Iteration-less and Iteration-free is a bunch of hooey! I don't agree at all and I think it is extremely misleading to say that Software KanBan doesn't use or need iterative development.&lt;br /&gt;&lt;br /&gt;Don't get me wrong - I think I understand where they are coming from. There is often a great deal of recurring and heated discussion on numerous Agile forums about "Ideal" iteration length. I understand how folks can be sick and tired of that (to be honest, I myself never really paid too much attention to those particular discussion threads about ideal iteration-size).&lt;br /&gt;&lt;br /&gt;The idea that is new or revolutionary for some is that release/feature content is &lt;i&gt;decoupled&lt;/i&gt; from development! One or more features/requests are being worked in parallel, and every two weeks (or however long) some combination of newly developed functionality from those that are ready is selected to be released (rather than before development is underway).&lt;br /&gt;&lt;br /&gt;But it seems to me that this is just an application of Agile-style development iterations applied to multi-project management. It is &lt;b&gt;Releases&lt;/b&gt; that are decoupled from iterations (and hence iteration-&lt;i&gt;free&lt;/i&gt;). But as I see it, the iterations &lt;u&gt;are&lt;/u&gt; still present: they are where the &lt;i&gt;development&lt;/i&gt; is, on the various feature "projects" that are being developed in an incremental &lt;i&gt;and iterative&lt;/i&gt; manner, each at their own rhythm (some might be every two weeks, others might be less frequent, but they all find their pace).&lt;br /&gt;&lt;br /&gt;I don't believe for one second that each of those features/requests are specifying and elaborating 100% of their requirements before they start coding anything. Looks to me like, for all but the smallest of requests, they may flesh out a certain amount of requirements up-front (be it lightweight use-cases, or even something a bit more formal), but only to a high-level or medium-level of detail. And from that point on through, the detailed requirements, implementation, and feature-level testing and integration-testing they are proceeding in a VERY MUCH iterative fashion.&lt;br /&gt;&lt;br /&gt;It may not be a strict fixed length, in that the rhythm may fluctuate and readjust from time-to-time, but it definitely does have a regular rhythm! The length of any given "iteration" is fixed to the cadence of the feature-team (even if it is a team of 1 or 2). Not all iterations may be the same length, but any given iteration is working to a fixed due-date rather than letting that cycle stretch out until the "scope" is complete.&lt;br /&gt;&lt;br /&gt;So don't let anyone tell you that Agile development need not require working in an iterative manner. It most definitely does (and at multiple levels of scale). Just don't assume it means that iterations must always be a property of a "release" as opposed to some other related chunk of work (possibly multiple ones proceeding in parallel).&lt;br /&gt;&lt;br /&gt;It is not the releasing that needs to be iterative, it is the development. And if the releases are decoupled form development (which I think is a GREAT idea), then the development of any non-trivial sized feature or request still will need to proceed in an iterative manner according to some regular cadence that gets established.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/bradapp/~3/234263407/kanban-is-not-iteration-free.html" title="KanBan is NOT Iteration-Free!" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10280668&amp;postID=8034289440747265846&amp;isPopup=true" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/8034289440747265846/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/posts/default/8034289440747265846" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10280668/posts/default/8034289440747265846" /><author><name>Brad Appleton</name><uri>http://www.blogger.com/profile/15136106921504315995</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://bradapp.blogspot.com/2008/02/kanban-is-not-iteration-free.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10280668.post-7934065502443112047</id><published>2008-01-28T06:52:00.001-06:00</published><updated>2008-02-13T03:17:56.808-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Lean" /><category scheme="http://www.blogger.com/atom/ns#" term="Links" /><title type="text">Katch the KanBan Kraze!</title><content type="html">&lt;span style="font-family:georgia;"&gt;For those who haven't been keeping up with "Agile 2.0" or "Post-Agile", one of the more recent developments has been KanBan for Software Development. I first heard about it from &lt;a href="http://www.agilemanagement.net/"&gt;David Anderson&lt;/a&gt; in a presentation he gave at about a &lt;a href="http://www.agilemanagement.net/Articles/Papers/AKanbanSystemforSustainin.html"&gt;KanBan System for Sustaining Software Engineering&lt;/a&gt;. Then I heard David and some others saying how they did away completely with iterations and simply release every two weeks, and shortly thereafter David started a &lt;a href="http://groups.yahoo.com/group/kanbandev/"&gt;KanBan Development YahooGroup&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Anyway, I think it looks extremely interesting and promising, &lt;i&gt;particularly&lt;/i&gt; for folks in an internal IT or tool development group where much (if not all) of their work is sustaining engineering of existing tools and not so much major new feature/product development.&lt;br /&gt;&lt;br /&gt;So I thought I would roundup several resources on the subject for folks who might be interested in learning more:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Kanban"&gt;Wikipedia page on KanBan&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.strategosinc.com/kanban.htm"&gt;Strategosinc description of KanBan&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://wcm.nu/Kanban/kanban.html"&gt;Yet another decent description of KanBan&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="dhttp://blog.kanban.com/"&gt;KanBon.com's "Business Lean" blog&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;InfoQ.com article on &lt;a href="http://www.infoq.com/articles/agile-kanban-boards"&gt;Visualizing Agile Projects using Kanban Boards&lt;/a&gt; (also &lt;a href="http://www.ddj.com/architect/201807863"&gt;available from DDJ online&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;InfoQ.com article on &lt;a href="http://www.infoq.com/news/2007/06/Incremental_SD_wo_Iterations"&gt;Incremental Software Development without Iterations&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;InfoQ.com article on &lt;a href="http://www.infoq.com/articles/hiranabe-lean-agile-kanban"&gt;Kanban Applied to Software Development: from Agile to Lean&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;An article from Dean Leffingwell ("Scaling Agility") on &lt;a href="http://scalingsoftwareagility.wordpress.com/2007/03/14/the-simple-visual-iteration-kanban-or-the-power-of-agile-management-simplicity/"&gt;The Simple, Visual, Iteration Kanban&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.agilemanagement.net/"&gt;David Anderson's Blog and Articles&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://leansoftwareengineering.com/"&gt;Corey Ladas' "Lean Software Engineering" blog&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Occasional articles posted at the &lt;a href="http://agilepractitionersforum.com/"&gt;Agile Practitioner's Forum&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://groups.yahoo.com/group/kanbandev/"&gt;KanBan Development YahooGroup&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/bradapp/~3/234257125/katch-kanban-kraze.html" title="Katch the KanBan Kraze!" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10280668&amp;postID=7934065502443112047&amp;isPopup=true" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/7934065502443112047/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://bradapp.blogspot.com/feeds/posts/default/7934065502443112047" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10280668/posts/default/7934065502443112047" /><author><name>Brad Appleton</na