<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4097792925045582567</id><updated>2025-01-08T14:52:33.469-05:00</updated><category term="Software Architecture"/><category term="Process"/><category term="Agile Software Development"/><category term="Talks"/><category term="Design"/><category term="Leadership"/><category term="Engineering"/><category term="Design Methods"/><category term="Risk Management"/><category term="Book Review"/><category term="Formal Methods"/><category term="Metrics"/><category term="Problem Definition"/><category term="Code"/><category term="Quality"/><title type='text'>Reflections on Software Engineering</title><subtitle type='html'>by Michael Keeling</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.neverletdown.net/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://www.neverletdown.net/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Michael</name><uri>http://www.blogger.com/profile/02649257003202319541</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>62</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4097792925045582567.post-2054289389921819014</id><published>2015-10-28T08:30:00.000-04:00</published><updated>2017-08-21T22:49:49.851-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Book Review"/><category scheme="http://www.blogger.com/atom/ns#" term="Design"/><title type='text'>Why is Software Design Difficult?</title><content type='html'>Software design requires a depth and breadth of experience that takes years to develop. &amp;nbsp;While better training in software design might shorten the time required to master design&amp;nbsp;by better codifying knowledge and experience for others to follow, attaining knowledge is easier said than done. &lt;a href=&quot;http://www.amazon.com/gp/product/0692022120/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0692022120&amp;amp;linkCode=as2&amp;amp;tag=nevletdowdotn-20&amp;amp;linkId=RII735Z7IO7VJI3L&quot;&gt;Jonathan Mugan in his book The Curiosity Cycle explains&lt;/a&gt;:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
Knowledge is more complicated than simply putting available pieces of information together because much of the world is hidden from view. [...] What we know determines what we see, therefore learning new things changes how we experience the world.&lt;/blockquote&gt;
If it were a matter of obtaining some bit of information,&amp;nbsp;then anyone could be a great designer after reading a book. &amp;nbsp;Knowledge is an important part of design since it changes how you see the world, but perhaps even more important are the mental models we create to explain the world. &amp;nbsp;These models are born through experience and seen through the lens of our current knowledge. &amp;nbsp;Thinking about the psychology around how we build models is a fantastic way for us to understand software design - both generally and in specific instances. &amp;nbsp;As in, &quot;Why is design so hard?&quot; but also &quot;How do you &#39;do&#39; design?&quot;&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
The Curiosity Cycle&lt;/h2&gt;
Design is all about learning. &amp;nbsp;Learning about the problem, the solution, and where those two ideas meet. &amp;nbsp;As children we learned to learn through the vehicle of curiosity.&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTmQtV0dPr8GhX8B-tklx913UCqwH7zh40y4Y3WYLuCqbhJJbwxN56zTfTW9H5HTIX2w_wXq8OdXN2jPnQFmSbroIwvTislcwhLt83PMzRu0t25xPmlp4VQPaqKTFpShIrUJMv-kVzcHIE/s1600/curiosity-cycle.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTmQtV0dPr8GhX8B-tklx913UCqwH7zh40y4Y3WYLuCqbhJJbwxN56zTfTW9H5HTIX2w_wXq8OdXN2jPnQFmSbroIwvTislcwhLt83PMzRu0t25xPmlp4VQPaqKTFpShIrUJMv-kVzcHIE/s1600/curiosity-cycle.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;i&gt;The Curiosity Cycle from Mugan&#39;s book by the same name.&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;span id=&quot;goog_362865122&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_362865123&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
The cycle has three main building blocks.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Concepts &lt;/b&gt;- pieces (observations about elements and ideas) we pull from sensory experience. Elements are people, places, and things while an idea is something we think about and can put a boundary around.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Models &lt;/b&gt;- specify how concepts are put together to form useful information.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Tests &lt;/b&gt;- experiences that tell us how models work.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
As an example, consider what you know about a door. &amp;nbsp;A concept you might observe is that doors have doorknobs. &amp;nbsp;A model you might build is &quot;turning doorknobs opens doors.&quot; To test this model, you ask a question (form a hypothesis) and try it out. &amp;nbsp;Maybe you find a doorknob that doesn&#39;t turn. Now you&#39;ll need to identify the concept of a locked door, update your model, and the cycle starts over again.&lt;br /&gt;
&lt;br /&gt;
Individuating concepts is about pulling cohesive pieces out of the continuous whole experience. This is often an automatic event, but not always. Model building requires reflection on what you&#39;ve observed and some abstraction. You need to come up with some way to describe what you&#39;ve observed.&lt;br /&gt;
&lt;br /&gt;
Tests are extremely important in this cycle. Tests can verify your model but also show (perhaps more importantly that your model is incomplete. An incomplete model is partially formed and does not reliably predict the environment.&amp;nbsp;&lt;b&gt;Incomplete models are extremely important because they help us to form new concepts.&lt;/b&gt; &amp;nbsp;New concepts, in turn, help us to improve the models... and the cycle continues.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
Curiosity-Driven Software Design&lt;/h2&gt;
So why is software design so difficult? &amp;nbsp;Consider this question from the context of the curiosity cycle.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Code is easy to see and most of us have direct experience writing, testing, running, and reading code. Therefore concepts from code are easy to discern through basic observation. &amp;nbsp;Write enough code and think about it long enough and you&#39;ll discover many useful and interesting concepts.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Many design concepts are not easily observable in the artifacts. &amp;nbsp;Early architectural design is pure thought stuff. &amp;nbsp;Code, the most observable artifact, can easily obfuscate and often betrays intended architectural meaning. In addition, many models are dynamic or the combination of several structures (e.g. people&amp;nbsp;+ business&amp;nbsp;+ infrastructure&amp;nbsp;+ running system) and cannot be easily seen.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Many developers lack the necessary concepts to describe a model even when that model is a good one. For example, try to describe a car to someone who&#39;s never seen a car before. &amp;nbsp;Is it a horseless carriage? &amp;nbsp;Perhaps the &lt;a href=&quot;http://www.spacex.com/hyperloopalpha&quot;&gt;Hyperloop&lt;/a&gt;&amp;nbsp;is a modern example. &amp;nbsp;&quot;You know, it&#39;s one of those pneumatic tubes you&#39;d find at the bank but for people!&quot;&lt;/li&gt;
&lt;/ul&gt;
And yet, developing the models is still really important even though it&#39;s difficult. &amp;nbsp;What makes this model building so difficult? &amp;nbsp;I don&#39;t have a full answer for this, but here are some thoughts.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Inventing, observing, and describing concepts relevant to your system that can sometimes only exist as ideas is a challenge. &amp;nbsp;This is required for design.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Simultaneously developing models of both the software structures and the domain in which the system lives is a challenge. Learning new ideas from either of these things changes the world view..&lt;/li&gt;
&lt;li&gt;Testing models is difficult and also essential to successfully individuating concepts and forming a good enough model of the world to build something.&lt;/li&gt;
&lt;li&gt;Asking good questions seems to be as much art as science. &amp;nbsp;Some people are better at asking the right questions at the right times than others. &amp;nbsp;This is unfortunate because asking questions is the fuel that keeps curiosity cycle turning.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
The first few chapters of the &lt;a href=&quot;http://www.amazon.com/gp/product/0692022120/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0692022120&amp;amp;linkCode=as2&amp;amp;tag=nevletdowdotn-20&amp;amp;linkId=RII735Z7IO7VJI3L&quot;&gt;Curiosity Cycle are available as a preview on Amazon Kindle&lt;/a&gt;. &amp;nbsp;The primary purpose of the book is to help arm parents with a new perspective on how kids learn so they can help their kids develop a life long love of learning. &amp;nbsp;While that&#39;s nice, I quickly lost interest (even as a new parent). &amp;nbsp;All that said, the first few chapters are absolutely fascinating and the writing is extremely accessible with generally good references. &amp;nbsp;Definitely check out the Kindle preview.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.neverletdown.net/feeds/2054289389921819014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.neverletdown.net/2015/10/why-is-software-design-difficult.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/2054289389921819014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/2054289389921819014'/><link rel='alternate' type='text/html' href='http://www.neverletdown.net/2015/10/why-is-software-design-difficult.html' title='Why is Software Design Difficult?'/><author><name>Michael</name><uri>http://www.blogger.com/profile/02649257003202319541</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTmQtV0dPr8GhX8B-tklx913UCqwH7zh40y4Y3WYLuCqbhJJbwxN56zTfTW9H5HTIX2w_wXq8OdXN2jPnQFmSbroIwvTislcwhLt83PMzRu0t25xPmlp4VQPaqKTFpShIrUJMv-kVzcHIE/s72-c/curiosity-cycle.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4097792925045582567.post-6575154265868077090</id><published>2015-10-14T08:30:00.000-04:00</published><updated>2017-08-21T22:51:55.289-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Software Architecture"/><category scheme="http://www.blogger.com/atom/ns#" term="Talks"/><title type='text'>SATURN 2015 Highlights</title><content type='html'>The year is nearly over and it seems safe to conclude that 2015 is the year software architecture went mainstream. &amp;nbsp;Conferences that have been traditionally very technology heavy are including more and more software architecture design topics. O’Reilly Media and InfoQ added software architecture conferences to their line-ups this year and even Gartner named software architecture as a main theme for it’s 2015 Catalyst Conference.&lt;br /&gt;
&lt;br /&gt;
As George Fairbanks and I were preparing our &lt;a href=&quot;http://www.sei.cmu.edu/saturn/2015/&quot;&gt;SATURN 2015&lt;/a&gt; opening address it seemed fitting to reflect on SATURN’s 11 year journey and figure out where it fits in the evolving software architecture landscape that SATURN very much helped to create. During the SATURN 2015 opening address we shared what we see as SATURN’s main strengths. &amp;nbsp;Three ideas that together we think have given SATURN it’s staying power and helped it remain relevant for over a decade.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Strong Foundation&lt;/b&gt; - Literacy is perhaps the most important factor to building a strong community. SATURN has always been dedicated to not only understanding and codifying foundational concepts in software architecture but also teaching those concepts to the next generation of designers.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Cutting Edge of Practice&lt;/b&gt; - For over a decade SATURN speakers have been pushing the state of practice forward. Stories from the field about what works and what doesn’t have made up the bulk of the technical program since the very first SATURN. SATURN is a place for sharing new ideas, getting feedback, and improving the way we practice software development.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Community &lt;/b&gt;- The SATURN conference brings together a group of like-minded people every year to geek out about the fundamentals and future of software architecture. The conference is small by design. We are a friendly crew and everyone is welcome. One of my favorite things about SATURN is that everyone is open to a good conversation, even the super popular authors and people with wikipedia pages.&lt;/li&gt;
&lt;/ul&gt;
&lt;a href=&quot;http://www.sei.cmu.edu/saturn/2016/presentations.cfm&quot;&gt;Look through the SATURN archives&lt;/a&gt; and you’ll see that these three themes have permeated the conference since the beginning and in my opinion they continue to differentiate SATURN from other conferences. These are the SATURN community’s strengths and hopefully will make up the future for quite a while to come.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h2&gt;
My SATURN 2015 Highlights&lt;/h2&gt;
SATURN 2015 was a spectacular conference. Easily my favorite of the year. Here are some of my personal highlights with links to relevant talks, videos, and docs where appropriate.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Workshop on microservices architecture&lt;/b&gt; -- For the first time SATURN held an exploration style workshop as part of the conference. Under the guidance of Dennis Mancl (of OOPSLA and SPLASH workshop fame) George and I planned and facilitated a full day workshop where we asked tough questions and thought about different aspects of microservices architecture. &lt;a href=&quot;https://github.com/michaelkeeling/SATURN2015-Microservices-Workshop&quot;&gt;The workshop agenda and outcomes are publicly available on GitHub&lt;/a&gt;.&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Design Thinking is for you&lt;/b&gt; - Ari Font (IBM), Jeff Patton (Jeff Patton &amp;amp; Associates), and Jonathan Berger (Pivotal) hosted an amazing panel on design thinking. Architects are designers and good user interaction cuts deeply into a system, not just touching the surface UI. That said, architects have a lot to learn about collaborative design. I was so thankful that Ari, Jeff, and Jonathan accepted our invitation to speak at SATURN this year! &lt;a href=&quot;https://saturnnetwork.wordpress.com/2015/04/29/saturn-2015-design-thinking-is-for-you-session-notes/&quot;&gt;Notes&lt;/a&gt; | &lt;a href=&quot;http://resources.sei.cmu.edu/library/asset-view.cfm?assetID=436320&quot;&gt;Slides&lt;/a&gt; | &lt;a href=&quot;https://www.youtube.com/watch?v=i82lh8JPo7k&amp;amp;list=PLSNlEg26NNpy1RjhlISNMRNO1gypYaXHo&amp;amp;index=36&quot;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Design thinking office hours&lt;/b&gt; - SATURN 2015 Office hours were an open space style session with assigned moderators / hosts. Ari and Jonathan hosted a session on design thinking with about 8 people in attendance. For me this was one of the most valuable sessions of SATURN. I love exploring new ideas and the 8 or of us made some interesting discoveries in how software architecture design can become more aligned to design thinking as it’s currently practices.&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKPFXQIOvpxCTZ-su37pWTnBbBYlpuTE51p5X7wRLyNo_dw9HMkHzkI4WW6Q-yTEH98lpRU_cFki9dhp301MMnjrMtAcgxn4RaziBlUTMUlaMUVjplLmPfSyHHvQmM3_-F5G4jR8499O-a/s1600/saturn2015-design-thinking-office-hours.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKPFXQIOvpxCTZ-su37pWTnBbBYlpuTE51p5X7wRLyNo_dw9HMkHzkI4WW6Q-yTEH98lpRU_cFki9dhp301MMnjrMtAcgxn4RaziBlUTMUlaMUVjplLmPfSyHHvQmM3_-F5G4jR8499O-a/s640/saturn2015-design-thinking-office-hours.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Ari facilitating a lively and interactive discussion with some office hours participants.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;New viewpoints for talking to stakeholders&lt;/b&gt; - This year’s Architecture in Practice award went to Jochem Schulenklopper and Eelco Rommes from Inspearit for the their talk &quot;&lt;a href=&quot;https://www.youtube.com/watch?v=_PY2ZRgesEc&amp;amp;index=32&amp;amp;list=PLSNlEg26NNpy1RjhlISNMRNO1gypYaXHo&quot;&gt;Why They Just Don’t Get it: Communicating Architecture to Business Stakeholders&lt;/a&gt;&quot;. This was such a refreshing and insightful talk, and I was so happy to see them get the peer selected Architecture in Practice award. The idea is something we talk about often but rarely do well -- vary the way you share information for your audience. Jocehm and Eelco shared several examples of ways they visualize architectural views in ways that are more interesting and obvious for business stakeholders’ concerns. &lt;a href=&quot;https://saturnnetwork.wordpress.com/2015/04/29/saturn-2015-why-they-just-dont-get-it-communicating-architecture-to-business-stakeholders-session-notes/&quot;&gt;Notes&lt;/a&gt; | &lt;a href=&quot;http://resources.sei.cmu.edu/library/asset-view.cfm?assetID=436431&quot;&gt;Slides&lt;/a&gt; | &lt;a href=&quot;https://www.youtube.com/watch?v=_PY2ZRgesEc&amp;amp;index=32&amp;amp;list=PLSNlEg26NNpy1RjhlISNMRNO1gypYaXHo&quot;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Updates on the Mini-QAW&lt;/b&gt; - In 2014, &lt;a href=&quot;https://www.youtube.com/watch?v=vPGyPRFx0mk&amp;amp;index=46&amp;amp;list=PLSNlEg26NNpy1RjhlISNMRNO1gypYaXHo&quot;&gt;Will Chaparro and I presented a little method we used at IBM that was a trimmed down version of the Quality Attribute Workshop&lt;/a&gt;. We thought it was great, and the method had a huge response. What we didn’t expect was to see the method show up again, multiple times in SATURN 2015 talks by other architects who found our work, tried it, and found ways to make it even more awesome! Thijmen de Gooijer shared some particularly interesting and useful updates in his talk titled &quot;&lt;a href=&quot;https://www.youtube.com/watch?v=vW6BQrWLTJA&amp;amp;index=31&amp;amp;list=PLSNlEg26NNpy1RjhlISNMRNO1gypYaXHo&quot;&gt;Quality Requirements on a Shoestring&lt;/a&gt;&quot; (&lt;a href=&quot;http://resources.sei.cmu.edu/library/asset-view.cfm?assetID=436426&quot;&gt;slides&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Battledecks&lt;/b&gt; - I read about this silly thing on the internet and thought it might be fun as an evening social activity. Battledecks is an improvisation game in which a speaker is provided with a title and 10 slides they’ve never seen before, and asked to give a semi-coherent talk using the provided deck. I have never laughed as hard at a conference as I did during this session. Bravo SATURN for being willing to have some fun as a community!&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Google’s talk, Perspectives on the Modern Practice of Software Architecture&lt;/b&gt; - Jeromey Carrier, Rick Buskens, and Jack Greenfield of Google shared some extremely insightful reflection and practical advice about some of their experiences at Google. What’s great about their stories from inside Google is that few companies are dealing with the scale and complexity they deal with. &amp;nbsp;What’s also interesting about Google’s stories is that, at just over 17 years old, it seems like Google me be starting to feel their first significant pains from major legacy systems. I have a feeling there’s going to be even more interesting architecture stories from inside Google in the years to come.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;My Silver Toolbox&lt;/b&gt; - With amazing Pecha Kucha talks from Gail Harris, &lt;a href=&quot;http://codingthearchitecture.com/&quot;&gt;Simon Brown&lt;/a&gt;, &lt;a href=&quot;http://georgefairbanks.com/&quot;&gt;George Fairbanks&lt;/a&gt;, &lt;a href=&quot;http://ariadna.font.cat/&quot;&gt;Ari Font&lt;/a&gt;, &lt;a href=&quot;http://ericwilleke.com/&quot;&gt;Eric Willeke&lt;/a&gt;, and Will Chaparro, this session was a blast and filled with many amazing nuggets of wisdom. What made this session even more special was that I turned the tables on the audience and managed to get even more nuggets of wisdom from them!&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglVW-6ULeaBcap-7kPAbMRjvW92_3_UNj6YPyInjJ7fI-OFbayEIuZQQ_jZR6pU2GAWESkINOh62Vd-pbu7eIb6JLQiseKWJkDEmoQ_EzT7vP5UU5QxNfspFFk-NMmY_WoqgmxdMTcDEoD/s1600/saturn2015-silver-toolbox-large-group.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;img alt=&quot;SATURN 2015 - My Silver Toolbox group participation&quot; border=&quot;0&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglVW-6ULeaBcap-7kPAbMRjvW92_3_UNj6YPyInjJ7fI-OFbayEIuZQQ_jZR6pU2GAWESkINOh62Vd-pbu7eIb6JLQiseKWJkDEmoQ_EzT7vP5UU5QxNfspFFk-NMmY_WoqgmxdMTcDEoD/s640/saturn2015-silver-toolbox-large-group.jpg&quot; title=&quot;SATURN 2015 - My Silver Toolbox group participation&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Participants in the &quot;My Silver Toolbox&quot; session brainstorming to decide&lt;br /&gt;
which software architecture tools are most important&amp;nbsp;to them.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;All the keynotes&lt;/b&gt; - &lt;a href=&quot;https://www.youtube.com/watch?v=S03bsjs2YnQ&amp;amp;index=28&amp;amp;list=PLSNlEg26NNpy1RjhlISNMRNO1gypYaXHo&quot;&gt;Mary Shaw gave an awesome opening keynote&lt;/a&gt; that really set the stage for the conference. &amp;nbsp;Gregor Hophe shared some amazing advice (which sadly can’t be released on video but &lt;a href=&quot;http://www.enterpriseintegrationpatterns.com/ramblings/86_isthisarchitecture.html&quot;&gt;some of his keynote is available as prose on his website&lt;/a&gt;). &amp;nbsp;And &lt;a href=&quot;https://www.youtube.com/watch?v=eHQ7rlzVhT4&amp;amp;index=34&amp;amp;list=PLSNlEg26NNpy1RjhlISNMRNO1gypYaXHo&quot;&gt;Mark Schwartz shared some real and very candid stories&lt;/a&gt; about how he’s led US Citizenship and Immigration to modernize and really embrace the emerging, fast-paced, agile world that architect’s everywhere are responsible for fostering at their organizations. &amp;nbsp;It was wonderful having such thinkers, leaders, and speakers share the stage at SATURN 2015.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;ul&gt;
&lt;/ul&gt;
&lt;h2&gt;
Looking Forward to SATURN 2016&lt;/h2&gt;
I had a blast at SATURN 2015 and not only had a chance to get crucial feedback on how I practice software architecture, but also learned many new ideas I&#39;ve been able to use with my team at IBM. For me, it&#39;s a really great, inclusive, fun, smart community of people who are actively defining where software architecture design is headed. It was a privilege to be the custodian of this conference as the technical program chair for two years and I look forward to attending many more SATURN conferences as a regular attendee for years to come.&lt;br /&gt;
&lt;br /&gt;
Compared with some of the other tech conferences out there, SATURN is not the flashiest conference, or the biggest, but as the longest running practitioner conference in software architecture, I think SATURN will continue to have a strong influence over what software architecture is and where it’s headed.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.sei.cmu.edu/saturn/2016/call.cfm&quot;&gt;SATURN 2016 is now accepting proposals for 15, 30, and 90 minute talks&lt;/a&gt;. &amp;nbsp;This conference is perfect for sharing new ideas and lessons from your experiences in software architecture design. Whether you&#39;re interested in design, technology, methods, businessy things, or working with teams, this is the place for ideas and stories that help us push the state of practice forward.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.neverletdown.net/feeds/6575154265868077090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.neverletdown.net/2015/10/saturn-2015-highlights.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/6575154265868077090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/6575154265868077090'/><link rel='alternate' type='text/html' href='http://www.neverletdown.net/2015/10/saturn-2015-highlights.html' title='SATURN 2015 Highlights'/><author><name>Michael</name><uri>http://www.blogger.com/profile/02649257003202319541</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKPFXQIOvpxCTZ-su37pWTnBbBYlpuTE51p5X7wRLyNo_dw9HMkHzkI4WW6Q-yTEH98lpRU_cFki9dhp301MMnjrMtAcgxn4RaziBlUTMUlaMUVjplLmPfSyHHvQmM3_-F5G4jR8499O-a/s72-c/saturn2015-design-thinking-office-hours.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4097792925045582567.post-6614531493325515588</id><published>2015-10-01T08:30:00.000-04:00</published><updated>2015-10-01T08:30:00.280-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Talks"/><title type='text'>Three Big Ideas for Beating Innovator&#39;s Block</title><content type='html'>&lt;center style=&quot;text-align: left;&quot;&gt;
I was invited to speak at the IBM dev@Insight conference last October. &amp;nbsp;I just realized last week that the event was recorded and that the video is available online! &amp;nbsp;My talk was about how my team overcame our &quot;innovator&#39;s block&quot; and created a set of integration patterns for using the IBM Watson Developer Cloud services within Watson Explorer applications. &amp;nbsp;We see these patterns as a small start of something much bigger and more important. &amp;nbsp;I hope that history sees our contributions as extremely minor and rather silly compared to the enormously awesome and amazing ideas that follow us in the coming months and years.&lt;/center&gt;
&lt;center style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/center&gt;
&lt;center style=&quot;text-align: left;&quot;&gt;
The talk is an &lt;a href=&quot;https://en.wikipedia.org/wiki/Ignite_(event)&quot;&gt;Ignite talk&lt;/a&gt;&amp;nbsp;so the slides auto-advance every 15 seconds. &amp;nbsp;It makes for a fast, intense, information packed talk. &amp;nbsp;I&#39;ve also written a rough transcript of the talk for those who prefer to read (though the video is only five minutes long).&lt;/center&gt;
&lt;center style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/center&gt;
&lt;center&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/3Gz_gG1FOEs&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;&lt;/center&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;h2&gt;
The Problem with Innovation&lt;/h2&gt;
&lt;/div&gt;
The &lt;a href=&quot;https://en.wikipedia.org/wiki/Phonautograph&quot;&gt;phonautograu&lt;/a&gt;ph&amp;nbsp;was invented in 1857 by a Frenchman by the name of Edward-Leon Scott. What&#39;s interesting about the phonautograph is that it was the first ever sound recording device and it was a rather elegant invention for its day. &amp;nbsp;The device works by picking up sound waves from the air, similarly to how the inner ear drum works and then transcribes the raw sound waves onto paper or smoked glass using a needle.&lt;br /&gt;
&lt;br /&gt;
The most fascinating thing about the&amp;nbsp;phonautograph&amp;nbsp;is that there was no playback capability. &amp;nbsp;Sound waves were&amp;nbsp;written to paper much like music notes might be written to a page. &amp;nbsp;Scott had envisioned a world in which trained professionals would some day be able to read the raw sound waves and be able to translate speech or music directly from the written wave form.&lt;br /&gt;
&lt;br /&gt;
In retrospect, such a device is almost laughable but in context it is easy to forgive Scott for such an oversight as no playback. &amp;nbsp;To start, this is the first device capable of sound recording, so that is an impressive feat. &amp;nbsp;Next, up to that point the only means of capturing sound was through written forms such as sheet music for an opera or symphony. &amp;nbsp;It was as if Scott was wearing innovation blinders based on his current context and physical reality. &amp;nbsp;In the world he knew, people read sound from paper. &amp;nbsp;It was certainly not created automatically from a recorded medium.&lt;br /&gt;
&lt;br /&gt;
In the technology world we have a saying that summarizes this phenomena pretty well:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&quot;I suppose it is tempting, if the only tool you have is a hammer, to treat everything as if it were a nail.&quot; (Abraham Maslow, 1966).&lt;/blockquote&gt;
The important lesson here is that it is important to know how to use a variety of tools, otherwise your view on the world will be limited by your own capability or the context of your surroundings. Without a set of broad experiences you will be incapable of seeing different solutions to a given problem as everything will appear solvable only through the tools that you know how to use.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
Search is my Hammer...&lt;/h2&gt;
This was the problem that my team was facing when we were fist given the task of integrating the &lt;a href=&quot;http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/services-catalog.html&quot;&gt;Watson Developer Cloud cognitive services&lt;/a&gt; with &lt;a href=&quot;http://www.ibm.com/smarterplanet/us/en/ibmwatson/explorer.html&quot;&gt;Watson Explorer&lt;/a&gt;. &amp;nbsp;We know search and we know Watson Explorer extremely well. While we were aware of cloud application basics and many of the theories behind cognitive computing, we had no idea what to do with cloud-based cognitive services we were tasked with using, within the context of the search applications that we were used to deploying.&lt;br /&gt;
&lt;br /&gt;
Focusing on the capabilities in the new technology we struggled to come up with good ways of using these new capabilities. &amp;nbsp;And our first ideas were pretty bad.&lt;br /&gt;
&lt;br /&gt;
&quot;Maybe we could use Watson to &#39;cognitively enhance&#39; text clustering?&quot; we discussed. &amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Document_clustering&quot;&gt;Text clustering&lt;/a&gt;, the ability to dynamically extract relevant themes from a set of search results such that it takes into account natural language including grammar (e.g. stemming, tense, useful vs. noise words, etc.) and knowledge (e.g. acronyms, synonyms, stop words, etc.), was one of Watson Explorer&#39;s original core capabilities born over a decade ago back when the product was still known as Vivisimo Velocity and Vivisimo was just a tiny startup. &amp;nbsp;In and of itself this is not a terrible idea, it&#39;s just not super interesting.&lt;br /&gt;
&lt;br /&gt;
&quot;OK, well what about some kind of recommendation system like what Google and Bing do with ad words and user profiles?&quot; This is getting warmer, but the more we talked it out, the less it made sense. &amp;nbsp;How would this play out behind the firewall in an enterprise setting? &amp;nbsp;Is this really the best we can do?&lt;br /&gt;
&lt;br /&gt;
We have access to the most computing power and the most powerful algorithms in the history of the world and the best we can come up with is optimizing ads? &amp;nbsp;Certainly we can do better than optimizing the consumerist machine!&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
Focus on the User&lt;/h2&gt;
Success finally came when we stopped thinking about the technology and started focusing on the user. &amp;nbsp;What problems did our users have? &amp;nbsp;What kinds of things do they ussually do with Watson Explorer? &amp;nbsp;How can we take solutions to those problems to the next level with the new tools that we had in the Watson Developer Cloud?&lt;br /&gt;
&lt;br /&gt;
A common use case we see with Watson Explorer focuses on creating an &quot;enhanced 360 degree view&quot; of some entity. &amp;nbsp;For example, you might look at a person entity and then from a single UI view search results pushed to you contextually based on metadata from a variety of sources, or computed analytics, or really any number of facets of that entity.&lt;br /&gt;
&lt;br /&gt;
With a solid use case in hand, it was extremely easy to figure out wich of the cognitive services in the Watson Develper Cloud worked for our use cases and which ones did not. &amp;nbsp;For example, &lt;a href=&quot;http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/personality-insights.html?cm_mc_uid=75258806185314436381223&amp;amp;cm_mc_sid_50200000=1443638122&quot;&gt;Watson Personality Insights&lt;/a&gt; is a perfect complement to the 360 degree view of a person from either a real-time or pre-computed perspective. &amp;nbsp;&lt;a href=&quot;http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/question-answer.html&quot;&gt;Question and Answer&lt;/a&gt; is a natural extension of search and might apply in a number of closely related use cases.&lt;br /&gt;
&lt;br /&gt;
Rather than looking at our tools and figuring out what do with our hammers, we looked out into the world to understand what tools we needed first for the problems that were out there to be solved.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
Play to your Strengths&lt;/h2&gt;
My team is an engineering team. &amp;nbsp;We&#39;re not product managers and not always super great at coming up with innovative, disruptive ideas. &amp;nbsp;But we are extremely good at software design and development. It&#39;s what we do. &amp;nbsp;Once we had some plausible use cases in hand we immediately shifted gears to bring the integration project into our wheelhouse: software development.&lt;br /&gt;
&lt;br /&gt;
We immediately set about writing code and creating &lt;a href=&quot;https://github.com/IBM-Watson/wex-appbuilder-samples/blob/master/intro-to-bluemix-for-app-builder.md&quot;&gt;a useful architecture for how the Watson Developer Cloud might be used from Watson Explorer&lt;/a&gt;. &amp;nbsp;The most important thing to emerge from this exercise (other than &lt;a href=&quot;https://github.com/IBM-Watson/wex-appbuilder-samples&quot;&gt;working examples&lt;/a&gt;) was a set of integration patterns for when and how you can use Watson Developer Cloud services from Watson Explorer. &amp;nbsp;These patterns are important because it helps you to classify and quickly understand the nature of the solution once you know you&#39;re dealing with a certain kind of problem. &amp;nbsp;Further, knowing the patterns offers another way to navigate the available services as not all Watson Developer Cloud services are applicable to all patterns.&lt;br /&gt;
&lt;br /&gt;
Software architecture is one of our strengths. &amp;nbsp;Once we fully embraced this, the project became much easier.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://raw.githubusercontent.com/IBM-Watson/wex-appbuilder-samples/master/wex-wdc-architecture-overview.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;architecture overview for using Bluemix services with Watson Explorer&quot; border=&quot;0&quot; src=&quot;https://raw.githubusercontent.com/IBM-Watson/wex-appbuilder-samples/master/wex-wdc-architecture-overview.png&quot; title=&quot;architecture overview for using Bluemix services with Watson Explorer&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
Collaborate&lt;/h2&gt;
Reflecting on this project, one of the most valuable tools we had available to us was each other. &amp;nbsp;Our best integration ideas and the best work we did were the a result of my team and IBM Watson as an organization coming together to collaborate. &amp;nbsp;One of the most valuable activities we did was brainstorming and spit balling ideas on how Watson Developer Cloud services might work and what we could do with them. &amp;nbsp;When we were working together it was fun and the results were so much better than working alone.&lt;br /&gt;
&lt;br /&gt;
In the spirit of this collaboration &lt;a href=&quot;https://github.com/IBM-Watson?utf8=%E2%9C%93&amp;amp;query=wex&quot;&gt;we&#39;ve released our sample code, documentation, and high-level ideas for use cases under an open source license on GitHub&lt;/a&gt;. &amp;nbsp;Please take advantage of the work that we did. Build on what we started and create something truly amazing.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
Let&#39;s Create Something Amazing&lt;/h2&gt;
In 1878 Thomas Edison invented the phonograph, finally bringing playback capabilities - a full 20 years after Scott&#39;s&amp;nbsp;phonautograph. &amp;nbsp;The lesson here is that you have to start somewhere. Even if it seems silly. &amp;nbsp;Even&amp;nbsp;if it&#39;s not perfect. &amp;nbsp;Even if all you know is that you aren&#39;t satisfied with the first steps you took. &amp;nbsp;We&#39;re all in this together and defining the next era of computing is not going to happen by one person in a couple of months. &amp;nbsp;It&#39;s going to take all of us working together, playing to our strengths and never letting our focus wander from creating something useful for people that helps them solve real problems.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkrixukMH_HISsQ_yhgBTahDxvb436cMESihn8z1gkz4fMcB-ekfhnGBfRItjoFnPrCUgV45I6Uh66xGd8i0In2Ph9mtznWChtndZPykKCSgYJNJGA-eVkFF2nEOsls8ff1XlCO-FfMUjj/s1600/mk-ibm-dev-talk-wex-2014.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkrixukMH_HISsQ_yhgBTahDxvb436cMESihn8z1gkz4fMcB-ekfhnGBfRItjoFnPrCUgV45I6Uh66xGd8i0In2Ph9mtznWChtndZPykKCSgYJNJGA-eVkFF2nEOsls8ff1XlCO-FfMUjj/s1600/mk-ibm-dev-talk-wex-2014.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.neverletdown.net/feeds/6614531493325515588/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.neverletdown.net/2015/10/three-big-ideas-for-beating-innovators-block.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/6614531493325515588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/6614531493325515588'/><link rel='alternate' type='text/html' href='http://www.neverletdown.net/2015/10/three-big-ideas-for-beating-innovators-block.html' title='Three Big Ideas for Beating Innovator&#39;s Block'/><author><name>Michael</name><uri>http://www.blogger.com/profile/02649257003202319541</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/3Gz_gG1FOEs/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4097792925045582567.post-7616300302976477436</id><published>2015-08-25T09:00:00.001-04:00</published><updated>2023-05-11T15:04:34.694-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Code"/><title type='text'>Managing Multiple Ruby Versions with uru on Windows</title><content type='html'>&lt;a href=&quot;http://www.coppit.org/&quot;&gt;My undergraduate software engineering professor was awesome&lt;/a&gt;.&amp;nbsp;Here&#39;s one bit of advice he shared during his course that really stuck with me over the years.&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;b&gt;Pick a scripting language.&amp;nbsp; Any Scripting Language.&amp;nbsp; Learn to use it really, really well.&lt;/b&gt;&lt;/blockquote&gt;
Compiled programming languages obviously have a purpose, but lightweight, interpreted scripting languages are an important tool as well.  An interpreted scripting language is the perfect choice for one off tests, tedious text manipulation, automated tasks, and simple tools.  Scripts are easy to write, easy to share, and good enough to get the job done.&lt;br /&gt;
&lt;br /&gt;
My prof used Perl and was a whiz at it.  I eventually settled on Ruby as my scripting language of choice.  While the core language works really well across different platforms, as a predominantly Windows user,&amp;nbsp; I find that Ruby sometimes runs into problems in odd situations.  One thing that is particularly annoying is the lack of a Ruby version manager.&amp;nbsp;Version managers are a great idea.&amp;nbsp; The basic idea is to make it easier to switch between different Ruby versions on the command line&amp;nbsp;so that it&#39;s easier to test and develop against multiple projects.&lt;br /&gt;
&lt;br /&gt;
OS X and Linux users get RVM. Until recently, the only option on Windows was pik, a woefully out of date and problematic open&amp;nbsp;source&amp;nbsp;project that is no longer under active development (I&#39;m not going to even bother linking to it).  Thankfully, now there&#39;s &lt;a href=&quot;https://bitbucket.org/jonforums/uru/overview&quot;&gt;uru, a cross platform Ruby environment manager that works on Windows, Linux, and OS X.&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
I&#39;ve been using uru for close to a year now and it&#39;s worked out very well for me.&amp;nbsp; That said, when first g&lt;span style=&quot;font-family: inherit;&quot;&gt;etting &lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;uru&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt; up and running &lt;/span&gt;I did run into a few snags.  Here&#39;s the steps I used to overcome those problems.  If you&#39;re trying to run multiple Ruby versions on Windows you should give uru a try.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h2&gt;
Step 1: Install uru&lt;/h2&gt;
First, &lt;a href=&quot;https://bitbucket.org/jonforums/uru/overview&quot;&gt;download and install uru&lt;/a&gt;. To do this, download the zip and unpack it to a place on your path.  I have a generic &quot;tools&quot; folder for things like this.&amp;nbsp; Next, follow the instructions on the uru website.&amp;nbsp;Basically, just run...&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;C:\tools&amp;gt; uru_rt admin install&lt;/pre&gt;
&lt;br /&gt;
&lt;h2&gt;
Step 2: Install Ruby&lt;/h2&gt;
Next, download and install the Ruby versions you want.  You may have up to 1 &quot;system&quot; Ruby when using uru.  If you choose to have a system Ruby then that should be the only one you allow to be added to the path. I installed different versions of Ruby using the &lt;a href=&quot;http://rubyinstaller.org/&quot;&gt;Ruby Windows Installer&lt;/a&gt; and also the latest &lt;a href=&quot;http://jruby.org/&quot;&gt;JRuby&lt;/a&gt;.  I don&#39;t have any Ruby versions on my path and instead choose the Ruby version I want to use explicitly each time.  The main thing is to just be careful about what gets added to your path when performing the installations.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
Step 3:&amp;nbsp;​Register your Ruby Installations with uru&lt;/h2&gt;
By this point I have installed all of my Ruby versions to the &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;C:\ruby\&lt;/span&gt; directory with none on the path.  The next step is to register each Ruby version using the uru command line.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;C:\&amp;gt; uru admin add c:\ruby\jruby-1.7.18\bin\
---&amp;gt; Registered jruby at `c:\ruby\jruby-1.7.18\bin` as `1718`

C:\&amp;gt; uru ls
    1718        : jruby 1.7.18 (1.9.3p551) 2014-12-22 625381c on Java HotSpot(TM) ...
    193         : ruby 1.9.3p551 (2014-11-13) [i386-mingw32]
    215         : ruby 2.1.5p273 (2014-11-13 revision 48405) [x64-mingw32]
&lt;/pre&gt;
&lt;br /&gt;
Once installed I changed the tag associated with JRuby to be a little easier to remember.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;C:\&amp;gt; uru admin retag 1718 jruby
---&amp;gt; retagged `1718` to `jruby`&lt;/pre&gt;
&lt;br /&gt;
At this point, I&#39;m up and running.  Now switching my environment to use JRuby is as simple as...&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;C:\&amp;gt; uru jruby
---&amp;gt; Now using jruby 1.7.18 tagged as `jruby`

C:\&amp;gt; jruby --version
jruby 1.7.18 (1.9.3p551) 2014-12-22 625381c on Java HotSpot(TM) Client VM 1.8.0_31-b13 +jit [Windows 7-x86]

C:\&amp;gt; ruby --version
&#39;ruby&#39; is not recognized as an internal or external command,
operable program or batch file.

C:\&amp;gt; uru 193
---&amp;gt; Now using ruby 1.9.3-p551 tagged as `193`

C:\&amp;gt; jruby --version
&#39;jruby&#39; is not recognized as an internal or external command,
operable program or batch file.

C:\&amp;gt; ruby --version
ruby 1.9.3p551 (2014-11-13) [i386-mingw32]
&lt;/pre&gt;
&lt;br /&gt;
&lt;h2&gt;
Step 4: Install Ruby Windows DevKit&lt;/h2&gt;
The last step I took was installing the &lt;a href=&quot;http://rubyinstaller.org/downloads/&quot;&gt;Ruby Windows DevKit&lt;/a&gt;.  You&#39;ll need this to install any gems that require native extensions such as json.  DevKit is just an archive that you unzip to a specific location and run an install script to copy some files into the right places so Ruby can use them.&lt;br /&gt;
&lt;br /&gt;
I generally store the DevKit next to the version of Ruby to which it belongs, for example, &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;C:\ruby\Ruby193\devkit&lt;/span&gt; where Ruby193 is the folder containing the 193 version of Ruby that I registered with uru.  JRuby does not need a DevKit.  Just follow the normal instructions for installing DevKit and install it for each of the Ruby versions you want to use, obviously using the version of Ruby for which you are installing DevKit.&lt;br /&gt;
&lt;br /&gt;
As a last step, install the json gem to make sure DevKit is installed correctly...&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;C:\&amp;gt; gem install json
ERROR:  Could not find a valid gem &#39;json&#39;, here is why:
          Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 
          state=SSLv3 read server certificate B: certificate verify failed ....
&lt;/pre&gt;
&lt;br /&gt;
Oh no!  SSL Hell!  &lt;a href=&quot;https://gist.github.com/luislavena/f064211759ee0f806c88&quot;&gt;Apparently rubygems.org recently updated their SSL Certificates which requires clients to also update&lt;/a&gt;. This error comes up because the security certificates used by gem are out of date.  Thankfully it&#39;s pretty easy to update the certs.&lt;br /&gt;
&lt;br /&gt;
To fix this, follow the instructions on this StackOverflow question: &lt;a href=&quot;http://stackoverflow.com/questions/19150017/ssl-error-when-installing-rubygems-unable-to-pull-data-from-https-rubygems-o/27298259#27298259&quot;&gt;SSL Error When installing rubygems, Unable to pull data from &#39;https://rubygems.org/&lt;/a&gt;&amp;nbsp; You&#39;ll need to &lt;a href=&quot;https://raw.githubusercontent.com/rubygems/rubygems/master/lib/rubygems/ssl_certs/AddTrustExternalCARoot-2048.pem&quot;&gt;download the updated certificate&lt;/a&gt; and manually install it in each Gem directory....&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;C:\&amp;gt; uru 193
C:\&amp;gt; gem which rubygems
C:/ruby/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems.rb
&lt;/pre&gt;
&lt;br /&gt;
With all that completed, everything should now work as expected.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;C:\&amp;gt; gem install json
Temporarily enhancing PATH to include DevKit...
Building native extensions.  This could take a while...
Successfully installed json-1.8.2
Parsing documentation for json-1.8.2
Done installing documentation for json after 0 seconds
1 gem installed
&lt;/pre&gt;
&lt;br /&gt;
&lt;h2&gt;
Step 5: Enjoy Hacking in Ruby&lt;/h2&gt;
My workmates tell me I just need to switch to Linux already.&amp;nbsp; I do run a very Linux-like Windows environment with most of the GNU command line tools available from the Windows command line.&amp;nbsp; Whatevs.&amp;nbsp; I like my Windows and with uru at least I can switch between different Rubies with relative ease.&lt;br /&gt;
&lt;br /&gt;
Whether it&#39;s Ruby or something else, pick a scripting language, any scripting language,&amp;nbsp;and learn it well.&amp;nbsp; If you&#39;re running Ruby on Windows, hopefully this little guide helped you skip some frustrations!&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.neverletdown.net/feeds/7616300302976477436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.neverletdown.net/2015/08/managing-multiple-ruby-versions-with-uru.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/7616300302976477436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/7616300302976477436'/><link rel='alternate' type='text/html' href='http://www.neverletdown.net/2015/08/managing-multiple-ruby-versions-with-uru.html' title='Managing Multiple Ruby Versions with uru on Windows'/><author><name>Michael</name><uri>http://www.blogger.com/profile/02649257003202319541</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4097792925045582567.post-479794313807145232</id><published>2015-05-20T08:30:00.000-04:00</published><updated>2015-05-20T11:04:42.947-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Design"/><category scheme="http://www.blogger.com/atom/ns#" term="Software Architecture"/><title type='text'>Introduction to Microservices Architecture</title><content type='html'>I recently returned from the &lt;a href=&quot;http://softwarearchitecturecon.com/sa2015&quot;&gt;O&#39;Reilly Software Architecture conference&lt;/a&gt; where I presented/facilitated a workshop on &lt;a href=&quot;http://www.neverletdown.net/p/rapid-software-architecture-exploration.html&quot;&gt;Rapid Software Architecture Exploration&lt;/a&gt;.  My workshop went great.  According to the reviews it was among the better presentations at the conference -- which is awesome!  But that&#39;s not what this blog post is about.&lt;br /&gt;
&lt;br /&gt;
Microservices architecture was a significant part of the conference with well over 50% of the sessions dedicated to the topic.  And I&#39;m being really nice in saying it was &lt;i&gt;only&lt;/i&gt; 50% - I think it was closer to 90% and perhaps could have been called the O&#39;Reilly Microservices Conference. Anyway, so there&#39;s a ton of hype on this topic. &amp;nbsp;And since we&#39;re looking closely at the (loosely defined) microservices architectural style for an upcoming project at work, this was a great learning opportunity. I am currently reading the book &lt;a href=&quot;http://www.amazon.com/gp/product/1491950358/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=1491950358&amp;amp;linkCode=as2&amp;amp;tag=nevletdowdotn-20&amp;amp;linkId=D6I22UMP6XWAGP52&quot;&gt;Building Microservices by Sam Newman&lt;/a&gt; but I thought it would be useful to share some of the insights I gleaned from the conference now rather than waiting until I&#39;ve finished the book.&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://farm8.staticflickr.com/7615/16856084565_673f8e0899_z.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;265&quot; src=&quot;https://farm8.staticflickr.com/7615/16856084565_673f8e0899_z.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&quot;And you are now an anointed solider in the microservices army...&lt;span style=&quot;font-size: 12.8000001907349px;&quot;&gt;&quot;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;
What are Microservices?&lt;/h2&gt;
&lt;a href=&quot;https://twitter.com/adrianco&quot;&gt;Adrian Cockcroft&lt;/a&gt; (of Netflix fame) defines microservices as the following.&lt;br /&gt;
&lt;blockquote&gt;
Microservices are a loosely coupled Service-Oriented Architecture (SOA) with bounded contexts.&lt;/blockquote&gt;
This definition has a couple of parts that are worth further exploration.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;Loosely Coupled&lt;/em&gt;&lt;/strong&gt; implies that services are independently updateable units. Ultimately this means that updating or deploying one service should not require any modifications to other services in the architecture.  When multiple updates are required this could mean that the partitioning is not quite right and that perhaps services should be refactored to removing coupling or perhaps even combined.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;SOA&lt;/em&gt;&lt;/strong&gt; has been around for more than a decade and many people have commented that microservices architecture is really just &quot;SOA done right&quot;.  Many of the ideas you may already be familiar with from traditional SOA still apply -- for example, when dealing with data and distributed web-based systems.  Some lessons are also out of date, probably the most obvious being that SOAP has gone out of style in favor of lighter and simpler transport mechanisms. To me much of it just seems a matter of technology fashion.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Bounded contexts &lt;/strong&gt;&lt;/em&gt;comes from &lt;a href=&quot;http://www.amazon.com/gp/product/0321125215/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0321125215&amp;amp;linkCode=as2&amp;amp;tag=nevletdowdotn-20&amp;amp;linkId=SEPP5E7EBIVXU46H&quot;&gt;Domain Driven Design by Eric Evans&lt;/a&gt;. Bounded context requires that a domain model is internally consistent within the context of an explicitly established boundary.  In microservices architecture, the boundary for the domain becomes the public API through which all external entities communicate with the microservice. With these explicit boundaries then each microservice represents a partitioning of the whole domain model.  The &lt;a href=&quot;http://martinfowler.com/bliki/BoundedContext.html&quot;&gt;image below from Martin Fowler&lt;/a&gt; captures the idea of bounded context fairly well.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://martinfowler.com/bliki/images/boundedContext/sketch.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://martinfowler.com/bliki/images/boundedContext/sketch.png&quot; height=&quot;246&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Bounded context partitions a model into multiple contexts, each with clearly defined boundaries.&lt;br /&gt;
Within the context, the model is self-consistent.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
This idea that each microservice embodies a bounded context is actually pretty important and a key to what makes microservices architecture work.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;When the domain model is properly understood and partitioned, this enables the loose coupling among services.&lt;/li&gt;
&lt;li&gt;APIs are derived from boundaries within the whole model.&lt;/li&gt;
&lt;li&gt;Each service focuses on only one (or very few) ideas.  Even the example above could potentially be considered too big by some.&lt;/li&gt;
&lt;li&gt;Smaller models are easier to understand, design, code, and test.  As a rule of thumb, the context for a service (and the code that implements that context) should easily fit into 1 or 2 developer&#39;s memory.  An alternative rule of thumb is that a microservice can be completed, tested, and shippable (&quot;done done&quot;) in 1-2 weeks time.&lt;/li&gt;
&lt;/ul&gt;
Perhaps the most interesting implication of bounded context from the perspective of microservices is that it enables self-organization which is essential for any microservices architecture to succeed.  As long as explicit boundaries exist among the domain model, and as long as partitions of the model are self-consistent, an organization can self-organize around domain concepts, which in turn allows software systems that organization builds to evolve to match the current understanding of the domain. Microservices proponents call this &quot;Reversing Conway&#39;s Law&quot; and the concept was observed by &lt;a href=&quot;http://www.amazon.com/gp/product/0201835959/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0201835959&amp;amp;linkCode=as2&amp;amp;tag=nevletdowdotn-20&amp;amp;linkId=ALMPFL2R3GERZY2O&quot;&gt;Fred Brooks in the Mythical Man Month&lt;/a&gt; years ago.&lt;br /&gt;
&lt;blockquote&gt;
[Conway&#39;s Law states that] Organizations that design systems are constrained to produce copies of the communication structures of these organizations [...] the organization chart will initially reflect the first system design, which is almost surely not the right one [...] as one learns, he changes the design [...]. Management structures also need to be changed as the system changes...&lt;/blockquote&gt;
Therefore, individuals must be allowed to self-organize so that they can evolve the architecture design as necessary. Within this loosely coupled world of bounded contexts in which only one or two people represent the entirety of a single shippable unit, individuals need to be empowered to take initiative and do what is right. The gist is that if you want a loosely coupled system with bounded context then these ideals must be embodied in the teams teams that build such systems.&lt;br /&gt;
&lt;br /&gt;
Blah blah microservices blah blah bounded context blah blah Conway&#39;s law. &amp;nbsp;After a while that&#39;s all it sounds like.&lt;br /&gt;
&lt;br /&gt;
There is a ton of hype around this topic almost to the point of absurdity. My gut reaction to all of this is that it&#39;s interesting and great to see people talking about modeling, organizational structure, agility, modular design, and useful-but-seemingly-forgotten software engineering fundamentals again -- but I can&#39;t help but see microservices as just really excellent packaging for the same old ideas so the consultants and tool vendors can have something new to sell.&lt;br /&gt;
&lt;br /&gt;
After really digging into the literature, I&#39;m not willing to cynically dismiss microservices, but I do hold a healthy bit of skepticism as I get my hands dirty building my first fine-grained, distributed, service-oriented components. Let&#39;s say, I&#39;m optimistically hopeful for now and it all seems very interesting but I need to gain more first hand experience.&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.neverletdown.net/feeds/479794313807145232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.neverletdown.net/2015/05/introduction-to-microservices.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/479794313807145232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/479794313807145232'/><link rel='alternate' type='text/html' href='http://www.neverletdown.net/2015/05/introduction-to-microservices.html' title='Introduction to Microservices Architecture'/><author><name>Michael</name><uri>http://www.blogger.com/profile/02649257003202319541</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4097792925045582567.post-6601696915353210076</id><published>2015-03-31T09:00:00.000-04:00</published><updated>2015-08-22T20:41:07.849-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Design Methods"/><category scheme="http://www.blogger.com/atom/ns#" term="Software Architecture"/><title type='text'>Communicating Design Intent by Sharing the Paths not Taken</title><content type='html'>If you&#39;re even remotely a movie buff then you&#39;ll probably really enjoy &lt;a href=&quot;https://twitter.com/tonyszhou&quot;&gt;Tony Zhou&#39;s&lt;/a&gt; &quot;&lt;a href=&quot;https://www.youtube.com/user/everyframeapainting&quot;&gt;Every Frame a Painting&lt;/a&gt;&quot; series. &amp;nbsp;His analytical, accessible, and entertaining film studies mini-documentaries are wonderful. Each video in the series focuses on one main idea, often something overlooked or perhaps under appreciated by other films studies enthusiasts (analysts? critics?). &amp;nbsp;&lt;a href=&quot;https://www.youtube.com/watch?v=Z1PCtIaM_GQ&quot;&gt;This bit of analysis on what makes Jackie Chan&#39;s physical comedy so brilliant&lt;/a&gt; is... well, itself brilliantly done.&lt;br /&gt;
&lt;br /&gt;
In &lt;a href=&quot;https://www.youtube.com/watch?v=X05TDsoSg2Y&quot;&gt;this episode of Every Frame a Painting&lt;/a&gt;, Tony discusses the idea of &lt;i&gt;showing &lt;/i&gt;character choice rather than just talking about it, using Snowpiercer as an example:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
In nearly every blockbuster you&#39;ve watched or tell-tale game that you&#39;ve played, you&#39;ve seen moments like this: the protagonist has to make a choice and there&#39;s no way to reverse it.&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
Just to be clear, I think moments like these are great and a foundation of good storytelling but I do wish in movies they weren&#39;t presented through dialog. &amp;nbsp;So today I look at one possible alternative. &amp;nbsp;In fact it&#39;s one of the oldest traditions in cinema. &amp;nbsp;How do you show character choice? &amp;nbsp;Left or right. &amp;nbsp;That&#39;s it.&lt;/blockquote&gt;
In a similar fashion as many blockbuster and video game protagonists &lt;b&gt;software architects regularly encounter complex choices that often can&#39;t be easily reversed&lt;/b&gt;. Or rather, the architecture we&#39;re designing experiences those complex choices (since in this metaphor we&#39;re working behind the camera and the architecture is the character on screen). But, unlike blockbusters and video games, software architects don&#39;t have the luxury of an audience that can simply watch the architecture evolve with each design decision made.&lt;br /&gt;
&lt;br /&gt;
Even on small teams, generally only a few people at a time are in the room or at the whiteboard when a key decision about the architecture is made. &amp;nbsp;In some ways it&#39;s as if we are asking downstream designers to watch only the last 10 minutes of Snowpiercer and then try to figure out why it&#39;s such a big deal for Chris Evan&#39;s character, Curtis, to do what he does. &amp;nbsp;Without the context of these critical decision points that are constantly happening throughout a character&#39;s/architecture&#39;s journey, the audience/downstream designer loses significant rationale that could help explain a lot.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
Are there methods that architects can use to make architectural choice evident? &amp;nbsp;The answer to this question is certainly, &quot;Yes!&quot;&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;h2&gt;
&lt;br /&gt;
&lt;/h2&gt;
&lt;h2&gt;
The Paths Not Taken&lt;/h2&gt;
While downstream designers can&#39;t watch the architecture make a choice on the silver screen (left or right?), we &lt;i&gt;can &lt;/i&gt;still&amp;nbsp;make it easier for developers who read our documents to playback the architecture&#39;s &quot;character development&quot; more easily.&lt;br /&gt;
&lt;br /&gt;
Sometimes when trying to communicate design intent and rationale, it&#39;s more effective to say what you didn&#39;t do rather than what you chose to do. The method I&#39;m proposing is pretty simple. &lt;b&gt;Create a list of the architectural decisions you discarded with a brief note for why those decisions were rejected.&lt;/b&gt;&amp;nbsp; With this list in hand, downstream designers have an opportunity to replay critical decision points and can now watch the architecture develop and mature. &amp;nbsp;Left or right? &amp;nbsp;What critical moments did this architecture face and what path did it end up taking?&lt;br /&gt;
&lt;br /&gt;
Here&#39;s an example from a recent project. The basic problem involves figuring out how to integrate our client software with third-party, cloud-based web services that application developers using our software are starting to employ more frequently.&lt;span style=&quot;font-size: 13.3333330154419px;&quot;&gt;&amp;nbsp;&lt;/span&gt;The specifics aren&#39;t too important for the example, and I can&#39;t really share the specifics anyway.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt; &lt;th&gt;Path not Taken&lt;/th&gt; &lt;th&gt;Why this Path was Rejected&lt;/th&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;Create a cloud-based &quot;services adapter&quot; to buffer against changes in third-party services.&lt;/td&gt; &lt;td&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;New component that must be maintained by the team. This increases the workload for development, QA, docs, ... everyone.&lt;/li&gt;
&lt;li&gt;Benefits in features and quality attributes are not required for MVP release&lt;/li&gt;
&lt;li&gt;Costs significantly outweigh the benefits.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;/ul&gt;
&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;Release adapter as open source, have customers load it themselves&lt;/td&gt; &lt;td&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Extra steps to deployment inhibit adoption&lt;/li&gt;
&lt;li&gt;Open source is great, but unmodified defaults could mean security issues down the road.&lt;/li&gt;
&lt;li&gt;Worries about training for customers and delivery consultants&lt;/li&gt;
&lt;li&gt;New component that must be maintained by the team&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;Offer a client library that makes it easier for developers to connect to third party services directly&lt;/td&gt; &lt;td&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Client library will always be out of date (services are cloud-based with continuous delivery, our software is not)&lt;/li&gt;
&lt;li&gt;Increased learning curve in that customers must learn both how to use the service and how to use the client library.&lt;/li&gt;
&lt;li&gt;Documentation overhead - client library must be fully documented.&lt;/li&gt;
&lt;li&gt;Design overhead, client library becomes a stable API... high risk in getting it right the first time on short schedule.&lt;/li&gt;
&lt;li&gt;New component, increases workload for team&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;No new support for web services integration in the client software&lt;/td&gt; &lt;td&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Doing nothing does not improve the user experience&lt;/li&gt;
&lt;li&gt;New patterns and paradigms are emerging that require some kind of help be available to application developers.&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
With this background and context, its&#39; pretty easy to see that the design choices we made kept our architecture on a path toward simplicity and tended to favor less code over more code. With this history and context, the list of design decisions that were rejected, it&#39;s much easier to understand why the resulting architecture is what it is. &lt;b&gt;You&#39;re essentially replaying the architecture&#39;s definable moments.&amp;nbsp;&lt;/b&gt;Hopefully with this information downstream developers won&#39;t scratch their heads when they see what might appear to be an odd outcome for the architecture/character. They can see for themselves the key decisions that led to the architecture/character becoming what it became and in turn internalize a significantly more nuanced appreciation for the architecture/character as a whole.&lt;br /&gt;
&lt;br /&gt;
Again, the insightful Tony Zhou:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
So, the next time you your character runs into a complex choice, who knows? &amp;nbsp;Maybe it&#39;s actually just a simple matter of: left or right?&lt;/blockquote&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;510&quot; src=&quot;https://www.youtube.com/embed/X05TDsoSg2Y&quot; width=&quot;854&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.neverletdown.net/feeds/6601696915353210076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.neverletdown.net/2015/03/communicating-design-intent-with-the-paths-not-taken.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/6601696915353210076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/6601696915353210076'/><link rel='alternate' type='text/html' href='http://www.neverletdown.net/2015/03/communicating-design-intent-with-the-paths-not-taken.html' title='Communicating Design Intent by Sharing the Paths not Taken'/><author><name>Michael</name><uri>http://www.blogger.com/profile/02649257003202319541</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/X05TDsoSg2Y/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4097792925045582567.post-8202054272877641447</id><published>2015-03-17T08:30:00.000-04:00</published><updated>2015-03-17T08:30:02.685-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Agile Software Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Software Architecture"/><title type='text'>Agile Software Architecture (with George Fairbanks)</title><content type='html'>&lt;a href=&quot;http://georgefairbanks.com/&quot;&gt;George Fairbanks&lt;/a&gt; and I chatted via Google+ Hangout in February 2014 about agile software architecture. I think we found a groove pretty quickly and the conversation overall went great. I&#39;ve created bookmarks of some of the main topic areas that we covered to make it easier to jump to bits of the discussion you might find more interesting.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;//www.youtube.com/embed/uF9dlMIyy44&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;/center&gt;
&lt;center&gt;
&lt;br /&gt;&lt;/center&gt;
&lt;center style=&quot;text-align: left;&quot;&gt;
During this Hangout we meandered through several topics starting with walking skeletons and leading to...&lt;/center&gt;
&lt;center style=&quot;text-align: left;&quot;&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/center&gt;
&lt;center style=&quot;text-align: left;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;Walking skeletons, thin vertical slices, and assumptions about &quot;ideal&quot; patterns for agile architecture&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=uF9dlMIyy44#t=417&quot;&gt;YAGNI and how you figure out what the bones of a walking skeleton should be&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=uF9dlMIyy44#t=605&quot;&gt;System Metaphor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=uF9dlMIyy44#t=442&quot;&gt;Design Patterns&lt;/a&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Presumptive architectures&lt;/li&gt;
&lt;li&gt;Routine vs. novel design&lt;/li&gt;
&lt;li&gt;Including the &lt;a href=&quot;https://www.youtube.com/watch?v=uF9dlMIyy44#t=442&quot;&gt;&quot;just like the last thing we built&quot; pattern&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=uF9dlMIyy44#t=770&quot;&gt;How patterns mature over time&lt;/a&gt;... and a seeming lack of attention to patterns these days&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;I proposed that &lt;a href=&quot;https://www.youtube.com/watch?v=uF9dlMIyy44#t=862&quot;&gt;perhaps patterns are being codified as frameworks&lt;/a&gt; (and not patterns catalogs)&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Choose a framework, architecture chosen&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=uF9dlMIyy44#t=931&quot;&gt;Balancing flexibility and power when choosing frameworks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=uF9dlMIyy44#t=999&quot;&gt;Switching frameworks is really hard&lt;/a&gt;...&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Refactoring in the small vs. refactoring in the large&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=uF9dlMIyy44#t=1129&quot;&gt;Can you refactor to patterns and back your way into a framework&lt;/a&gt;? &amp;nbsp;Maybe....&lt;/li&gt;
&lt;li&gt;If you choose the wrong framework you might be stuck&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=uF9dlMIyy44#t=1160&quot;&gt;Last responsible moment&lt;/a&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;There&#39;s a tension in keeping options open since it&#39;s so expensive (or impossible) to change frameworks later.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=uF9dlMIyy44#t=1252&quot;&gt;Spiral model&lt;/a&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Great model for thinking about up front design decisions in the right ways.&lt;/li&gt;
&lt;li&gt;Also, correct pronunciation of Boehm, ;-)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=uF9dlMIyy44#t=1382&quot;&gt;Michael Waterman&#39;s research&lt;/a&gt;&amp;nbsp;-- see also,&lt;a href=&quot;http://agile.cribbwaterman.net/2014/08/a-theory-of-agile-architecture-in_15.html&quot;&gt; his research paper&lt;/a&gt; and &lt;a href=&quot;http://agile.cribbwaterman.net/&quot;&gt;blog&lt;/a&gt;.&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=uF9dlMIyy44#t=1464&quot;&gt;Strategically deferring architectural decisions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=uF9dlMIyy44#t=1505&quot;&gt;Trading speed of delivery for knowledge&lt;/a&gt;&amp;nbsp;-&amp;nbsp;&quot;That would be a nice problem to have&quot;&lt;/li&gt;
&lt;li&gt;See also Boehm&#39;s and Turner&#39;s book&amp;nbsp;&lt;a href=&quot;http://www.amazon.com/gp/product/0321186125/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0321186125&amp;amp;linkCode=as2&amp;amp;tag=nevletdowdotn-20&amp;amp;linkId=UDHBLSUAVKC2OVU5&quot;&gt;Balancing Agility and Discipline: A Guide for the Perplexed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Does it make sense to choose a framework that promotes properties you need today to deliver faster at the sacrifice of properties you might need later?&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=uF9dlMIyy44#t=1657&quot;&gt;Engineering by design vs. Engineering by coincidence&lt;/a&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Choosing architectural mismatch to promote different qualities?&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/center&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.neverletdown.net/feeds/8202054272877641447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.neverletdown.net/2015/03/agile-software-architecture.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/8202054272877641447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/8202054272877641447'/><link rel='alternate' type='text/html' href='http://www.neverletdown.net/2015/03/agile-software-architecture.html' title='Agile Software Architecture (with George Fairbanks)'/><author><name>Michael</name><uri>http://www.blogger.com/profile/02649257003202319541</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4097792925045582567.post-4934562506302257243</id><published>2015-03-03T08:30:00.000-05:00</published><updated>2017-08-21T22:53:19.829-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Agile Software Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Design Methods"/><category scheme="http://www.blogger.com/atom/ns#" term="Software Architecture"/><title type='text'>Architecture Haiku</title><content type='html'>The most effective way to transfer complex, abstract ideas from one person’s brain to another person’s brain is by writing the ideas down. This premise permeates our whole approach to software design. &amp;nbsp;Entire books are dedicated to creating better documentation! &amp;nbsp;Following traditional documentation advice inevitably leads to comprehensive, albeit verbose, documents filled with important details that, sadly, too few stakeholders read. &amp;nbsp;There must be a better way.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
Introducing the Architecture Haiku&lt;/h2&gt;
George Fairbanks&amp;nbsp;&lt;a href=&quot;http://georgefairbanks.com/architecture-haiku&quot;&gt;originally came up with the idea of the Architecture Haiku&lt;/a&gt; as &quot;a one-page, quick-to-build, uber-terse design description.&quot; &amp;nbsp;With only one page of paper (assumed standard, A4) to work with there is no space to be indecisive or indirect. &amp;nbsp;There might not even be room for diagrams - which at first sounds crazy, but perhaps is crazy brilliant! &amp;nbsp;We tried this idea on my team and it turned out to be a great, lightweight method for writing down and sharing architecture decisions.&lt;br /&gt;
&lt;br /&gt;
With so little room, picking the right information to include is extremely important. &amp;nbsp;Here&#39;s what Fairbanks recommends:&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;a brief summary of the overall solution,&lt;/li&gt;
&lt;li&gt;a list of important technical constraints,&lt;/li&gt;
&lt;li&gt;a high-level summary of key functional requirements,&lt;/li&gt;
&lt;li&gt;a prioritized list of quality attributes,&lt;/li&gt;
&lt;li&gt;a brief explanation of design decisions including rationale and trade-offs,&lt;/li&gt;
&lt;li&gt;a list of architectural styles and patterns used, and&lt;/li&gt;
&lt;li&gt;only those diagrams that add meaning beyond the information already on the page.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Not including diagrams seems kinda nuts, after all software architects are famous (infamous?) for their box and line diagrams. &amp;nbsp;But there is power in language and an extensive pattern catalog has been built up around software design. &amp;nbsp;When existing architectural styles and patterns can&#39;t quite describe an idea, &lt;a href=&quot;http://www.neverletdown.net/2011/08/guidelines-for-system-metaphor.html&quot;&gt;home grown system metaphors can fill the gap&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Is one page really enough? &amp;nbsp;We found that one page is more than enough, but it takes some thought. The intent is not to capture all possible information but rather to highlight the most critical ideas.&lt;br /&gt;
&lt;br /&gt;
The Architecture Haiku then plays two important roles. First, it creates a vision of the architecture that can be easily consumed and shared. Second, this single page of documentation records cognitive landmarks and other reference points that help teammates recall prior decisions, stories, whiteboard sessions, conversations, and so on. On the path to discovering the architecture for the software system you&#39;re going to build, your team develops a shared understanding for much of the design. Haiku is a fast and easy way to record key decisions and landmarks for navigating your past discussions, memories, and decisions.&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH9_uMi0035LmQEtlQwOTCEiiVEB8w9S59ZtVxUFOD4ce93uhSdoNrW1zdrAh9OS-LwUQhmY9yOmfLW5cDP1B6xlO7KpIFh9hdmscZ3JJtYlijot6cg2xIfXEX8zgHnFiNnSNYn1dn776g/s1600/software-architecture-haiku-example.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH9_uMi0035LmQEtlQwOTCEiiVEB8w9S59ZtVxUFOD4ce93uhSdoNrW1zdrAh9OS-LwUQhmY9yOmfLW5cDP1B6xlO7KpIFh9hdmscZ3JJtYlijot6cg2xIfXEX8zgHnFiNnSNYn1dn776g/s1600/software-architecture-haiku-example.jpg&quot; height=&quot;400&quot; width=&quot;307&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Example Architecture Haiku, scanned from a real project.&lt;br /&gt;
Notice the hand written annotations. &amp;nbsp;You &lt;b&gt;can &lt;/b&gt;say a lot in only one page.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;b&gt;Tips for using Architecture Haiku&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
In using the Architecture Haiku with my team, we discovered several tips for effectively creating them.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Establish a common software architecture vocabulary for your team&lt;/b&gt;. &amp;nbsp;It&#39;s easier to communicate effectively when everyone speaks the same language and has the same conceptual understanding.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Treat the Architecture Haiku as a living document&lt;/b&gt;. &amp;nbsp;As you learn more or as decisions change, update the document. &amp;nbsp;It&#39;s only one page so this is easy to do.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Explore the design space first, then record decisions in Haiku&lt;/b&gt;. &amp;nbsp;To be concise you have to know what&#39;s important. &amp;nbsp;This takes a little work, but again if you treat the Haiku as a living document then it becomes a tool to help you unlike longer documents which can become a burden.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Use a common template and good graphic design practices.&lt;/b&gt; &amp;nbsp;Making the font tiny just to fit everything on one page defeats the purpose of creating an easily consumable reference document. &amp;nbsp;The true goal of the Architecture Haiku is to be concise and force difficult decisions that enhance clarity.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Use the architecture Haiku as an outline for future documentation.&lt;/b&gt;&amp;nbsp; Once you know what&#39;s really important, use the Haiku to help guide the creation of other documents. &amp;nbsp;In some cases you can treat it as an outline or even as an executive summary for a more fully realized architecture description document.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;An Architecture Haiku Template!&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
To help you get started with using the Architecture Haiku with your team, &lt;a href=&quot;https://drive.google.com/file/d/0B48EfHNk_7NrQ1VKX2Zyb0xlbGc/view?pli=1&quot;&gt;here is a simple template&lt;/a&gt; that includes... wait for it.... a one page description of the Architecture Haiku!&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Some other resources on Architecture Haiku and related topics.&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://georgefairbanks.com/architecture-haiku&quot;&gt;George Fairbanks. Architecture Haiku&lt;/a&gt;. Includes slides from the original presentations as well as write-ups on the Architecture Haiku.&lt;/li&gt;
&lt;li&gt;Michael Keeling.&amp;nbsp;&lt;a href=&quot;http://resources.sei.cmu.edu/library/asset-view.cfm?assetID=20330&quot;&gt;Creating an Architecture Oral History: Minimalist Techniques for Describing Systems&lt;/a&gt;. &lt;a href=&quot;http://www.sei.cmu.edu/saturn/2012/&quot;&gt;SATURN 2012&lt;/a&gt;. &amp;nbsp;This talk summarizes my team&#39;s experience using Architecture Haiku and explores the idea of an architecture oral history that is fostered among a team.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Give it a try! &amp;nbsp;We&#39;ve had a lot of success with Architecture Haiku and I think you will too. &amp;nbsp;Send me an email or leave a comment to let me know how it goes. &amp;nbsp;I think it would be awesome if we had a collection of Haiku examples from different kinds of software systems and open source projects.&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.neverletdown.net/feeds/4934562506302257243/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.neverletdown.net/2015/03/architecture-haiku.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/4934562506302257243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/4934562506302257243'/><link rel='alternate' type='text/html' href='http://www.neverletdown.net/2015/03/architecture-haiku.html' title='Architecture Haiku'/><author><name>Michael</name><uri>http://www.blogger.com/profile/02649257003202319541</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH9_uMi0035LmQEtlQwOTCEiiVEB8w9S59ZtVxUFOD4ce93uhSdoNrW1zdrAh9OS-LwUQhmY9yOmfLW5cDP1B6xlO7KpIFh9hdmscZ3JJtYlijot6cg2xIfXEX8zgHnFiNnSNYn1dn776g/s72-c/software-architecture-haiku-example.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4097792925045582567.post-8159752458931203171</id><published>2014-12-03T08:30:00.000-05:00</published><updated>2015-03-20T15:30:49.526-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Agile Software Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Software Architecture"/><category scheme="http://www.blogger.com/atom/ns#" term="Talks"/><title type='text'>Dante can be Agile too</title><content type='html'>[I recently gave a talk for the monthly SEI Agile Collaboration Meeting. The Agile Collaboration Meeting brings together upwards of 50 or so agile practitioners from throughout the federal and DoD space including civilian contractors. This post is a summary of the talk I gave at the September meeting.]&lt;br /&gt;
&lt;br /&gt;
When you do a search for pictures of &quot;unrequited love&quot; one of the first images that comes up is this &lt;a href=&quot;http://en.wikipedia.org/wiki/Dante_and_Beatrice_(painting)&quot; target=&quot;&quot;&gt;1884 painting by Henry Holiday titled &quot;Dante and Beatrice.&quot;&lt;/a&gt; &amp;nbsp;As Beatrice and Dante were Italians it is extremely important that you pronounce her name in your mind correctly – Bee-a-tree-che – using the Italian pronunciation. &amp;nbsp;In this painting you see Dante, the poet of the Divine Comedy among many other works, chilling on a bridge as he is snubbed by a posse of three women. &amp;nbsp;Beatrice is the one in yellow completely ignoring Dante, who probably went out of his way to be in the right place at the right time so he could see her.&lt;br /&gt;
&lt;br /&gt;
In real life, Dante was obsessed with Beatrice. &amp;nbsp;They met when they were children and their families cruised in many of the same social and professional circles. &amp;nbsp;Allegedly it was love at first sight for Dante, then age 9. &amp;nbsp;Both Dante and Beatrice married other people and apparently met only one other time before Beatrice died at the young age of 24. Dante wrote of Beatrice as &quot;his savior&quot; and she was a prominent character in his Vita Nova (a collection of poems professing his love for both the actual and a metaphorical Beatrice) and Divine Comedy (in which she escorts Dante through Heaven).&lt;br /&gt;
&lt;br /&gt;
I propose that there is an unrequited love between the software architecture and agile communities; software architecture is the Dante to an agile Beatrice who simply ignores him. &amp;nbsp;Certainly if this were true there would be some observable facts to either support or refute this idea.&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://upload.wikimedia.org/wikipedia/commons/f/f8/Dante_and_beatrice.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://upload.wikimedia.org/wikipedia/commons/f/f8/Dante_and_beatrice.jpg&quot; height=&quot;436&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Dante and Beatrice, painting by Henry Holiday (1884)&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;h2&gt;
Hypothesis: The Software Architecture Community &quot;Loves&quot; Agile more than the Agile Community &quot;Loves&quot; Software Architecture&lt;/h2&gt;
To test this hypothesis I will examine submissions from popular agile and software architecture conferences. &amp;nbsp;The two proxies I will use are the &lt;a href=&quot;http://www.sei.cmu.edu/saturn/2015/&quot; target=&quot;_blank&quot;&gt;SATURN conference&lt;/a&gt; representing the software architecture community, and the &lt;a href=&quot;http://agile2015.agilealliance.org/&quot; target=&quot;_blank&quot;&gt;national Agile conference&lt;/a&gt; (sometimes called &quot;The Big Agile Conference&quot;) representing the agile community. &amp;nbsp;Both conferences are about 10 years old and are practitioner focused events that attract a good mix of working professionals and thought leaders.&lt;br /&gt;
&lt;br /&gt;
The Agile conference is about 10x larger than SATURN both in terms of size and number of submissions. &amp;nbsp;That being said both conferences have a similar peer review process in which experts from the community review and recommend submissions for inclusion in the program and both conferences are focused on practice opposed to academic research.&lt;br /&gt;
&lt;br /&gt;
My hypothesis is that the software architecture community &quot;loves&quot; agile more than the agile community &quot;loves&quot; software architecture. &amp;nbsp;The implication being that architectures &quot;love&quot; for agile is not returned, or unrequited. &amp;nbsp; I would expect this to be evident in the session topics presented at each conference.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
Testing Method: Conference Sessions Analysis&lt;/h2&gt;
Love for a topic might be shown by the number of talks that are accepted on that topic at each conference. &amp;nbsp;For example, the presence of a software architecture related talk at the Agile conference would indicate a +1 for Agile&#39;s love of software architecture.&lt;br /&gt;
&lt;br /&gt;
I looked at the schedules for all Agile and SATURN conferences since 2011. &amp;nbsp;For each I used &quot;expert judgment&quot; to determine, based on the title, abstract, and speaker, whether the topic might be relevant in a different community. &amp;nbsp;In the Agile schedules I was looking for software architecture talks. &amp;nbsp;In the SATURN schedules I was looking for agile topics.&lt;br /&gt;
&lt;br /&gt;
I&#39;ll fully admit that a single data point of &quot;expert judgment&quot; is not the most rigorous test, but it&#39;s a start. Am I an expert? I have been a regular speaker and attendee at various agile and software development and design conferences since 2009. &amp;nbsp;I&#39;ve attended both SATURN and Agile twice in this time frame. &amp;nbsp;I&#39;ve helped with the review committee for Agile experience reports since 2012 and SATURN since 2013. I was the technical chair for SATURN in 2014 and I am a technical co-chair for SATURN 2015. &amp;nbsp;I also have a Master in Software Engineering from Carnegie Mellon and have studied and practiced both agile and software architecture fairly extensively in my career as a software engineer so far. It&#39;s not perfect, but I have enough perspective for the analysis I hope.&lt;br /&gt;
&lt;br /&gt;
For the Agile conference I was looking for topics that were directly related to software architecture. The basic rubric was anything related to the following topics (and I tried to be really liberal in what I included).&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Software architecture – include methods, notations, design, and lessons learned kinds of talks&lt;/li&gt;
&lt;li&gt;Technology – how things work and why and when you&#39;d use them&lt;/li&gt;
&lt;li&gt;Technical debt&lt;/li&gt;
&lt;li&gt;Modeling or enterprise architecture&lt;/li&gt;
&lt;li&gt;Anything that dealt with requirements beyond just user stores, features, and functional requirements – I was looking for broader thought about system quality attributes.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
For the SATURN conference I was looking for topics that were directly related to agile software development methods. &amp;nbsp;I tended to be a little stricter on the SATURN sessions mostly because I felt that &quot;agile&quot; was a generally broader topic than architecture.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Lightweight or lean methods – things that might not have come out and said &quot;I&#39;m agile&quot; but were definitely in the spirit of agility.&lt;/li&gt;
&lt;li&gt;Architecture in agile context – for example talking about an agile team or experience&lt;/li&gt;
&lt;li&gt;Continuous delivery – both technology and value&lt;/li&gt;
&lt;li&gt;Technical debt&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Again, the basic question I asked is, &quot;Would this session work at the other conference?&quot; If yes, it was a +1 for that community&#39;s love of the other.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
Results of the Analysis&lt;/h2&gt;
Looking at raw session counts, the two conferences seem about even in the time frame I examined with about 30 sessions at the Agile Conference that would likely work well at SATURN and about 35 sessions at SATURN that would likely do well at the Agile conference. &amp;nbsp;I know for a fact that at least a few of the sessions definitely fit in this category since there are few repeat presenters including myself, Rebecca Wirfs-Brock, Andy Hunt, and Joe Justice among others.&lt;br /&gt;
&lt;br /&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;  &lt;th&gt;&lt;/th&gt;   &lt;th&gt;Agile&lt;/th&gt;  &lt;th&gt;SATURN&lt;/th&gt; &lt;/tr&gt;
&lt;tr&gt;  &lt;td&gt;2011&lt;/td&gt;  &lt;td&gt;10&lt;/td&gt;  &lt;td&gt;7&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;  &lt;td&gt;2012&lt;/td&gt;  &lt;td&gt;6&lt;/td&gt;  &lt;td&gt;8&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;  &lt;td&gt;2013&lt;/td&gt;  &lt;td&gt;9&lt;/td&gt;  &lt;td&gt;9&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;  &lt;td&gt;2014&lt;/td&gt;  &lt;td&gt;5&lt;/td&gt;  &lt;td&gt;11&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;  &lt;td&gt;Total&lt;/td&gt;  &lt;td&gt;30&lt;/td&gt;  &lt;td&gt;35&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
Looking at the percentages paints a completely different picture. &amp;nbsp;Close to a quarter – 22% – of the talks at SATURN are agile-related while barely 5% of talks at Agile deal with software architecture related topics. &amp;nbsp;The Agile Conference consistently had about 145 sessions in the schedule while SATURN had about 35 sessions in 2011 and 2012 and 45 sessions in 2012 and 2014. &amp;nbsp;Using these approximate totals with the previous raw counts table gives the following percentage of sessions that might fit in at the other conference.&lt;br /&gt;
&lt;br /&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;  &lt;th&gt;&lt;/th&gt;   &lt;th&gt;Agile&lt;/th&gt;  &lt;th&gt;SATURN&lt;/th&gt; &lt;/tr&gt;
&lt;tr&gt;  &lt;td&gt;2011&lt;/td&gt;  &lt;td&gt;7%&lt;/td&gt;  &lt;td&gt;21%&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;  &lt;td&gt;2012&lt;/td&gt;  &lt;td&gt;4%&lt;/td&gt;  &lt;td&gt;18%&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;  &lt;td&gt;2013&lt;/td&gt;  &lt;td&gt;6%&lt;/td&gt;  &lt;td&gt;26%&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;  &lt;td&gt;2014&lt;/td&gt;  &lt;td&gt;3%&lt;/td&gt;  &lt;td&gt;24%&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;  &lt;td&gt;Total&lt;/td&gt;  &lt;td&gt;5%&lt;/td&gt;  &lt;td&gt;22%&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
This seems like pretty overwhelming evidence in support of the hypothesis. &amp;nbsp;As a side note, this result is definitely dependent on the proxy used. &amp;nbsp;For example, I haven&#39;t done the analysis but my experience with the XP conference in Europe and the European Agile community in general is that they have a much greater focus on architecture and design than in the US.&lt;br /&gt;
&lt;br /&gt;
Another interesting data point in support of the hypothesis is the SATURN &quot;Architecture in Practice&quot; Best Presentation award. &amp;nbsp;Interestingly, 4 out of 5 of the awards have gone to presentations on agile or lean topics since the award was introduced in 2010.&lt;br /&gt;
&lt;br /&gt;
There really isn&#39;t an equivalent award at the Agile Conference that spans across nearly all sessions like it does at SATURN, but this is still an interesting data point. &amp;nbsp;The SATURN &quot;Architecture in Practice&quot; award is &quot;awarded to the presentation that best describes experiences, methods, and lessons learned from the implementation of architecture-centric practices.&quot; &amp;nbsp;It&#39;s a peer voted award in which the attendees decide the winner via voting cards turned in just before the final keynote at the conference.&lt;br /&gt;
&lt;br /&gt;
The hypothesis is generally supported (with plenty of caveats and room for debate)... but the more interesting question might be: &amp;nbsp;Why does this unrequited love exists in the first place?&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
From whence doth this apparent unrequited love arise?&amp;nbsp;&lt;/h2&gt;
&lt;br /&gt;
To understand this question we have to understand a little more about how software is developed and the roles that agility and architecture play in software development.&lt;br /&gt;
&lt;br /&gt;
Consider a continuum of knowledge. &amp;nbsp;If I were to graph this (see below), the higher on the continuum you are, the more vision-oriented thinking you&#39;re doing. &amp;nbsp;Meanwhile the lower on the continuum the more detail-oriented you think. &amp;nbsp;An easy way to look at this is that the CEO and product management types are dealing with very coarse grained abstractions at the conceptual idea level toward the top, while programmers are dealing with much finer grained abstractions at the detailed level toward the bottom.&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRKu4ix7TPGjpiS3i_arBTndLuWkEkMiEsOEmrm0g4oU2hyphenhyphengBXprFUHa6f0JJ6D1pAvx6aC40_3W-xFmL3KKlUtPLAPsNI62f6qcuDNDsn6hOhChmWantL0BJI_HcFMYb4lwqNJZAPjGp9/s1600/realization-boundary.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRKu4ix7TPGjpiS3i_arBTndLuWkEkMiEsOEmrm0g4oU2hyphenhyphengBXprFUHa6f0JJ6D1pAvx6aC40_3W-xFmL3KKlUtPLAPsNI62f6qcuDNDsn6hOhChmWantL0BJI_HcFMYb4lwqNJZAPjGp9/s1600/realization-boundary.PNG&quot; height=&quot;369&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Ideas are easier to change and must eventually&amp;nbsp;become something more detailed and concrete&lt;br /&gt;
which&amp;nbsp;in turn becomes more difficult to change. &amp;nbsp;Kind of &quot;duh&quot; but the model makes some&lt;br /&gt;
interesting implications a little more obvious.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
At some point to build some software you have to cross over a theoretical &quot;realization boundary&quot; in which your ideas are translated into reality. &amp;nbsp;A vision eventually becomes code. &amp;nbsp;An interesting implication of this continuum is that the higher up you are (idea stuff) the easier it is to change while the lower down (concrete stuff) the more difficult it is to change. &amp;nbsp;So in some ways, the foundation of what will become reality is built upon the stuff that is easiest to change.&lt;br /&gt;
&lt;br /&gt;
This shouldn&#39;t be too surprising, but given that the stuff of dreams (the vision for a software system) essentially form the foundation for what eventually gets built, you create a situation where you almost have a house built on sand. &amp;nbsp;The visionary leader lives in a world that is easy to change and for reasons both silly and mission critical, this means that the software we build must be easily changeable too. &amp;nbsp;Miss the boat on this and you risk the ire of your visionary at best, becoming irrelevant and missing business opportunities at worst.&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixOo50u51n2ntLl9KS4B3f5mkXtTatwFav_5nCLu6eFzEQU1Qx09uplYcZgZYS9FoWzXGmFQQU3Ahr9EeOPIUz9h0rDOLKHhs5hZ5FsTMkWRCBjCm6OdycIK3i7omr8psTYeBqPFmj8seg/s1600/visions-can-change-easily.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixOo50u51n2ntLl9KS4B3f5mkXtTatwFav_5nCLu6eFzEQU1Qx09uplYcZgZYS9FoWzXGmFQQU3Ahr9EeOPIUz9h0rDOLKHhs5hZ5FsTMkWRCBjCm6OdycIK3i7omr8psTYeBqPFmj8seg/s1600/visions-can-change-easily.PNG&quot; height=&quot;299&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;A &quot;visionary leader&quot; (CEO or Product Management or others for example) can change their minds easily&lt;br /&gt;
for a variety of silly and very legitimate reasons. &amp;nbsp;Can your architecture stand up to the change?&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
It&#39;s almost as if we&#39;ve created a house built on sand. And indeed a hot and valuable topic that comes up often is creating pliable, malleable architectures so you can respond to change more easily.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
Embracing Change is the name of the game&lt;/h2&gt;
Software is built easily changeable premises and I will argue that as frustrating as this can be, it&#39;s actually a really, really good thing. &amp;nbsp;It seems then that the implication of all of this is that &lt;b&gt;enabling agility is the whole point of software architecture.&lt;/b&gt; &amp;nbsp;The key to this lies in understanding how to cross that &quot;realization boundary&quot;.&lt;br /&gt;
&lt;br /&gt;
A central focus of software architecture is in understanding how to transition the &quot;realization boundary&quot; so that the vision can become real software. This makes sense because software architects are required to live in both the vision-oriented and detail-oriented worlds. &amp;nbsp;&lt;b&gt;It is the responsibility of the architect to chaperon the vision from the minds of stakeholders to the fingers of the programmers.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
To characterize very broadly, Agile generally does a great job dealing with either vision-oriented stuff or detail-oriented stuff, but rarely addresses crossing this realization boundary. &amp;nbsp;It&#39;s like &lt;a href=&quot;http://www.sciencecartoonsplus.com/gallery/math/index.php#&quot; target=&quot;_blank&quot;&gt;that comic&lt;/a&gt; about the mathematician who does some hand waving -- &quot;a miracle appears here&quot; -- in the middle of a complex proof to arrive at a solution.&lt;br /&gt;
&lt;br /&gt;
The insights surfaced by this vision-to-detail model is interesting, but it still doesn&#39;t explain exactly why this might be happening. &amp;nbsp;If embracing change is the point, and if software architecture strives to support agility, then why is architecture&#39;s love still unrequited?&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMiW7EJON53kCTfXy1GlpXAmHejHJScFN5SQ7H52_cEGWDtqtiyrr8AgLg1xqn6sBtiYDGLIb82cZDmWKe7c9exYQB1nMqk0goMQ1iAkGSjN4_0yDgiaLUy3X9J6jA3EiIHwuVd2GEFmqY/s1600/dante-and-beatrice-software-architecture-and-agile.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMiW7EJON53kCTfXy1GlpXAmHejHJScFN5SQ7H52_cEGWDtqtiyrr8AgLg1xqn6sBtiYDGLIb82cZDmWKe7c9exYQB1nMqk0goMQ1iAkGSjN4_0yDgiaLUy3X9J6jA3EiIHwuVd2GEFmqY/s1600/dante-and-beatrice-software-architecture-and-agile.PNG&quot; height=&quot;478&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Dante (Software Architecture): &quot;Hi, Agile, I&#39;m ready to embrace change!&quot;&lt;br /&gt;
Beatrice (Agile): *sigh* &quot;It&#39;s that software architecture again... he&#39;s just so... structured.&quot; /eyeroll&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
The answer in this case may come down to the nature of agile and architecture. &amp;nbsp;&lt;b&gt;Agile software development promotes preserving choice while software architecture promotes preserving structure.&lt;/b&gt; &amp;nbsp;In many ways there is a natural tension in these two ideas, even when you are trying to preserve structure that preserves choice (head spinningly meta, I know).&lt;br /&gt;
&lt;br /&gt;
Ultimately, for any team, a lot of things have to go &quot;just right&quot; for a team to be agile. &amp;nbsp;It&#39;s more than just the methods they use, it comes down to culture and perhaps even grit. &amp;nbsp;As an agile software architect, I believe that having a solid understanding of software architecture design is one of the more important and interesting things required for everything to go &quot;just right&quot; so a team can be agile. There are other philosophies as well, and the best part is that they all can work in the right circumstances.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
SATURN 2015 is an Great Conference for Agile Architects&lt;/h2&gt;
I&#39;ve said it before and here it is again, XP is a great conference. &amp;nbsp;The &quot;big&quot; Agile conference is pretty good too. &amp;nbsp;But &lt;a href=&quot;http://www.neverletdown.net/2014/03/im-going-to-saturn-2014-and-you-should.html&quot; target=&quot;_blank&quot;&gt;SATURN is probably the best conference I&#39;ve seen for software architects&lt;/a&gt;. &amp;nbsp;If you are a software architect or interested in software architecture and anyway involved with an agile project, then SATURN is probably a better learning and networking event for you than the Agile conference. &amp;nbsp;For these topics, the signal to noise ratio is very good. &amp;nbsp;The conference itself is relatively small which means more meaningful network and greater engagement. &amp;nbsp;There is just an all around higher density of software architecture information.&lt;br /&gt;
&lt;br /&gt;
And what&#39;s better than attending? &amp;nbsp;Presenting! &amp;nbsp;&lt;a href=&quot;http://www.sei.cmu.edu/saturn/2015/call-for-submissions/&quot; target=&quot;_blank&quot;&gt;The submissions system is open now and proposals are being reviewed and accepted &lt;/a&gt;on a continuous basis through January 16, 2015. &amp;nbsp;Submit early to improve your chances of acceptance. &amp;nbsp;Submit as many talks as you want.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.sei.cmu.edu/saturn/2015/&quot; target=&quot;_blank&quot;&gt;SATURN is a great conference for agile architects and I hope to see you in Baltimore this April&lt;/a&gt;!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;355&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;//www.slideshare.net/slideshow/embed_code/41185382&quot; style=&quot;border-width: 1px; border: 1px solid #CCC; margin-bottom: 5px; max-width: 100%;&quot; width=&quot;425&quot;&gt; &lt;/iframe&gt; &lt;br /&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;strong&gt; &lt;a href=&quot;https://www.slideshare.net/mkeeling5000/saturn-conference-an-agile-practitioners-perspective&quot; target=&quot;_blank&quot; title=&quot;SATURN Conference: An Agile Practitioner&#39;s Perspective&quot;&gt;SATURN Conference: An Agile Practitioner&#39;s Perspective&lt;/a&gt; &lt;/strong&gt; &lt;/div&gt;
&lt;/center&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.neverletdown.net/feeds/8159752458931203171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.neverletdown.net/2014/12/dante-can-be-agile-too.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/8159752458931203171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/8159752458931203171'/><link rel='alternate' type='text/html' href='http://www.neverletdown.net/2014/12/dante-can-be-agile-too.html' title='Dante can be Agile too'/><author><name>Michael</name><uri>http://www.blogger.com/profile/02649257003202319541</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRKu4ix7TPGjpiS3i_arBTndLuWkEkMiEsOEmrm0g4oU2hyphenhyphengBXprFUHa6f0JJ6D1pAvx6aC40_3W-xFmL3KKlUtPLAPsNI62f6qcuDNDsn6hOhChmWantL0BJI_HcFMYb4lwqNJZAPjGp9/s72-c/realization-boundary.PNG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4097792925045582567.post-406468957947327860</id><published>2014-11-06T08:30:00.000-05:00</published><updated>2015-05-21T10:51:49.521-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Software Architecture"/><title type='text'>The Case for Minimalism in Software Architecture</title><content type='html'>&lt;blockquote class=&quot;tr_bq&quot;&gt;
&quot;Perfection is achieved not when there is nothing more to add, but when there is nothing left to take away.&quot; -&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/Antoine_de_Saint-Exup%C3%A9ry&quot; target=&quot;_blank&quot;&gt;Antoine de Saint-Exupery&lt;/a&gt;&lt;/blockquote&gt;
I was first introduced to the idea of minimalist software architecture in an article by &lt;a href=&quot;http://www.ruthmalan.com/&quot; target=&quot;_blank&quot;&gt;Ruth Malan&lt;/a&gt; and &lt;a href=&quot;http://www.bredemeyer.com/&quot; target=&quot;_blank&quot;&gt;Dana Bredemeyer&lt;/a&gt;, &quot;&lt;a href=&quot;http://www.bredemeyer.com/pdf_files/MinimalistArchitecture.PDF&quot; target=&quot;_blank&quot;&gt;Less is More with Minimalist Architecture&lt;/a&gt;&quot; (PDF). &amp;nbsp;The basic premise is devilishly simple: the software architect&#39;s job is to &quot;&lt;b&gt;only do with architecture what is absolutely necessary to achieve key, broadly scoped qualities of your system&lt;/b&gt;.&quot; &amp;nbsp;Any design decisions that do not support this goal are left to the discretion of downstream designers.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;In my experience, minimalism defined in this way is a powerful tool because it helps me keep my attention squarely on system qualities. &amp;nbsp;I&#39;ve found that focusing only on the most important quality attributes creates a clear delineation between &quot;architectural&quot; design and &quot;detailed&quot; design. &amp;nbsp;As a result, satisfying quality attributes becomes a signal for stopping architectural design activities and helps me avoid waste through over-analysis.&lt;br /&gt;
&lt;br /&gt;
Even more importantly, minimalist designs provide critical guidance without removing autonomy from downstream designers. &amp;nbsp;Who are these downstream designers? &amp;nbsp;In my experience with small teams, it is myself and my teammates now playing the role of programmers. &amp;nbsp;In larger groups, entire other teams of people that I sometimes have never met will fill this role and take responsibility for developing and detailing coarse grained components.&lt;br /&gt;
&lt;br /&gt;
The autonomy afforded by minimalism is critical for allowing team self-organization, which in turn allows for better lower-level designs. &amp;nbsp;Fred Brooks summarizes the reasoning for this phenomenon best in his essay &quot;The Documentary Hypothesis&quot; from &lt;a href=&quot;http://www.amazon.com/gp/product/0201835959/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0201835959&amp;amp;linkCode=as2&amp;amp;tag=nevletdowdotn-20&amp;amp;linkId=U5WBZY5XFEZBD6CY&quot; target=&quot;_blank&quot;&gt;The Mythical Man-Month&lt;/a&gt;. &amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/Conway&#39;s_law&quot; target=&quot;_blank&quot;&gt;Conway&#39;s Law&lt;/a&gt; predicts that a system&#39;s design is destined to reflect the communication structure of the team that built it; therefore a team&#39;s organization must change for the system&#39;s design to change. Minimalism reduces friction of change which in turn makes it easier to self-organize which in turn helps you make better designs.&lt;br /&gt;
&lt;br /&gt;
While minimalist software architecture makes sense, should the documentation necessarily be minimalist as well? &amp;nbsp;The answer, of course, is that it depends. &amp;nbsp;But, in my experience, creating a minimalist software architecture description encourages me to also design a minimalist architecture for the system documented. &amp;nbsp;It seems that by forcing myself to use a minimalist packaging, my only choice is to focus on the most important aspects of the system&#39;s design.&lt;br /&gt;
&lt;br /&gt;
Another keenly positive result of having tightly focused, minimalist documentation is that I am able to more quickly communicate essential design decisions to my team. &amp;nbsp;Important decisions and rationale are distilled to a pithy phrase or two that can be easily shared and remembered. &amp;nbsp;And change is easier too. &amp;nbsp;Modifying a design, in the case of an &lt;a href=&quot;http://www.neverletdown.net/2015/03/architecture-haiku.html&quot;&gt;Architecture Haiku&lt;/a&gt; or &lt;a href=&quot;http://www.neverletdown.net/2011/08/guidelines-for-system-metaphor.html&quot; target=&quot;_blank&quot;&gt;System Metaphor&lt;/a&gt;, is as simple as scratching out a few words on paper or adding an annotation, or changing the stories you share.&lt;br /&gt;
&lt;br /&gt;
Gone is the 30 page (or 50 or 100 page!) architecture description that my team ignores anyway. &amp;nbsp;Replacing it is a flyer advertising the key design decisions in the system we&#39;re building; a constant reminder of those decisions, their rationale, and the context around them. &amp;nbsp;As a result, minimalist software architecture descriptions serve as an effective catalyst for meaningful discussion and a practical guidebook for implementation.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://3.design-milk.com/images/2013/09/john_mccracken_david_zwirner_2-600x500.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.design-milk.com/images/2013/09/john_mccracken_david_zwirner_2-600x500.jpg&quot; height=&quot;529&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://www.cmoa.org/CollectionDetail.aspx?item=1003886&amp;amp;retPrompt=Back+to+Results&amp;amp;retUrl=CollectionSearch.aspx%3Fsrch%3DMcCracken&quot; target=&quot;_blank&quot;&gt;Untitled (Blue Leaning Plank)&lt;/a&gt; by &lt;a href=&quot;http://en.wikipedia.org/wiki/John_McCracken&quot; target=&quot;_blank&quot;&gt;John McCracken&lt;/a&gt; at the Carnegie Museum of Art.&lt;br /&gt;
A great example of minimalism and one of my favorite sculptures at this museum.&lt;br /&gt;
My wife thinks I&#39;m nuts for digging this piece soooo much.&amp;nbsp;This picture barely does it justice.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.neverletdown.net/feeds/406468957947327860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.neverletdown.net/2014/11/the-case-for-minimalism-in-software-architecture.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/406468957947327860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/406468957947327860'/><link rel='alternate' type='text/html' href='http://www.neverletdown.net/2014/11/the-case-for-minimalism-in-software-architecture.html' title='The Case for Minimalism in Software Architecture'/><author><name>Michael</name><uri>http://www.blogger.com/profile/02649257003202319541</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4097792925045582567.post-7933887104971861526</id><published>2014-10-29T08:30:00.000-04:00</published><updated>2017-08-21T23:01:35.550-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Agile Software Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Engineering"/><category scheme="http://www.blogger.com/atom/ns#" term="Problem Definition"/><category scheme="http://www.blogger.com/atom/ns#" term="Process"/><category scheme="http://www.blogger.com/atom/ns#" term="Quality"/><title type='text'>Defect-Driven Process Improvement</title><content type='html'>Defects can tell you a lot about your team. &amp;nbsp;And not just what the problems are in the code. &amp;nbsp;The &lt;a href=&quot;http://www.amazon.com/gp/product/020147719X/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=020147719X&amp;amp;linkCode=as2&amp;amp;tag=nevletdowdotn-20&amp;amp;linkId=7GNUYEEJ4KCTHF34&quot; target=&quot;_blank&quot;&gt;Team Software Process&lt;/a&gt; uses a very simple method of defect classification to unlock hidden insights. My team recently did some analysis on our bug database at the conclusion of a project and unearthed some surprising information about how we deal with requirements as well as some weaknesses we need to work on.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Simple Defect Classification&amp;nbsp;&lt;/h3&gt;
&lt;div&gt;
The simplest defect classification method involves manually evaluating defects to add contextual meta information. &amp;nbsp;The Team Software Process suggests some of the following pieces of information as a starting point for creating a defect taxonomy.&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Related Feature&lt;/b&gt;&amp;nbsp;- the feature to which the defect was reported against&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Module Discovered&lt;/b&gt;&amp;nbsp;- the code in which the defect was found&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Defect Type&lt;/b&gt;&amp;nbsp;- a standardized description of the defect, such as &quot;assignment,&quot; &quot;data,&quot; or &quot;syntax.&quot;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Reason Injected&lt;/b&gt;&amp;nbsp;- why did the bug make it into the software in the first place? &amp;nbsp; &amp;nbsp;This should also be standardized, for example &quot;education,&quot; &quot;oversight,&quot; or &quot;mistake.&quot;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Phase Injected&lt;/b&gt;&amp;nbsp;- what were the activities being performed when the defect was injected? &amp;nbsp;For example, &quot;requirements,&quot; &quot;design,&quot; or &quot;implementation.&quot;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Phase Discovered&lt;/b&gt; - what were the activities being performed when the defect was discovered? These would be the same as the list for phase injected.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
You&#39;ll recognize this simple defect classification method from the &lt;a href=&quot;https://www.neverletdown.net/2010/06/lightweight-experiments-for-process-improvement.html&quot; target=&quot;_blank&quot;&gt;Square Root team&#39;s pair programming experiments&lt;/a&gt;. Ideally &lt;a href=&quot;https://www.neverletdown.net/2009/10/tracking-bugs-better.html&quot; target=&quot;_blank&quot;&gt;this classification method can also be built directly into your defect tracker&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
This simple method has some disadvantages, the biggest one being that you usually will not be able to understand the reason a defect was injected until after you understand the root cause of the defect. Also, unless you were the one who wrote the code, you can only guess at the reason (was this an oversight, mistake, or education?) the defect was injected. As such, some knowledge of the system is required to perform the analysis. There are other methods for defect classification that overcome this problem but take a little more training and planning to apply well. &amp;nbsp;One example is the &lt;a href=&quot;http://researcher.watson.ibm.com/researcher/view_project.php?id=480&quot; target=&quot;_blank&quot;&gt;Orthogonal Defect Classification method from IBM Research&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Since the defects in a software system are a direct reflection of the process, knowledge, and skills of the team that injected them, once the defects are classified you have some serious power for enacting positive change.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h3&gt;
A Snapshot of our Defect Data&lt;/h3&gt;
&lt;div&gt;
The following graphs summarize some of the more interesting trends we discovered by looking at our data. &amp;nbsp;There were two very interesting findings. &amp;nbsp;First, we had a major problem with requirements that resulted in significant rework. &amp;nbsp;Second, we need to rethink the way we test and work to improve.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Figure 1 shows the reason why various defects were injected. Defects that originate in tests were excluded from this particular analysis so that we could focus on other areas that might also be interesting. &amp;nbsp;Communication in our vernacular refers to cases where the defect resulted from misinformation originating in documentation or personal interactions (e.g. a meeting). &amp;nbsp;We noticed that a disproportionately large number of defects resulted from miscommunication and so broke down communication into true communication problems, changes that were not effectively communicated, and new requirements that were only flushed out as reported bugs from the customer.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisfRBxkeP80l7HCMecJr-pTlE9K90x8qk0-nFBuXln8tUjEHoRGs_zNP7yDOe8LBllxaG9hyeFzcFh8wjBVNcEp7eEuSem8JXv_JDMxAgQMAWtV2G2rURS5OjhSE16uq4Lp1gFzBM0jmR0/s1600/project-enchilada-defect-inject-reason.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;Distribution of defects injected by reason&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisfRBxkeP80l7HCMecJr-pTlE9K90x8qk0-nFBuXln8tUjEHoRGs_zNP7yDOe8LBllxaG9hyeFzcFh8wjBVNcEp7eEuSem8JXv_JDMxAgQMAWtV2G2rURS5OjhSE16uq4Lp1gFzBM0jmR0/s1600/project-enchilada-defect-inject-reason.PNG&quot; title=&quot;Distribution of defects injected by reason&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Figure 1.&lt;/b&gt; Defect injection reason count and percentage.&lt;br /&gt;
Defects related to poor test cases are excluded from this summary.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
Figure 2 summarizes the information in figure 1 into two basic categories. &amp;nbsp;It turns out that 55% of reported non-test defects resulted from requirements or communication issues. &amp;nbsp;While 18% of reported non-test defects were injected directly by the development team. &amp;nbsp;This 18% includes oversights (things you just forgot), education (things you should have known how to do), and mistakes (things you understood and meant to do but botched somehow). &amp;nbsp;We also included process issues in which the process we were following created an opportunity for a defect that was actually injected into the software and escaped to the customer for review.&lt;br /&gt;
&lt;br /&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEbDfBt3s_bJeNSNSlL4WC8pCNDh_LlTmwIoiIaufYZY77dGq2BUSVZw9YGkSTN-Yj6k5Cs7tcToBf9Qy17OCCbAOrSdPk67f7f2O2veaAT9grtal_GxTgWJu6jOGOv0OvIRNwHQ-sCdQD/s1600/project-enchilada-defect-reason-summary.PNG&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;Summary of distribution of defects injected by reason&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEbDfBt3s_bJeNSNSlL4WC8pCNDh_LlTmwIoiIaufYZY77dGq2BUSVZw9YGkSTN-Yj6k5Cs7tcToBf9Qy17OCCbAOrSdPk67f7f2O2veaAT9grtal_GxTgWJu6jOGOv0OvIRNwHQ-sCdQD/s1600/project-enchilada-defect-reason-summary.PNG&quot; title=&quot;Summary of distribution of defects injected by reason&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Figure 2.&lt;/b&gt; &amp;nbsp;Defect injection reason count and percentage, identical to Figure 1.&lt;br /&gt;
Shows that communication and requirements issues account for 55% of all non-test&lt;br /&gt;
related&amp;nbsp;defects.&amp;nbsp;Further, 18 % of defects were injected directly by the team and might&lt;br /&gt;
be avoided&amp;nbsp;through better training, testing, or peer reviews.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
While understanding why we injected defects is interesting, understanding where the defects are injected is important to creating a plan for doing something about it. &amp;nbsp;Figure 3 shows the defect count and percentage for each of the main areas of the software product we were developing. &amp;nbsp;The top three trouble spots, our &quot;bug farms&quot; were the display configuration (user interface), test cases, and data conversion and extraction code. &amp;nbsp;That poor test cases were one of our greatest sources of defects is extremely disturbing.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhP7_1KbgiPp6pPGmf5FOvBOWktAPNDDRA4OdxgqaVfDZqUOHMhDWFV-CElgfDnpLoHTdpxdXunehzj8K-pDgtKxkmF8GSm8bM-nhmw_6JQ0y3WYKevc7lwWoLv68XWGRX8eDN7E8twsVsw/s1600/project-enchilada-defects-by-module.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;Distribution of defects by software code module&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhP7_1KbgiPp6pPGmf5FOvBOWktAPNDDRA4OdxgqaVfDZqUOHMhDWFV-CElgfDnpLoHTdpxdXunehzj8K-pDgtKxkmF8GSm8bM-nhmw_6JQ0y3WYKevc7lwWoLv68XWGRX8eDN7E8twsVsw/s1600/project-enchilada-defects-by-module.PNG&quot; title=&quot;Distribution of defects by software code module&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Figure 3.&lt;/b&gt; &amp;nbsp;Count and percentage of defects injected into different software modules.&lt;br /&gt;
This graph includes defects related to tests.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
Putting it all together (figure 4) really shows our trouble spots and gives a pretty fair view of where the team needs to improve. &amp;nbsp;Also important, the data shows low value areas and establishes a baseline for other modules and reasons that we don&#39;t need to focus on currently but also don&#39;t want to see suddenly increase over time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCIQCzHdnIo06ZidMqkfe8tkOHhaD98sgECHjXsfPRwsejlIOZ_8-hFFvs-ZRVorhI5_OGF2y-Ybzakfwg5MyVHdzDmXTl5jHk9xRgSbQ4Hwf-yLRryKjOVZYKYae8NqJINT56yHyXmjCx/s1600/project-enchilada-defect-quantity-by-module-by-reason.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;Defects by module by reason for injection&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCIQCzHdnIo06ZidMqkfe8tkOHhaD98sgECHjXsfPRwsejlIOZ_8-hFFvs-ZRVorhI5_OGF2y-Ybzakfwg5MyVHdzDmXTl5jHk9xRgSbQ4Hwf-yLRryKjOVZYKYae8NqJINT56yHyXmjCx/s1600/project-enchilada-defect-quantity-by-module-by-reason.PNG&quot; title=&quot;Defects by module by reason for injection&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Figure 4.&lt;/b&gt; &amp;nbsp;Count of defects by module by reason injected.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;div&gt;
When I look at this data, I see that communication in general is a pretty big problem. &amp;nbsp;There were acute problems when trying to communicate requirements in the UI, especially late feature requests and changes. &amp;nbsp;Finally, my team just couldn&#39;t get it together for testing and made mistakes all over the place.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
In the remainder of this post I am going to focus on how we dealt with changing requirements and how we might improve. &amp;nbsp;Testing is hopefully a topic for another day...&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;h3&gt;
Change, Essence, and Accident in Agile Software Development&lt;/h3&gt;
As you can see, we had a lot of defects escape implementation to customer review. &amp;nbsp;Digging a little deeper, close to 50% of our defects reported coming out of customer review had to do with UI issues. Digging deeper still, the majority of these UI issues weren’t bugs but rather changes to the originally specified requirements. &amp;nbsp;In other words, we built something that we thought was correct, but after the fully implemented feature was reviewed the customer decided to change how the feature works.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;
This is rework. &amp;nbsp;Changes like this are waste.&lt;br /&gt;
&lt;br /&gt;
&quot;But wait!&quot; you say, &quot;You are an agile team! &amp;nbsp;You should be embracing change! &amp;nbsp;Change isn’t waste, change is the name of the game!&quot;&lt;br /&gt;
&lt;br /&gt;
Of course we embrace change. &amp;nbsp;Every UI issue reported by our customer was a learning opportunity and a chance for us to make better software for them. &amp;nbsp;But that does not change the fact that change has a cost.&lt;br /&gt;
&lt;br /&gt;
With any software development there is going to be change. &amp;nbsp;Agile methods anticipate and even embrace this uncertainty. &amp;nbsp;That’s the whole point. &amp;nbsp;The question we should be asking is this. How much change is expected? &amp;nbsp;And what is a reasonable cost of change in a project? &amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
In other words, how much rework is essential to an Agile project and how much is avoidable, accidental rework?&lt;br /&gt;
&lt;br /&gt;
Regardless of whether you are embracing change or not, reducing rework is still a good thing. Getting it right the first time, before you have implemented a feature and delivered it to the customer for review is the most cost effective way to build a system.&lt;br /&gt;
&lt;br /&gt;
But at the same time an essential factor for success is to create feedback loops for learning more about your users and what they need. &amp;nbsp;Change is waste. &amp;nbsp;Change is also necessary.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
Applying Knowledge from Defect Classification&lt;/h3&gt;
In our case, after looking at the data and reflection on what we saw the team felt strongly that there is room for improving our requirements process. &amp;nbsp;We had a hunch that requirements were a problem but we had no idea that it was as bad as it was. &amp;nbsp;The next problem we need to solve was what to do about it.&lt;br /&gt;
&lt;br /&gt;
Looking back at past projects, it seemed like requirements churn was a problem but it was never as obvious as it is now. &amp;nbsp;We&#39;ve tried several different approaches over the past year and a half with mixed results.&lt;br /&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&quot;Shall statements&quot; didn&#39;t work because they aren&#39;t descriptive enough. &amp;nbsp;The traditional method for specifying these requirements are in an Excel spreadsheet. &amp;nbsp;This encourages brevity and makes for bad requirements.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;User stories are slightly better but the majority of our customers are not familiar enough with the format. &amp;nbsp;The end result is a confused customer and poorly specified and validated system.&lt;/li&gt;
&lt;li&gt;Letting the customer drive the requirements has also been mixed. &amp;nbsp;The customer is usually very happy with the format (they choose it) and eager to review. &amp;nbsp;Unfortunately, the requirements are usually lacking important information or the customer&#39;s chosen format is otherwise awkward for the implementation team. &amp;nbsp;In other words, it&#39;s good for them but not good for us or the project on the whole.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Use cases were extremely successful with the development team, but we experienced similar issues as user stories when presenting the use cases to the customer. &amp;nbsp;The format and information was just abstract or foreign enough to make the representation a challenge.&lt;/li&gt;
&lt;/ul&gt;
For a very long time I had assumed that the problem was with the requirements representation itself. I assumed that there must be some &quot;holy grail&quot; format for specifying functional requirements. &amp;nbsp;After examining this data and reflecting on our past experiences, I&#39;m not so sure any more. &amp;nbsp;User stories have been extremely successful within other parts of our engineering organization. &amp;nbsp;And I have firsthand success stories applying use cases.&lt;br /&gt;
&lt;br /&gt;
Knowing that the majority of our requirements issues stem from change is the enlightening nugget of knowledge here. Changes are a positive thing. But can we flush out these changes before we fully implement the feature?&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Based on our data, here are some things we are thinking about trying on our next project.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Apply use cases and take more time upfront to educate the customer on how to read and evaluate them.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Try to match the right requirements specification type with the customer&#39;s behavioral and technical inclinations.&lt;/li&gt;
&lt;li&gt;Try out a different requirement specification representation. We&#39;re working on a new idea, &quot;FAQ Requirements.&quot; Maybe an easier to read and review representation will resolve some of these problems?&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Wait to conduct a UI workshop until after at least part of the system has been implemented. Our hope is that by this point the customer will have seen some aspects of the system and we will have had an opportunity to teach them core concepts in the application space.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Spend more time prototyping using cheap prototyping methods. In some cases, paper prototyping might have resolved some of our uncertainty much more quickly than a fully or even partially implemented feature.&lt;/li&gt;
&lt;/ul&gt;
The goal in making a process change is not to remove the feedback loops or eliminate change by trying to get it right the first time. Instead the goal is to help us fail faster, cheaper, earlier, and more often. We want to make the mistakes early, before they are realized in code, when change is cheap. It&#39;s a lot easier to change a few lines on a whiteboard than it is to rewrite an entire code model.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Failure is a mechanism for learning. This education needs to be as cheap as possible. Our focus over the next few months is going to be figuring out how to make our requirements representation so good that it fails fast as a requirement. &amp;nbsp;Hopefully this way we can avoid waste from rework.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.neverletdown.net/feeds/7933887104971861526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.neverletdown.net/2014/10/defect-driven-process-improvement.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/7933887104971861526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/7933887104971861526'/><link rel='alternate' type='text/html' href='http://www.neverletdown.net/2014/10/defect-driven-process-improvement.html' title='Defect-Driven Process Improvement'/><author><name>Michael</name><uri>http://www.blogger.com/profile/02649257003202319541</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisfRBxkeP80l7HCMecJr-pTlE9K90x8qk0-nFBuXln8tUjEHoRGs_zNP7yDOe8LBllxaG9hyeFzcFh8wjBVNcEp7eEuSem8JXv_JDMxAgQMAWtV2G2rURS5OjhSE16uq4Lp1gFzBM0jmR0/s72-c/project-enchilada-defect-inject-reason.PNG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4097792925045582567.post-3235551869308712440</id><published>2014-10-22T08:30:00.000-04:00</published><updated>2017-08-21T23:00:19.631-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Problem Definition"/><category scheme="http://www.blogger.com/atom/ns#" term="Software Architecture"/><title type='text'>Dealing with Constraints in Software Architecture Design</title><content type='html'>&lt;div style=&quot;border: 1px gray dashed; padding: 3px;&quot;&gt;
&lt;h2 style=&quot;border-collapse: collapse; border-spacing: 0px; border: 0px; color: #404040; font-family: &#39;Segoe UI&#39;, Arial, Helvetica, sans-serif; font-size: 18px; font-weight: normal; line-height: 1.2em; list-style: none; margin: 0px; padding: 0px 0px 3px;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Segoe UI Semibold&#39;, Arial, Helvetica, sans-serif;&quot;&gt;Definition&lt;/span&gt;&amp;nbsp;of&amp;nbsp;&lt;span style=&quot;font-family: &#39;Segoe UI Semibold&#39;, Arial, Helvetica, sans-serif;&quot;&gt;constraint&lt;/span&gt;&amp;nbsp;(n)&lt;/h2&gt;
&lt;h2 style=&quot;border-collapse: collapse; border-spacing: 0px; border: 0px; color: #404040; font-family: &#39;Segoe UI&#39;, Arial, Helvetica, sans-serif; font-size: 18px; font-weight: normal; line-height: 1.2em; list-style: none; margin: 0px; padding: 0px 0px 3px;&quot;&gt;
&lt;div class=&quot;b_attribution&quot; style=&quot;color: #737373; font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 15.600000381469727px; padding-bottom: 2px;&quot;&gt;
&lt;cite style=&quot;color: #009030; font-style: normal; word-wrap: break-word;&quot;&gt;&lt;a href=&quot;https://www.bing.com/search?q=define%3Aconstraint&quot; target=&quot;_blank&quot;&gt;Bing Dictionary&lt;/a&gt;&lt;/cite&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;ul class=&quot;b_hList&quot; style=&quot;border-collapse: collapse; border-spacing: 0px; border: 0px; color: black; font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 15.600000381469727px; list-style: none; margin: 0px; padding: 0px;&quot;&gt;
&lt;li style=&quot;border-collapse: collapse; border-spacing: 0px; border: 0px; display: inline-block; list-style: none; margin: 0px; overflow: hidden; padding: 0px 10px 10px 0px; vertical-align: top;&quot;&gt;&lt;span style=&quot;font-weight: 700;&quot;&gt;con·straint&lt;/span&gt;&lt;/li&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;li style=&quot;border-collapse: collapse; border-spacing: 0px; border: 0px; display: inline-block; list-style: none; margin: 0px; overflow: hidden; padding: 0px 10px 10px 0px; vertical-align: top;&quot;&gt;&lt;span class=&quot;cprn&quot; style=&quot;font-family: arial, &#39;Verdana Ref&#39;, Verdana, helvetica, sans-serif;&quot;&gt;[ kən stráynt ]&lt;/span&gt;&lt;/li&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;li style=&quot;border-collapse: collapse; border-spacing: 0px; border: 0px; display: inline-block; list-style: none; margin: 0px; overflow: hidden; padding: 0px 0px 10px; vertical-align: top;&quot;&gt;&lt;a h=&quot;ID=SERP,5291.1&quot; href=&quot;https://www.bing.com/th?id=AjWvvd609%252b4zBVg100x100&amp;amp;pid=Dictionary&quot; style=&quot;color: #600090; text-decoration: none;&quot;&gt;&lt;div class=&quot;sw_play b_float&quot; style=&quot;background-image: url(https://www.bing.com/sa/simg/sw_mg_l_4d_lg.png); background-position: -315px -22px; background-repeat: no-repeat; float: left; height: 16px; width: 16px;&quot;&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol class=&quot;b_dList&quot; style=&quot;border-collapse: collapse; border-spacing: 0px; border: 0px; color: black; font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 15.600000381469727px; list-style: none; margin: 0px; padding: 0px;&quot;&gt;
&lt;li style=&quot;border-collapse: collapse; border-spacing: 0px; border: 0px; list-style: decimal; margin: 0px 0px 0px 20px; padding: 0px 0px 10px;&quot;&gt;limiting factor: something that limits freedom of action&lt;/li&gt;
&lt;li style=&quot;border-collapse: collapse; border-spacing: 0px; border: 0px; list-style: decimal; margin: 0px 0px 0px 20px; padding: 0px 0px 10px;&quot;&gt;state of restriction: a state in which freedom of action is severely restricted&lt;/li&gt;
&lt;li style=&quot;border-collapse: collapse; border-spacing: 0px; border: 0px; list-style: decimal; margin: 0px 0px 0px 20px; padding: 0px 0px 10px;&quot;&gt;lack of spontaneity: a lack of warmth and spontaneity in somebody&#39;s manner or in the atmosphere on a particular occasion&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;br /&gt;
In software architecture design, constraints come in two basic flavors - technical and business. &amp;nbsp;On most projects there are only a handful of constraints, but these constraints are a &lt;a href=&quot;https://www.neverletdown.net/2014/10/architectural-drivers.html&quot; target=&quot;_blank&quot;&gt;highly influential architectural driver&lt;/a&gt;. &amp;nbsp;Constraints, as the dictionary definition above indicates, are a limiting factor and severely restrict options for making design decisions. &amp;nbsp;They are also fixed design decisions that cannot be changed and must be satisfied. &amp;nbsp;You could think of constraints as the ultimate non-negotiable, &quot;must have&quot; requirement. &amp;nbsp;It is for this reason that architecture design constraints must be created and accepted with care.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.andrew.cmu.edu/user/al45/index.htm&quot; target=&quot;_blank&quot;&gt;Anthony Lattanze&lt;/a&gt;&amp;nbsp;of Carnegie Mellon University, author of the&amp;nbsp;&lt;a href=&quot;http://www.amazon.com/Architecting-Software-Intensive-Systems-Practitioners/dp/1420045695/ref=sr_1_2?ie=UTF8&amp;amp;qid=1405119882&amp;amp;sr=8-2&amp;amp;keywords=anthony+lattanze&quot; target=&quot;_blank&quot;&gt;Architecture Centric Design Methodology&lt;/a&gt;&amp;nbsp;and one of the&amp;nbsp;&lt;a href=&quot;http://www.sei.cmu.edu/architecture/tools/evaluate/atam.cfm&quot; target=&quot;_blank&quot;&gt;ATAM&lt;/a&gt;&amp;nbsp;creators, likens design constraints in software architecture to &quot;load bearing walls&quot; employed in traditional building architecture. Load bearing walls of a building are extremely strategic and strongly influence the shape and form of the building. &amp;nbsp;What&#39;s more, once these essential walls are placed and bearing weight it becomes cost prohibitive to move them.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; color: black; font-family: &#39;Times New Roman&#39;; font-size: medium; line-height: normal; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidhwioN-wtNY505YU4I76KT9k4EiznYwj2YwOKzxSvgNxgLFZzNGJVw02A8GVN52DTHGP2hGOrczkk5XRk40bqiKz3IZcpTScrON6Hbwn1kF1UCDKK5gTwerGy8IOjFG6zuMiQQ3tLu-Cc/s1600/load-bearing-walls.gif&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;Picture of load bearing walls in a house, not all walls are load bearing.&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidhwioN-wtNY505YU4I76KT9k4EiznYwj2YwOKzxSvgNxgLFZzNGJVw02A8GVN52DTHGP2hGOrczkk5XRk40bqiKz3IZcpTScrON6Hbwn1kF1UCDKK5gTwerGy8IOjFG6zuMiQQ3tLu-Cc/s1600/load-bearing-walls.gif&quot; height=&quot;291&quot; title=&quot;Picture of load bearing walls in a house, not all walls are load bearing.&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Technical and business constraints are similarly load bearing. &amp;nbsp;Many design decisions will hang on fixed constraints, further cementing them into your system&#39;s design. &amp;nbsp;Adding a component or even refactoring architectural styles might be costly but it can still be done. &amp;nbsp;Deciding to jump from .Net to the JVM requires demolition and rebuilding.&lt;br /&gt;
&lt;br /&gt;
As architecture design constraints are so important it&#39;s worth taking some time to understand them in greater detail so you can properly deal with them when they arise.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
Technical Constraints in Software Architecture&lt;/h2&gt;
Technical constraints are fixed technical design decisions that absolutely cannot be changed. &amp;nbsp;Most often technical constraints are provided by stakeholders (perhaps after some digging) at the outset of the project. Sometimes a team may choose to create a constraint, perhaps to simplify the world in which they are working. &amp;nbsp;Regardless of the origin, these architecture drivers are technical in nature and are considered unchangeable and indeed very soon become so.&lt;br /&gt;
&lt;br /&gt;
There are many common examples of technical constraints that you&#39;ve likely seen.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;Programming language&lt;/i&gt;&amp;nbsp;- often times a specific programming language will be required for various reasons. &amp;nbsp;For example, the customer may be a Java or Ruby or Microsoft shop. &amp;nbsp;You might simply prefer a certain language over another, or have specific expertise that dictates using a particular programming language. &amp;nbsp;Nearly always, once you&#39;ve picked a language you are stuck with that choice for the remainder of the project,&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Operating system or platforms supported&lt;/i&gt;&amp;nbsp;- It must work on Windows, or Linux, or iOS, or Qt on Solaris, or IE 6 on Windows XP, or ... building software that does not satisfy the platform constraint means you have failed to design a software system that satisfies stakeholders&#39; key concerns.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Use of a specific library or framework&amp;nbsp;&lt;/i&gt;- Sometimes a specific library might be required to be used. &amp;nbsp;The specific origin might come from the business but the influence is very technical. &amp;nbsp;A common example at many companies is the use of specific open source libraries. &amp;nbsp;Some companies might require that open source always be used. &amp;nbsp;Other companies, might have an approved list indicating which open source software may be used. &amp;nbsp;An interesting example at IBM is that we are required to target the &quot;Blue&quot; JVM,&lt;a href=&quot;http://www.ibm.com/developerworks/java/jdk/&quot; target=&quot;_blank&quot;&gt;&amp;nbsp;IBM&#39;s JDK&lt;/a&gt;&amp;nbsp;for all JVM-based projects.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;h2&gt;
Business Constraints&lt;/h2&gt;
Business constraints are unchangeable business decisions that in some way restrict the software architecture design. &amp;nbsp;Business constraints are similar to technical constraints in that they are decisions that cannot be changed, but rather than influencing structures directly through technology, the influence occurs indirectly through business decisions. &amp;nbsp;It might be easiest to discuss some examples.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;Schedule&lt;/i&gt;&amp;nbsp;- &quot;We have to be ready to demo at the trade-show in November.&quot; &amp;nbsp;The final delivery date is fixed based on input from the business and cannot be changed. &amp;nbsp;It is now up to you to design a system that can be built within the required schedule.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Budget&lt;/i&gt;&amp;nbsp;- I&#39;ve found that this is less true for product development, but nearly every development contractor must learn to deal with budget constraints. &amp;nbsp;In some cases you might be able to increase the budget, but often budgets, whether fixed through contract or expectations, become constraints on the project and team building the software.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Team composition and make-up&lt;/i&gt;&amp;nbsp;- In some cases there may be requirements that specific personnel be used or not used during &amp;nbsp;project. &amp;nbsp;For example, someone may be unavailable, already committed to another project or you may be required to include specific individuals, perhaps for training purposes.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Software licensing restrictions or requirements&lt;/i&gt;&amp;nbsp;- Often times you will be required to use specific software components because they are already owned. &amp;nbsp;I&#39;ve also seen situations where components have been used in very... interesting... ways to satisfy specific licensing restrictions. &amp;nbsp;Legal considerations are extremely constraining.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;h2&gt;
Identifying Constraints&lt;/h2&gt;
Constraints originate from a variety of sources. &amp;nbsp;In my experience, more often than not at least one stakeholder has a specific concern that will result in a constraint. &amp;nbsp;For example, the business line or some other stakeholder might decide that IE6 running on Windows XP must be supported (and&amp;nbsp;&lt;a href=&quot;http://www.flickr.com/photos/robotjohnny/3629069606/&quot; target=&quot;_blank&quot;&gt;in spite of our resistance&lt;/a&gt;&amp;nbsp;it remains a requirement). &amp;nbsp;If you&#39;ve ever created a web application for a federal agency of the US Government then you&#39;d know that this was a constraint on all web projects until very recently. &amp;nbsp;United States law requires support of a specific operating system and browser. Period. &amp;nbsp;That changes when Congress passes a new law.&lt;br /&gt;
&lt;br /&gt;
Constraints can also be created before a project even starts, during procurement. In my previous role at IBM as an application engineer / consultant with expertise in the &lt;a href=&quot;http://www.ibm.com/smarterplanet/us/en/ibmwatson/explorer.html&quot; target=&quot;_blank&quot;&gt;Watson Explorer&lt;/a&gt; platform (a/k/a Vivisimo Velocity or Data Explorer), every project on which I worked was constrained to use the Watson Explorer platform. As a consultant I was only brought in once the decision had been made to purchase and deploy Watson Explorer. &amp;nbsp;This constraint is fixed during the pre-sales and sales phase of the system.&lt;br /&gt;
&lt;br /&gt;
It&#39;s common that quality attributes and functional requirements will be offered up as constraints. It is a huge mistake to treat a quality attribute as a constraint, even one that is extremely high priority. &lt;b&gt;Quality attributes are NEVER constraints.&lt;/b&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7OkXULHTfOoGle0dMssaiKjFFd65ikPHahl9T3VyTNtK7i6mTAtW_gwTh3_021W3xq86CyIjLQB3oA8EhTfLmEGl3n0sOEB5xPhKPOjespWjkhYi2-MKFUg7t29tWsz3cRNimj_o7RVPn/s1600/pro-tip-2-constraints.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;Pro Tip: Separate the constraints you are given from the constraints you give yourself.&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7OkXULHTfOoGle0dMssaiKjFFd65ikPHahl9T3VyTNtK7i6mTAtW_gwTh3_021W3xq86CyIjLQB3oA8EhTfLmEGl3n0sOEB5xPhKPOjespWjkhYi2-MKFUg7t29tWsz3cRNimj_o7RVPn/s1600/pro-tip-2-constraints.png&quot; title=&quot;Pro Tip: Separate the constraints you are given from the constraints you give yourself.&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
When starting a project I advise teams and teammates to be very conservative when fixing constraints. Challenge constraints. &amp;nbsp;Do not accept them lightly. &amp;nbsp;Is this requirement an absolute must-have or is it just extremely important? &amp;nbsp;Is the decision a strong suggestion or a threshold of success for the system?&lt;br /&gt;
&lt;br /&gt;
Over time, design decisions you&#39;ve made can become constraining but it&#39;s important to distinguish between the constraints you are given and the constraints you&#39;ve created for yourself. &amp;nbsp;Ultimately, the constraints you give yourself can change if you need them to while constraints you are given are non-negotiable. &amp;nbsp;This is why constraints should be considered a distinct architectural driver and tracked explicitly from quality attributes, functional requirements, and specific design decisions.</content><link rel='replies' type='application/atom+xml' href='http://www.neverletdown.net/feeds/3235551869308712440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.neverletdown.net/2014/10/dealing-with-constraints-in-software-architecture.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/3235551869308712440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/3235551869308712440'/><link rel='alternate' type='text/html' href='http://www.neverletdown.net/2014/10/dealing-with-constraints-in-software-architecture.html' title='Dealing with Constraints in Software Architecture Design'/><author><name>Michael</name><uri>http://www.blogger.com/profile/02649257003202319541</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidhwioN-wtNY505YU4I76KT9k4EiznYwj2YwOKzxSvgNxgLFZzNGJVw02A8GVN52DTHGP2hGOrczkk5XRk40bqiKz3IZcpTScrON6Hbwn1kF1UCDKK5gTwerGy8IOjFG6zuMiQQ3tLu-Cc/s72-c/load-bearing-walls.gif" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4097792925045582567.post-6725022530809061501</id><published>2014-10-15T08:30:00.000-04:00</published><updated>2015-05-20T11:04:22.852-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Problem Definition"/><category scheme="http://www.blogger.com/atom/ns#" term="Software Architecture"/><title type='text'>Architectural Drivers: Building Blocks for Decision Making</title><content type='html'>Architectural drivers are formally defined as the set of requirements that have significant influence over your architecture. &amp;nbsp;In other words, there are some requirements that will help you decide which structures to pick for your system design and others that are less consequential in the context of software architecture. &amp;nbsp;This implies that it is extremely important to get the architectural drivers right early in a project, as architecture structures will become more difficult to change as the developed software becomes more realized.&lt;br /&gt;
&lt;br /&gt;
Thinking about early requirements as &quot;drivers&quot; can also help you to create traceability from stakeholder concerns to specific architectural decisions made. &amp;nbsp;Having this traceability is great because it helps to promote important qualities in your team, such as agility. &amp;nbsp;With traceability you can make changes on purpose and with confidence as you understand the genesis for structural decisions.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
What are Architectural Drivers?&lt;/h2&gt;
Architectural drivers have significant influence over the design of a system and are the determining factor over whether one design is “better” or “worse” than another that produces the same features. Architectural drivers are nearly always divided into four categories. &amp;nbsp;Some people might go with only three categories (talking generally about constraints), and &lt;a href=&quot;http://www.neverletdown.net/2012/06/scarce-resources-the-hidden-architectural-driver.html&quot; target=&quot;_blank&quot;&gt;others might include other things as drivers&lt;/a&gt;, but if this is your first time working with architectural drivers you should start with these four categories before tailoring.&lt;br /&gt;
&lt;br /&gt;
Architectural drivers can be one of the following.&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Technical Constraints&lt;/li&gt;
&lt;li&gt;Business Constraints&lt;/li&gt;
&lt;li&gt;Quality Attributes&lt;/li&gt;
&lt;li&gt;High-Level Functional Requirements&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
Let&#39;s go into more detail for each of these categories.&lt;br /&gt;
&lt;div class=&quot;ibmbodycopy&quot;&gt;
&lt;br /&gt;
&lt;b&gt;Technical
constraints&lt;/b&gt; are technical design decisions which absolutely must be satisfied in the
architecture. These are generally fixed
from the beginning of a project and may be expensive to change as the project
progresses. Constraints, as the the name suggests, cannot be changed.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;ibmbodycopy&quot;&gt;
&lt;br /&gt;
&lt;b&gt;Business
constraints&lt;/b&gt; are decisions imposed by business considerations that must
be satisfied in the architecture.&amp;nbsp; Like
technical constraints, business constraints are generally fixed from the
beginning and have a significant influence on decision making for the design. &amp;nbsp;Likewise once in place these are considered unchangeable. &amp;nbsp;An example might be a specific delivery date, budget, or&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;ibmbodycopy&quot;&gt;
&lt;b&gt;Quality
attributes&lt;/b&gt;, sometimes called quality requirements, are specific criteria by which a system’s operations can be judged –
that is, how well a system performs specific functions. Quality attributes
greatly influence the design of the system.&amp;nbsp;
In many cases, the same functionality can be achieved in a number of
ways and so it is the quality attributes that ultimately determines when one design is better or worse
than another. &amp;nbsp;Quality attributes receive a significant and thorough treatment in &lt;a href=&quot;http://www.amazon.com/gp/product/0321815734/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0321815734&amp;amp;linkCode=as2&amp;amp;tag=nevletdowdotn-20&amp;amp;linkId=LE2BUCG6FSO2G2FG&quot; target=&quot;_blank&quot;&gt;Software Architecture in Practice&lt;/a&gt; and you can read &lt;a href=&quot;http://ptgmedia.pearsoncmg.com/images/9780321815736/samplepages/0321815734.pdf&quot; target=&quot;_blank&quot;&gt;a sample chapter introducing quality attributes online&lt;/a&gt;. &amp;nbsp;Quality attributes are recorded as scenarios that describes a qualitative response within the context of specific system functionality. &amp;nbsp;For example, performance is a common quality attribute, but performance when the system is doing what?&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;ibmbodycopy&quot;&gt;
&lt;b&gt;High-level
functional requirements&lt;/b&gt; provide an overview for what the system will do, the functions and features of the system. These might take shape in any number of formats from epics to stories to use cases to ye olde &quot;shall&quot; statements. &amp;nbsp;While quality attributes might determine specific structures you choose, the ultimate goal of the software you are building is to build achieve some bit of functionality. &amp;nbsp;From an architecture perspective, you won&#39;t go to exhaustive detail, and indeed it&#39;s best not to go into too much detail as diving deep too early can seriously delay the project.&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
What about Non-Functional Requirements?&lt;/h2&gt;
If you&#39;ve read any of the software engineering literature, you&#39;ll see the term &quot;non-functional&quot; requirements used fairly often. &amp;nbsp;The basic thinking was that there are these things that are functional requirements, and then there&#39;s things that are not functional requirements, non-functional requirements. &amp;nbsp;Setting aside the fact that calling requirements &quot;non-functional&quot; is kind of silly and certainly not precise, this term comes up enough that it&#39;s important to understand it in the context of architectural drivers.&lt;br /&gt;
&lt;br /&gt;
Most of the time people are referring to constraints and quality attributes when they talk about non-functional requirements. &amp;nbsp;Unfortunately, most of the time teams will lump all &quot;non-functionals&quot; into a single list. This is unfortunate because knowing specifically what kinds of drivers you are dealing with gives you a lot of decision making power.&lt;br /&gt;
&lt;br /&gt;
Functional requirements are negotiable and must be shown to be correct.&lt;br /&gt;
&lt;br /&gt;
Constraints cannot be changed once fixed.&lt;br /&gt;
&lt;br /&gt;
Quality attributes imply trade-offs and often can&#39;t be directly tested until very late in the system&#39;s lifecycle. As a result you will need to find proxies, run experiments, and reason about the structures you&#39;ve selected to determine whether or not you&#39;ve promoted the right quality attributes.&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.neverletdown.net/feeds/6725022530809061501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.neverletdown.net/2014/10/architectural-drivers.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/6725022530809061501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/6725022530809061501'/><link rel='alternate' type='text/html' href='http://www.neverletdown.net/2014/10/architectural-drivers.html' title='Architectural Drivers: Building Blocks for Decision Making'/><author><name>Michael</name><uri>http://www.blogger.com/profile/02649257003202319541</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4097792925045582567.post-389789418814185238</id><published>2014-05-20T08:30:00.000-04:00</published><updated>2014-05-20T08:30:00.864-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Software Architecture"/><category scheme="http://www.blogger.com/atom/ns#" term="Talks"/><title type='text'>Five Challenges for a Maturing Discipline</title><content type='html'>[&lt;i&gt;At the opening for&amp;nbsp;&lt;a href=&quot;http://www.sei.cmu.edu/saturn/2014/program/&quot; target=&quot;_blank&quot;&gt;SATURN 2014&lt;/a&gt;&amp;nbsp;I presented five challenges for the software architecture community as a means of kick starting our brains for the conference, but also a serious reflection on the state of software architecture practice. &amp;nbsp;My hope is that these challenges are something we can work on together as a community and are my attempt at capturing something actionable that we can do to accelerate software architecture&#39;s maturation. &amp;nbsp;On the surface these five challenges are pretty simple.  Of course if it truly were simple then it wouldn&#39;t be much of a challenge.  Think about them.  Give some of them a try.  Let me know what you think.&lt;/i&gt;]&lt;br /&gt;
&lt;br /&gt;
A little less than 20 years ago, Mary Shaw and David Garlan published a book reflecting on trends they noticed were emerging in software development. &amp;nbsp;The book&#39;s subtitle was extremely fitting: &lt;a href=&quot;http://www.amazon.com/gp/product/0131829572/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0131829572&amp;amp;linkCode=as2&amp;amp;tag=nevletdowdotn-20&amp;amp;linkId=KMTHLZ4FEUP5PZU5&quot; target=&quot;_blank&quot;&gt;Perspectives on an Emerging Discipline&lt;/a&gt;. My reaction to the book, having read it for the first time for a software architecture class in 2008, was that it was grand in scope yet unassuming. &amp;nbsp;Having had the opportunity to meet and work with both David and Mary while a student at Carnegie Mellon, I found that the tone of this landmark book is more a reflection of who they are than anything else. &amp;nbsp;Essentially they proposed to the software engineering community, &quot;Here are some interesting ideas and trends we&#39;ve noticed and we think they are worth taking seriously, but these ideas need some further thought.&quot;&lt;br /&gt;
&lt;br /&gt;
While &lt;i&gt;Perspectives &lt;/i&gt;was certainly intended to be a unifying, landmark work, Mary and David had the wisdom to recognize that this was only the beginning, that this emerging discipline of software architecture must continue to mature, and that others must be responsible for the growth of the practice.&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
Fast forward to today, and the success of conferences such as SATURN show that software architecture as a discipline is maturing, that we are continuing to improve the state of practice with every new software system shipped. &amp;nbsp;But while we are learning more and getting better and better as a community every year, it is also becoming apparent that we still have a long way to go.&lt;br /&gt;
&lt;br /&gt;
Software architects are expected to be a very different kind of leader than what is commonly required of folks in a leadership role. &amp;nbsp;Software architects need to maintain a focus on business, technology, and people simultaneously. &amp;nbsp;Software architects are expected to be experts at the largest granularities of abstraction while at the same time fully comprehending the implications of the tiniest technical details. &lt;br /&gt;
&lt;br /&gt;
This is a problem for us because mastering both of these worlds – &lt;a href=&quot;http://rhinoresearch.com/content/architecture-hoisting-video-atlanta-talk&quot; target=&quot;_blank&quot;&gt;coding in the large and coding in the small&lt;/a&gt; – is extremely difficult. &amp;nbsp;In the past decade or so we&#39;ve become really good at coding in the small as evident in the thousands of flowers blooming on Github and other code depots. &amp;nbsp;As an industry though we also seem to lack a general self-awareness and discipline when it comes to understanding why we make the decisions we make. To me this seems like a problem in how we educate software architects.&lt;br /&gt;
&lt;br /&gt;
While it&#39;s great that we can force success through brute force and raw smarts, if we as an industry ever hope to reach a point where someone can master software design basics before becoming a grey haired master, we need to continue working to mature our discipline. &amp;nbsp;Currently it takes 10 - 15 years of experience for someone to really master software design. &amp;nbsp;The prevailing wisdom is that a person is not even ready to learn software architecture - coding in the large - until they&#39;ve practiced software development for at least 2 – 5 years - coding in the small. &amp;nbsp;At the same time, elementary school students are practicing geometry, calculus, and trigonometry -- mathematics that took some of the greatest minds in the history of the world years to figure out. &amp;nbsp;Certainly we can do better with software architecture&amp;nbsp;than we are currently doing.&amp;nbsp; I&#39;m not suggesting that education is a substitute for experience. I am suggesting that we can improve our software architecture education and make software architecture more accessible and easier to learn.&lt;br /&gt;
&lt;br /&gt;
As an emerging discipline, that we have problems like this is actually a good thing.&amp;nbsp; Software architecture is growing up. &amp;nbsp;The discipline has emerged and as a discipline software architecture still has a lot of growing and maturing to do. &amp;nbsp;My hope is that these challenges will not only get you thinking about where we are going with software architecture, but also that you will accept some of these challenges and at the same time help continue to improve the maturity of the software architecture discipline.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Five Challenges for the Maturing Discipline of Software Architecture&lt;/h3&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Increase diversity – technology, age, gender, cultures, everything.&lt;/b&gt; &amp;nbsp;Having diverse perspectives on a team is a force multiplier for success. &amp;nbsp;Every team should strive to have rich diversity. &amp;nbsp;Men and women. Young people and older people. &amp;nbsp;Different cultures and backgrounds. &amp;nbsp;Different universities. &amp;nbsp;And perhaps most importantly, different technical and work experiences.&lt;br /&gt;
&lt;br /&gt;
Ecologists often refer to biodiversity as one of the most important traits for determining the success or failure of a species. &amp;nbsp;Drawing an allusion to evolution is not an accident here. &amp;nbsp;As your system evolves, the more diversity that is available in the ecosystem the better fitness that system is likely to have. &amp;nbsp;Learn a new programming language. &amp;nbsp;Learn a new framework. &amp;nbsp;Every once in a while, get out of your comfort zone and seek out people and communities with opinions or practices different from your own. &amp;nbsp;You will learn something new and the results will be surprising and good.&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Write more code.&lt;/b&gt; &amp;nbsp;There is this nasty rumor that software architects don&#39;t write code. &amp;nbsp;Plain and simple, anyone who calls themselves an architect without dirty hands is not an architect. &amp;nbsp;I know many agree with this, but to overcome this negative perception we need to write even more code.&lt;br /&gt;
&lt;br /&gt;
I am not suggesting that we should write more software, but rather software architects need to remember their roots. &amp;nbsp;Writing more code does not mean you should be writing production code – in fact it&#39;s probably best that some (most?) team leads and architects stay off the critical path for a project. &amp;nbsp;Non-production code is still extremely important. &amp;nbsp;Direct observation through experiments is one of the most powerful tools we have in software architecture. &amp;nbsp;Learn by doing.&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Put humans first.&lt;/b&gt; &amp;nbsp;As software architects we are very much focused on software systems. &amp;nbsp;So much so that it seems we sometimes forget that the whole point of the software and the documentation and the models that we build is so we can provide value to people. &amp;nbsp;Human centered design is an extremely important trend in software development right now and the software architecture community is completely missing out.&lt;br /&gt;
&lt;br /&gt;
Who are the humans software architects care about? &amp;nbsp;Downstream programmers, maintainers, testers, customers, managers, fellow teammates – the user too, but as software architects we are responsible for the experience of everyone who interacts with the systems we build, not just the users. &amp;nbsp;Put humans first in the documents you write and the systems you design. &amp;nbsp;Empathize with the developers, the testers, the managers, the integrators, and not only the users.&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Create a sense of craftsmanship.&lt;/b&gt; &amp;nbsp;We&#39;ve all seen it. &amp;nbsp;That diagram that was created just so someone could check off a box on a process. &amp;nbsp;The font is too tiny to read. &amp;nbsp;There are innumerable lines and boxes. &amp;nbsp;Nobody really uses the diagram because nobody wants to take the time to understand it. &amp;nbsp;The person who created a diagram like this straight up did not give a shit. &amp;nbsp;Design is as much about results and process as it is about aesthetic. &lt;br /&gt;
&lt;br /&gt;
Part of putting humans first is caring about what you build. &amp;nbsp;Embracing craftsmanship means only creating software, models, documentation, plans, and so on that you would be proud of. &amp;nbsp;Craftsmen strive to produce work that they would proudly declare as theirs, and would be willing to stake their reputation on what they produce.&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Share what you know.&lt;/b&gt; &amp;nbsp;As software architects, our job is just as much about teaching as it is about programming and technology. &amp;nbsp;A software architect who can&#39;t share their ideas is neither a useful leader nor an effective designer. &amp;nbsp;Conferences such as SATURN are critical to creating great software architects and offering platforms for sharing. &amp;nbsp;So too are less formal self-publishing platforms such as blogs, YouTube, LeanPub, Hangouts, Stack Exchange and so many others. &amp;nbsp;Collaborate, share, teach others – this is the only way software architecture can continue to grow and mature.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
These are the challenges of a maturing discipline. &amp;nbsp;These are my challenges to the software architecture community. &amp;nbsp;Are you up to the task?&lt;/div&gt;
&lt;ol&gt;&lt;/ol&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.neverletdown.net/feeds/389789418814185238/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.neverletdown.net/2014/05/five-challenges-for-maturing-discipline.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/389789418814185238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/389789418814185238'/><link rel='alternate' type='text/html' href='http://www.neverletdown.net/2014/05/five-challenges-for-maturing-discipline.html' title='Five Challenges for a Maturing Discipline'/><author><name>Michael</name><uri>http://www.blogger.com/profile/02649257003202319541</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4097792925045582567.post-2068125940247749854</id><published>2014-03-23T17:55:00.000-04:00</published><updated>2014-03-23T18:28:15.316-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Software Architecture"/><title type='text'>I&#39;m going to SATURN 2014 and you should too!</title><content type='html'>&lt;div style=&quot;background-color: #ffff99; font-size: 12pt; margin: 0px 10px 10px; padding: 10px;&quot;&gt;
The SATURN 2014 conference is taking place this May 5-9 in Portland, OR.  You should consider joining me at this essential software architecture conference.  &lt;a href=&quot;http://www.sei.cmu.edu/saturn/2014/registration/&quot;&gt;Register now online while tickets are available&lt;/a&gt;!&lt;/div&gt;
&lt;br /&gt;
After graduating from &lt;a href=&quot;http://mse.isri.cmu.edu/software-engineering/index.html&quot; target=&quot;_blank&quot;&gt;Carnegie Mellon with a Master in Software Engineering&lt;/a&gt; degree, I needed a way to stay relevant on software engineering topics.  As great as it would be, taking time off of work to earn a new degree every 5 to 10 years just doesn&#39;t work.  It’s time consuming and stressful, not to mention cost-prohibitive.  Rather than going back for more degrees, I decided that I would attend at least one professional conference every year.  Ideally, I also try to present or write at least one paper every year too, but attending at least one conference is the most important goal.&lt;br /&gt;
&lt;br /&gt;
This year my conference of choice is &lt;a href=&quot;http://www.sei.cmu.edu/saturn/2014/program/&quot; target=&quot;_blank&quot;&gt;SATURN 2014&lt;/a&gt;.  I decided to attend SATURN this year for a number of reasons.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;SATURN is the largest conference dedicated exclusively to software architecture practitioners (not academics) in North America&lt;/b&gt;.  I will only attend conferences where I can learn something that I can actually use in my job.  My expectation is for a high density of practical knowledge.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SATURN is one of the few conferences in the world dedicated to software design principles and practices&lt;/b&gt;.  There are lots of conferences out there on methods.  Tons of conferences on programming and specific technologies.  SATURN is one of the few conferences that examines these topics from the perspective of architecture and software design.  This perspective if desperately needed sorely lacking in software professionals today.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SATURN is an established conference&lt;/b&gt;.  The conference is co-hosted by the Software Engineering Institute and IEEE Software, and this year marks the 10th consecutive conference held.  The SEI and IEEE are responsible for having established and promoted nearly every standard practice in software architecture that has ever existed.  Their participation in this conference is a strong indicator of the kinds of topics that will be covered.  &lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SATURN is attended by the folks who define software architecture&lt;/b&gt;.  Here are just some of the software architecture thought leaders who are speaking at SATURN -- &lt;a href=&quot;http://en.wikipedia.org/wiki/Philippe_Kruchten&quot;&gt;Philippe Kruchten&lt;/a&gt;, &lt;a href=&quot;http://www.amazon.com/gp/product/0321815734/ref=as_li_ss_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0321815734&amp;amp;linkCode=as2&amp;amp;tag=nevletdowdotn-20&quot;&gt; Rick Kazman&lt;/a&gt;, &lt;a href=&quot;http://www.amazon.com/gp/product/0321815734/ref=as_li_ss_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0321815734&amp;amp;linkCode=as2&amp;amp;tag=nevletdowdotn-20&quot;&gt; Len Bass&lt;/a&gt;, &lt;a href=&quot;http://www.amazon.com/gp/product/0321552687/ref=as_li_ss_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0321552687&amp;amp;linkCode=as2&amp;amp;tag=nevletdowdotn-20&quot;&gt;Robert Nord&lt;/a&gt; , &lt;a href=&quot;http://www.amazon.com/gp/product/0321552687/ref=as_li_ss_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0321552687&amp;amp;linkCode=as2&amp;amp;tag=nevletdowdotn-20&quot;&gt; Felix Bachman&lt;/a&gt;, &lt;a href=&quot;http://www.amazon.com/gp/product/0984618104/ref=as_li_ss_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0984618104&amp;amp;linkCode=as2&amp;amp;tag=nevletdowdotn-20&quot;&gt;George Fairbanks&lt;/a&gt;, &lt;a href=&quot;http://www.sei.cmu.edu/about/people/profile.cfm?id=ozkaya_13614&quot; target=&quot;_blank&quot;&gt;Ipek Ozkaya&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Jeromy_Carriere&quot; target=&quot;_blank&quot;&gt;Jeromy Carriere&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Rebecca_Wirfs-Brock&quot; target=&quot;_blank&quot;&gt;Rebecca Wirfs-Brock&lt;/a&gt;, &lt;a href=&quot;http://www.tedneward.com/&quot; target=&quot;_blank&quot;&gt;Ted Neward&lt;/a&gt;, &lt;a href=&quot;http://www.amazon.com/gp/product/0201703327/ref=as_li_ss_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0201703327&amp;amp;linkCode=as2&amp;amp;tag=nevletdowdotn-20&quot;&gt;Linda Northrop&lt;/a&gt;, and more…&lt;br /&gt;
&lt;br /&gt;
If you measure a conference by the number of speakers who have a Wikipedia page, this conference has at least 5.  Bonus points if you can find them at the conference.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SATURN has a good mix of presentations, workshops, and longer tutorials&lt;/b&gt;.  The tutorials and classes are top-notch.  I personally am looking for advanced tutorials and workshops to attend and SATURN has these.  There’s also a couple with introductory information for software engineers just getting started in the world of software architecture.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SATURN is hosting a co-located Open Space facilitated by Diana Larsen&lt;/b&gt;.  I’m an explorer.  When choosing a conference I look for opportunities to explore beyond the established program.  I love a good Open Space conference and I am very much looking forward to having an Open Space filled with software architects.  I am even more excited that &lt;a href=&quot;http://www.amazon.com/gp/product/0977616649/ref=as_li_ss_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0977616649&amp;amp;linkCode=as2&amp;amp;tag=nevletdowdotn-20&quot; target=&quot;_blank&quot;&gt;Diana Larsen&lt;/a&gt; will be the facilitator.  She has done an amazing job facilitating at the XP conference in Europe every time I have been.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SATURN keynotes this year look amazing&lt;/b&gt;.  It’s unusual for me to attend a conference based on keynote speakers.  Most of the time I’m not that excited about the big speakers and I’m really looking at the overall topics in the conference.  That said,&lt;a href=&quot;http://www.sei.cmu.edu/saturn/2014/keynotes-and-speakers/&quot; target=&quot;_blank&quot;&gt; the SATURN 2014 keynote lineup looks really solid&lt;/a&gt;.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SATURN is held in Portland, OR this May 5-9&lt;/b&gt;.  Timing and location also play a significant role in my deciding what conference to attend.  I have always wanted to visit the Pacific Northwest and Portland in particular.  I’ve heard so many amazing things about Portland that I really need to see it for myself.  May is also a great time for a conference, at least for me.  I must admit that if I could afford to go to Europe this year, I am extremely tempted by XP2014 in Italy.&lt;/li&gt;
&lt;/ul&gt;
I should mention that&lt;a href=&quot;http://www.sei.cmu.edu/saturn/2014/&quot; target=&quot;_blank&quot;&gt; I am serving as the technical chair for this year’s SATURN conference&lt;/a&gt;.  You should view my serving as the technical chair for SATURN as the greatest possible endorsement I can give a conference.  Given the massive time commitment required to plan and organize a conference,  I can’t afford to spend time on something that I do not feel is massively important to software architecture, and something that is not great.  SATURN is important to our profession.  SATURN is a great conference.  &lt;a href=&quot;http://www.sei.cmu.edu/saturn/2014/registration/&quot; target=&quot;_blank&quot;&gt;I very much hope to see you there this May&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Other Conferences of Note:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://software-architect.co.uk/&quot; target=&quot;_blank&quot;&gt;Software Architect London&lt;/a&gt; -- I would call this SATURN&#39;s sister conference for Europe. &amp;nbsp;I have not attended, but it is pretty close in terms of quality of program to SATURN and a good choice if you are from Europe.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.xp2014.org/&quot; target=&quot;_blank&quot;&gt;XP 2014&lt;/a&gt;&amp;nbsp;-- outside of SATURN XP is my favorite conference after having attended twice. &amp;nbsp;The biggest problem for me is that it is in Europe. &amp;nbsp;Like most Agile conferences it is usually light on software architecture (albeit the strongest architecture presence of the Agile conferences I&#39;ve attended), but the locations, excellent planning, and dedicated research track more than make up for this.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://agile2014.agilealliance.org/&quot; target=&quot;_blank&quot;&gt;Agile 2014&lt;/a&gt; -- Agile has been expanding to include Agile coaches and UX topics, which has shifted the focus away from core software development. &amp;nbsp;That said, if you pick the right tracks this is a great conference.&lt;/li&gt;
&lt;/ul&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.neverletdown.net/feeds/2068125940247749854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.neverletdown.net/2014/03/im-going-to-saturn-2014-and-you-should.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/2068125940247749854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/2068125940247749854'/><link rel='alternate' type='text/html' href='http://www.neverletdown.net/2014/03/im-going-to-saturn-2014-and-you-should.html' title='I&#39;m going to SATURN 2014 and you should too!'/><author><name>Michael</name><uri>http://www.blogger.com/profile/02649257003202319541</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4097792925045582567.post-9029960696037324748</id><published>2014-01-02T07:00:00.000-05:00</published><updated>2017-08-21T22:55:40.350-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Agile Software Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Formal Methods"/><title type='text'>Formal Models: I Hate You, I Love You</title><content type='html'>My view on formal methods is somewhat... nuanced. &amp;nbsp;In spite of this I&#39;ll go ahead and start with a ridiculously strong and outrageous assertion that I can use as a toe hold for further discussion: &amp;nbsp;Formal specifications do not have a place in agile software development. &amp;nbsp;Don&#39;t get me wrong. As a software engineer &lt;a href=&quot;http://www.neverletdown.net/2009/12/the-domestication-of-formal-methods.html&quot;&gt;I like the idea of formal specifications very much.&lt;/a&gt; &amp;nbsp;They are precise. &amp;nbsp;They are unambiguous. &amp;nbsp;They are... engineering-y. &amp;nbsp;But as a post-modernist software engineer &lt;a href=&quot;http://www.neverletdown.net/2009/01/thoughts-on-formal-methods-in-software.html&quot;&gt;I also think formal specifications are kind of a dumb idea&lt;/a&gt;. They are tedious. They are cryptic. They are... anti-human.&lt;br /&gt;
&lt;br /&gt;
For decades software engineers seem to have put formal specifications on a pedestal as if they were the Michelangelo&#39;s David of requirements. &amp;nbsp; But while Michelangelo&#39;s sculpture of David manages to perfectly capture the essence of humanity in marble, even the most elegant formal specifications fail to fully capture the perfect essence of desired functional behavior of a software system. &amp;nbsp;The fatal flaw of formal specification comes from removing the human element and assuming that cold mathematical precision is an adequate model for communicating and comprehending human desires. &amp;nbsp;(Yes, I am creating a straw man, but please allow me to beat him up just a little more before providing a counterpoint.)&lt;br /&gt;
&lt;br /&gt;
A common example formalists use to demonstrate the strengths of formal specification (and weaknesses of plain old English prose) comes from the alleged ambiguity and confusion created by various warning signs posted by escalators throughout the UK. &amp;nbsp;&quot;Dogs must be carried,&quot; the signs read. &amp;nbsp;&quot;What if I don&#39;t have a dog? &amp;nbsp;Can I still use this escalator?&quot; the formalists rhetorically ask, I always imagine with a smug grin.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVDiPNfVuu3MzYTMm6Oi5agDWydzpamxKD0WafyL62yx3aRRot2Nrc9cza-_HGKSeb-tgmNDCwMbZARaZqTdiUzryjcNrvNv4hwRIoVg3Uzxdj1LxeVv39pub0dCiS01HkoqXJPYAv21pX/s1600/DogsCarried2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;Dogs Must Be Carried!&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVDiPNfVuu3MzYTMm6Oi5agDWydzpamxKD0WafyL62yx3aRRot2Nrc9cza-_HGKSeb-tgmNDCwMbZARaZqTdiUzryjcNrvNv4hwRIoVg3Uzxdj1LxeVv39pub0dCiS01HkoqXJPYAv21pX/s1600/DogsCarried2.jpg&quot; title=&quot;Dogs Must Be Carried sign&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;The more important question: &lt;br /&gt;What happened to that dog&#39;s butt?&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
This argument of course is completely absurd. &amp;nbsp;&lt;a href=&quot;http://languagelog.ldc.upenn.edu/nll/?p=3424&quot;&gt;Contextually, no confusion exists&lt;/a&gt;. &amp;nbsp;If you have a dog, then carry it up the escalator. &amp;nbsp; The formalist may ask next, &quot;What if I only own a cat?&quot; Ugh. &amp;nbsp;Formal models may be more precise but this does not mean they are necessarily more correct or more complete. Whether using natural language or a formal model, the question of cats (or goats or fish or pythons) is still a good one. &amp;nbsp;Chances are good you may ride the escalator if you are not carrying a dog. &amp;nbsp;Also, you probably should carry your cat too. &amp;nbsp;(Another great example for those interested: &lt;a href=&quot;http://itre.cis.upenn.edu/~myl/languagelog/archives/003476.html&quot;&gt;the TSA wants everyone to pack gel-filled brassieres&lt;/a&gt;.)&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh3vU0tbHdDL7dR7u9vfD7NRkPMkBA41fa89Gi37b7DRkKzImRvBpIAfYGoZT663hI_noZKa6cBNdB3i43lisTMAj1GgDcNxeBOax-s6Cp0NrDzxvnuFA9rMmXvkzLf-h799UrDTvyGFMq/s1600/Dogs-must-be-carried.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh3vU0tbHdDL7dR7u9vfD7NRkPMkBA41fa89Gi37b7DRkKzImRvBpIAfYGoZT663hI_noZKa6cBNdB3i43lisTMAj1GgDcNxeBOax-s6Cp0NrDzxvnuFA9rMmXvkzLf-h799UrDTvyGFMq/s400/Dogs-must-be-carried.jpg&quot; width=&quot;275&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
The common fallacy is that formal specification seems to encourage the incorrect assumption that more formal a model the more correct it is. &amp;nbsp;This confusion is likely created by confounding precision with correctness. &amp;nbsp;The goal is to create the most correct and precise model as possible so that you have an irrefutable representation of the system, a representation that has no room for argument or confusion. &amp;nbsp;This is certainly a positive intention, albeit slightly misguided. &amp;nbsp;&lt;b&gt;From an Agile perspective the goal should not be to create something that cannot be refuted but rather to facilitate effective communication.&lt;/b&gt; &amp;nbsp;In a world where collaboration is strongly preferred over negotiation &lt;a href=&quot;http://www.neverletdown.net/2010/04/is-better-enemy-of-good-enough.html&quot;&gt;perfection is the enemy&lt;/a&gt; that will drive you and your customer apart. &amp;nbsp;There is no thin red line in a healthy customer-team relationship.&lt;br /&gt;
&lt;br /&gt;
This is not to say that ambiguous requirements are desirable. &amp;nbsp;The confusion is in the message sent by the type of specification that you use. &amp;nbsp;The mathematical obfuscation and high-brow attitude of formal modeling sends all the wrong signals and can even make it more difficult to create a correct model. &amp;nbsp;For the average customer, offering up formal specifications as an irrefutable, unambiguous, no room for error model is the equivalent of saying, &quot;Hey client, I don&#39;t care if you can&#39;t understand this and your needs are not important to me. &amp;nbsp;I really just want to cover my ass here so I can throw your desires over the wall for construction.&quot; &amp;nbsp;Precision, correctness, completeness, and a lack of ambiguity are important traits for any specification, but so too is effective communication and a certain degree of flexibility to forge a new path as new information becomes available.&lt;br /&gt;
&lt;br /&gt;
Formal specifications seem to be born from a fixed mindset, a good match for folks who cannot (or simply refuse to) operate without exacting precision and firm, non-negotiable interpretations of &quot;right&quot; and &quot;wrong.&quot; Unfortunately, &quot;right&quot; and &quot;wrong&quot; are very relative notions on most software projects and &quot;better&quot; or &quot;worse&quot; is the currency in which we deal. &amp;nbsp;Understanding whether something is better, or even just good enough, is often relative and can only be fully understood once you have seen a solution if only a partially working one.&lt;br /&gt;
&lt;br /&gt;
And yet...&lt;br /&gt;
&lt;br /&gt;
And yet, I am still an engineer at heart and do not want to throw the formal baby out with the bathwater. Formal specification might still be useful in an agile context as long as the methods complement agile values. Behavior Driven Development, design-by-contract with predicates and post-conditions, automated functional testing – these are all models in the spirit of formal specification without the high-brow, non-negotiable attitude. &amp;nbsp;What&#39;s more methods like these aim to enhance communication between customer and team, and even within a team, rather than obfuscate it. &amp;nbsp;A good old fashioned state machine sometimes really is the best medicine, but in my experience it is a tool that can only be used effectively with the right set of stakeholders.&lt;br /&gt;
&lt;br /&gt;
Communication is something everyone can agree is a good thing, at least in theory. &amp;nbsp;&lt;a href=&quot;http://www.neverletdown.net/2009/01/thoughts-on-formal-methods-in-software.html#gpluscomments&quot;&gt;Even the most ardent Z supporters will tell you that one of most valuable aspects of a Z specification is in the prose that accompanies the model&lt;/a&gt;. &amp;nbsp;Meanwhile, those same Z supporters will breathlessly defend formal methods, even though they just admitted that the informal part is one of the most valuable pieces, that the formal model really should not exist without the explanatory prose. &amp;nbsp;The model is really just a tool, a means to an end for achieving clarity in thinking.&lt;br /&gt;
&lt;br /&gt;
What I am proposing is not to abandon formal specifications. &amp;nbsp;&lt;b&gt;Formal modeling is an awesome tool - when used with the right frame of mind.&lt;/b&gt; &amp;nbsp; &lt;a href=&quot;http://www.neverletdown.net/2009/12/the-domestication-of-formal-methods.html&quot;&gt;Formal models that embrace agile values and promote humanist qualities are the ones you should be using&lt;/a&gt;. &amp;nbsp;Why not make that model, or the prose surrounding it, executable? &amp;nbsp;Why not rely on contextual or cultural cues to enhance meaning? &amp;nbsp;Why not use comprehensible prose, diagrams, sketches, prototypes, tests, and working software in combination to reduce ambiguity, enhance precision, and improve correctness while enabling true collaboration?&lt;br /&gt;
&lt;br /&gt;
Pragmatic, human-centered formal methods have an important place in Agile software development and should be embraced wholeheartedly.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.neverletdown.net/feeds/9029960696037324748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.neverletdown.net/2014/01/formal-models-i-hate-you-i-love-you.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/9029960696037324748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/9029960696037324748'/><link rel='alternate' type='text/html' href='http://www.neverletdown.net/2014/01/formal-models-i-hate-you-i-love-you.html' title='Formal Models: I Hate You, I Love You'/><author><name>Michael</name><uri>http://www.blogger.com/profile/02649257003202319541</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVDiPNfVuu3MzYTMm6Oi5agDWydzpamxKD0WafyL62yx3aRRot2Nrc9cza-_HGKSeb-tgmNDCwMbZARaZqTdiUzryjcNrvNv4hwRIoVg3Uzxdj1LxeVv39pub0dCiS01HkoqXJPYAv21pX/s72-c/DogsCarried2.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4097792925045582567.post-7270332230181928730</id><published>2013-06-24T09:00:00.000-04:00</published><updated>2017-08-21T22:58:37.817-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Agile Software Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Design Methods"/><category scheme="http://www.blogger.com/atom/ns#" term="Software Architecture"/><title type='text'>Rapid Software Architecture Exploration</title><content type='html'>At XP2013 this June in Vienna, Austria I ran a brand new workshop titled &quot;Rapid Software Architecture Exploration.&quot;&amp;nbsp; In the workshop I presented a framework for thinking about software architecture design based on my essay, &lt;a href=&quot;http://www.neverletdown.net/2010/09/exploring-design-space.html&quot;&gt;Exploring the Design Space&lt;/a&gt;, and gave participants a chance to put the theory to practice using four different exploration activities.&amp;nbsp;&lt;a href=&quot;http://xp2013.org/program/industry/rapid-software-architecture-exploration/&quot;&gt;Slides and handouts from this session are available online&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Huge thanks to everyone who came to the workshop. &amp;nbsp;Everyone did an amazing job and really ran with the activities we did. &amp;nbsp;I think the end results were very good -- surprisingly an almost fully architected system in only 45 minutes (plus some of the prep work that I did ahead of time). &amp;nbsp;I have no doubt, now even more so, that with a good facilitator and the right people in the room you can accomplish in hours or a few days what traditionally could take weeks.&lt;br /&gt;
&lt;br /&gt;
The session was great because you guys made it great. &amp;nbsp;Thank you!&amp;nbsp; If you use these workshops with your teams or customers, let me know how it goes, I&#39;d love to hear from you!&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
&lt;b&gt;System Properties Web&lt;/b&gt;&lt;/h2&gt;
&lt;div&gt;
The system properties web is intended to be a light version of the traditional Quality Attributes Workshop. &amp;nbsp;Combining structured brainstorming or a quality attributes taxonomy questionnaire with a spider diagram for capturing concerns, stakeholders can quickly identify raw quality attribute scenarios and create a visualization &amp;nbsp;depicting the &quot;signature&quot; of the system.&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9k1wyIwWwM8B4glMuT1K6_sCq3X3I45-DZSJ5IChZ0-mpaG3SZvpbXb7jbS4tBRmxz3Vgj19ht9sB7mvS9NtIR8NscG7tEeZZeJQysDHX5OqLezaoNjGTVcUo2qjWG7oFXXYh0awJR65C/s1600/WP_001114.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9k1wyIwWwM8B4glMuT1K6_sCq3X3I45-DZSJ5IChZ0-mpaG3SZvpbXb7jbS4tBRmxz3Vgj19ht9sB7mvS9NtIR8NscG7tEeZZeJQysDHX5OqLezaoNjGTVcUo2qjWG7oFXXYh0awJR65C/s400/WP_001114.jpg&quot; height=&quot;300&quot; title=&quot;XP2013 system properties web - group brainstorming&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;A group brainstorms raw scenarios and concerns.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAjnBTCXqFgar4PpsaBp05bJBoDXkMKwXD7KdRCVKFUrFoZLmoJ3OrppbAEFEZFamqsEX_c9710_smEe6Bt05v-RYBTUDnZVVZfGb3ufYrvHTIvfUQ80moib4gF21DSNbMkrlxqySNYhbM/s1600/WP_001123.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAjnBTCXqFgar4PpsaBp05bJBoDXkMKwXD7KdRCVKFUrFoZLmoJ3OrppbAEFEZFamqsEX_c9710_smEe6Bt05v-RYBTUDnZVVZfGb3ufYrvHTIvfUQ80moib4gF21DSNbMkrlxqySNYhbM/s400/WP_001123.jpg&quot; height=&quot;300&quot; title=&quot;XP2013 System Properties Web - considering concerns&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Categorizing concerns helps create a visualization to assist in the workshop.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3PduN5WGjscot_dMvrlQQjjHXLEiNO6Zd-KFwTKojR9KODZxPAJwqOIefeaDyV5MrtVBzQIfFQpbAE5OZqHnGHTT8QjPztT4imA4adB1LKfRS1jKm6K2AuuhfmfB3v9Y0K67eXYflTTF9/s1600/WP_001116.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3PduN5WGjscot_dMvrlQQjjHXLEiNO6Zd-KFwTKojR9KODZxPAJwqOIefeaDyV5MrtVBzQIfFQpbAE5OZqHnGHTT8QjPztT4imA4adB1LKfRS1jKm6K2AuuhfmfB3v9Y0K67eXYflTTF9/s400/WP_001116.jpg&quot; height=&quot;300&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;The stakeholders in this group seem most concerned with reliability and availability&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEh76Uo74HESC92CNJICAqJsww_Jdm1xYmRPZ8JLnyGwYqfMg_Z3t_moQTKaH1y9J1hWmkznY12kmZK7Z1PfYBlcrVAkzCfVa5eIn5y23rH8ezwcll7NO0D1cwOSFe-YPVKmO-VvCfIHHJ/s1600/WP_001159.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEh76Uo74HESC92CNJICAqJsww_Jdm1xYmRPZ8JLnyGwYqfMg_Z3t_moQTKaH1y9J1hWmkznY12kmZK7Z1PfYBlcrVAkzCfVa5eIn5y23rH8ezwcll7NO0D1cwOSFe-YPVKmO-VvCfIHHJ/s400/WP_001159.jpg&quot; height=&quot;300&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;While this stakeholder group identified concerns across many quality attributes,&lt;br /&gt;
notice that neither of the examples identified many scalability concerns.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2&gt;
&lt;b&gt;Round Robin Design&lt;/b&gt;&lt;/h2&gt;
Round Robin Design is a method for quickly generating many ideas and then helping to converge those ideas. &amp;nbsp;The idea is simple. &amp;nbsp;Working alone or in small groups you design a view of the system and then pass your design to another group for critique and yet another group for improvement. &amp;nbsp;Constraining the time forces you to get creative and actually design something while sharing your designs exposes you to new ideas and creates a sense of shared ownership among the team.&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgxzqEEHZyqzmPo4Fy-krlU8BwRvhOwL3uEmptfOgrE8H5lyFyl4jl0Z70fS17YsmlaRA2Jm1Ay8KfR3uTIL5r58qvTBqixqyyYWaYk_O2EM1pLC-7WCZm4uVktBhDl70oB7vwqsNTSvrH/s1600/WP_001117.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgxzqEEHZyqzmPo4Fy-krlU8BwRvhOwL3uEmptfOgrE8H5lyFyl4jl0Z70fS17YsmlaRA2Jm1Ay8KfR3uTIL5r58qvTBqixqyyYWaYk_O2EM1pLC-7WCZm4uVktBhDl70oB7vwqsNTSvrH/s400/WP_001117.jpg&quot; height=&quot;300&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Everyone got very quiet during this activity... &amp;nbsp;Deep in concentration.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe98e7iEjaFnkvucRuFeOaYy1cKpH_MOF3XKzslwSYs3RtudaUfGrd1eBUGRM5txge8LoNFr2_KAjEX7-5VWCQSkm8WgsDjkG_aiRbeZ-5MEovJsWsDKrCr18OOZyIKmT54mxK6Xw4M7Y2/s1600/WP_001122.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe98e7iEjaFnkvucRuFeOaYy1cKpH_MOF3XKzslwSYs3RtudaUfGrd1eBUGRM5txge8LoNFr2_KAjEX7-5VWCQSkm8WgsDjkG_aiRbeZ-5MEovJsWsDKrCr18OOZyIKmT54mxK6Xw4M7Y2/s400/WP_001122.jpg&quot; height=&quot;300&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Another group of architect&#39;s working quickly to&lt;br /&gt;
design a physical perspective of the system.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2&gt;
&lt;b&gt;Risk Storming&lt;/b&gt;&lt;/h2&gt;
&lt;a href=&quot;http://www.codingthearchitecture.com/2012/07/11/risk_storming.html&quot;&gt;Risk Storming is a workshop proposed by Simon Brown of &quot;Coding the Architecture&lt;/a&gt;&quot;. &amp;nbsp;The basic idea is to use diagrams of the system as a kick start&amp;nbsp;for brainstorming risks in the current system design. &amp;nbsp;These risks then become the basis for designing experiments, research, or further detailing design for specific parts of the system.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmjNtZsNdQF9ztleb293d8P8e30w7Hp5Wix13IEOq72uhGEtjFeXda0naWm3HEo_jFkA2mofQ9KtXvHtnwcAqXHF3AA0vDeZwryeCanlc57kApg89kfZQ-4RPiaIcG6EPf0GhCyHEgzA7G/s1600/WP_001119.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmjNtZsNdQF9ztleb293d8P8e30w7Hp5Wix13IEOq72uhGEtjFeXda0naWm3HEo_jFkA2mofQ9KtXvHtnwcAqXHF3AA0vDeZwryeCanlc57kApg89kfZQ-4RPiaIcG6EPf0GhCyHEgzA7G/s400/WP_001119.jpg&quot; height=&quot;300&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Working together as a group, both engineering risk and&lt;br /&gt;
project management risk should be considered.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhR_fkpXCM3dmZ4zt1f6wDOyteJFxQO_NVwBfw0TH8GAvtwTUxV7kbJMDZpEwyaqc-FXX2Y_mmGgSUvoqufrxrysNRczPNaFRK-ELH0dowePH78xVTkRbshVfUEILmt1U3BAbLqFyYUMjLK/s1600/WP_001124.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhR_fkpXCM3dmZ4zt1f6wDOyteJFxQO_NVwBfw0TH8GAvtwTUxV7kbJMDZpEwyaqc-FXX2Y_mmGgSUvoqufrxrysNRczPNaFRK-ELH0dowePH78xVTkRbshVfUEILmt1U3BAbLqFyYUMjLK/s400/WP_001124.jpg&quot; height=&quot;300&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Each sticky represents a risk or worry.&amp;nbsp; Place the stickies directly on the diagram&lt;br /&gt;
in the area to which the risk applies.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_BsUVeldlNErDunQncDBZoyIF8X7T_pFl0W-Kr3_BT6f3xFg7tA_9s6eAUEDaUFl755fuNFZUiVQn7DMtuN1JOlI1FHkIaK5hj-IqChe0iWRM7ghUvoHBDzIQNJD0waufgm5XFCfWrG03/s1600/WP_001120.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_BsUVeldlNErDunQncDBZoyIF8X7T_pFl0W-Kr3_BT6f3xFg7tA_9s6eAUEDaUFl755fuNFZUiVQn7DMtuN1JOlI1FHkIaK5hj-IqChe0iWRM7ghUvoHBDzIQNJD0waufgm5XFCfWrG03/s400/WP_001120.jpg&quot; height=&quot;300&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Using different colored stickies also helps create a visualization of risk&lt;br /&gt;
in the system - or at least show what folks are worried about.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivm03mzjBtcICKGPC4v0bGk-zSeokcqEacfkb00obfbW_di1E6BpDWXv3b-1uukXxes1Jl2CcenpOXBAT4DiasenhaIXfSrcZyS8PfI-9Js2Ep_RWrUarns6DTSJ67Uh9mRjj4L_zyRv_B/s1600/WP_001157.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivm03mzjBtcICKGPC4v0bGk-zSeokcqEacfkb00obfbW_di1E6BpDWXv3b-1uukXxes1Jl2CcenpOXBAT4DiasenhaIXfSrcZyS8PfI-9Js2Ep_RWrUarns6DTSJ67Uh9mRjj4L_zyRv_B/s400/WP_001157.jpg&quot; height=&quot;300&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;At least one view of the dynamic, physical, and static&lt;br /&gt;
perspectives should be evaluated.&amp;nbsp; Context diagram too if time is available.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;b&gt;Stakeholder Mapping&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Stakeholder mapping is an exercise introduced to me by &lt;a href=&quot;http://ariadna.font.cat/&quot;&gt;Ari Font&lt;/a&gt;.&amp;nbsp; This&amp;nbsp;30-45 minute activity is a great&amp;nbsp;way to start a full day of workshops.&amp;nbsp;&amp;nbsp;I like this activity a lot.&amp;nbsp; It is always a surprise to see how many stakeholders and stakeholder groups actually have influence or could be influenced by the system that you are building.&amp;nbsp; This is also an activity that helps break the ice and sets the tone for group participation.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7Sx8ZMkLzo5NB5YKRbeFsaEPu7xBpEdp7yv8R3ZfOyiOTjV5u4qe2ZdC5jdeMh6xKLE6Huo2YJTK4h7IPW0-6-E9BNO2GR32NEi7RNDBzHRvBfLNtBxtRXYZczzyuuyglz8BPPNhmPswU/s1600/WP_001125.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7Sx8ZMkLzo5NB5YKRbeFsaEPu7xBpEdp7yv8R3ZfOyiOTjV5u4qe2ZdC5jdeMh6xKLE6Huo2YJTK4h7IPW0-6-E9BNO2GR32NEi7RNDBzHRvBfLNtBxtRXYZczzyuuyglz8BPPNhmPswU/s400/WP_001125.jpg&quot; height=&quot;300&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Collaborating on a stakeholder map for their group.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgze5ImU0xpx70bYz4Vo7o81-tfB8byJrVc6LhsGaHMXUGf77ZZ-PlGb_ncTlzZ1VIGiw5i_I9YAiMi8LHOvdClWn_OsuzAy4khHQ5IQC1Z5GySmHDNHLptv_3L1hPtSxa6bxANcuwy-E3R/s1600/WP_001121.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgze5ImU0xpx70bYz4Vo7o81-tfB8byJrVc6LhsGaHMXUGf77ZZ-PlGb_ncTlzZ1VIGiw5i_I9YAiMi8LHOvdClWn_OsuzAy4khHQ5IQC1Z5GySmHDNHLptv_3L1hPtSxa6bxANcuwy-E3R/s400/WP_001121.jpg&quot; height=&quot;400&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;One of the group&#39;s maps.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-TzN-IYswdFk_Csq4Y98TcOkBwIbY16b2LfsZkAgCYyG7Eisb4J3EmwWCVdrPtk9gLTPKqZqTvjJeFDB6_3HL_LCKEhB_quQM_V3-1pgRuGyTNxiz2C-T5bffrEmJ0PfILPqpXVysoVsR/s1600/WP_001152.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-TzN-IYswdFk_Csq4Y98TcOkBwIbY16b2LfsZkAgCYyG7Eisb4J3EmwWCVdrPtk9gLTPKqZqTvjJeFDB6_3HL_LCKEhB_quQM_V3-1pgRuGyTNxiz2C-T5bffrEmJ0PfILPqpXVysoVsR/s400/WP_001152.jpg&quot; height=&quot;400&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Groups only had about 10 minutes and quickly identified&lt;br /&gt;
more than just the usual suspects of stakeholders.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;h2&gt;
Reflection&lt;/h2&gt;
Overall I felt this workshop went really well.&amp;nbsp; Front loading the theory and&amp;nbsp;presenting the workshop activities first gave folks who were not interested in hands on practice a chance to learn something without committing to a group learning activity.&amp;nbsp; I understand it -- after a few days at a conference, a sit and listen lecture can be just what you need sometimes.&amp;nbsp; For those who stayed, the hand on parts were a fun and effective learning experience.&lt;br /&gt;
&lt;br /&gt;
I was extremely impressed with how quickly everyone picked up the practices and applied the theory.&amp;nbsp; I take this as a good sign that the framework for thinking about design is a good approach. I know that I&#39;ve been successful using this approach and these practices, but a true test is when someone else is able to apply the ideas on their own.&amp;nbsp; A future variant of this workshop might be even more aggressive in how much the teams design on their own.&lt;br /&gt;
&lt;br /&gt;
XP2013 is one of my favorite conferences.&amp;nbsp; It&#39;s got a great mix of researchers and practioners, and a workshop like &quot;Rapid Software Architecture Exploration&quot; really benefits from this mix.&lt;br /&gt;
&lt;br /&gt;
Call it what you will -- rapid exploration, lean software architecture -- combing best of breed practices from other design disciplines with lean versions of common architecture workshops seems like a winning combination.</content><link rel='replies' type='application/atom+xml' href='http://www.neverletdown.net/feeds/7270332230181928730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.neverletdown.net/2013/06/rapid-software-architecture-exploration.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/7270332230181928730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/7270332230181928730'/><link rel='alternate' type='text/html' href='http://www.neverletdown.net/2013/06/rapid-software-architecture-exploration.html' title='Rapid Software Architecture Exploration'/><author><name>Michael</name><uri>http://www.blogger.com/profile/02649257003202319541</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9k1wyIwWwM8B4glMuT1K6_sCq3X3I45-DZSJ5IChZ0-mpaG3SZvpbXb7jbS4tBRmxz3Vgj19ht9sB7mvS9NtIR8NscG7tEeZZeJQysDHX5OqLezaoNjGTVcUo2qjWG7oFXXYh0awJR65C/s72-c/WP_001114.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4097792925045582567.post-888951600430530833</id><published>2013-05-06T09:00:00.000-04:00</published><updated>2017-08-21T22:56:36.549-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Book Review"/><category scheme="http://www.blogger.com/atom/ns#" term="Leadership"/><title type='text'>Overcoming Team Dysfunctions: From Storming to Awesome</title><content type='html'>Forming, storming, norming, performing, mourning -- &lt;a href=&quot;http://en.wikipedia.org/wiki/Tuckman&#39;s_stages_of_group_development&quot;&gt;the stages lof team formation&lt;/a&gt;.&amp;nbsp; I’ve experienced this natural progression a few times, transitioning from a group of strangers to a well-oiled machine – to friends.&lt;br /&gt;
&lt;br /&gt;
One team I worked on figured out a way to collect data and measure our journey from new to awesome.&amp;nbsp; We didn’t know about this standard team lifecycle when we started, but that didn’t mean we could avoid it.&amp;nbsp; In fact, as you’ll see in this essay, embracing the steps of team formation helped us move through the phases and become a highly efficient team that much faster.&lt;br /&gt;
&lt;h4&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;h4&gt;
Forming and Storming&lt;/h4&gt;
&lt;br /&gt;
We were a team of five working in an &lt;a href=&quot;http://mse.isri.cmu.edu/software-engineering/web3-programs/MSE/index.html&quot;&gt;industrial-like university setting&lt;/a&gt;.&amp;nbsp; Our mission was to build a new web-based workflow tool in support of the security requirements elicitation methodology, &lt;a href=&quot;http://www.cert.org/sse/square/&quot;&gt;SQUARE&lt;/a&gt;.&amp;nbsp; We had a budget of about 3,800 engineering hours and a delivery date in 16 months.&lt;br /&gt;
&lt;br /&gt;
Overall my team had worked together well from day one, but coming together as a team was not easy.&amp;nbsp; Our biggest challenge involved overcoming the inherent cultural biases and assumptions that everyone brings with them wherever they go.&amp;nbsp; This was initially amplified for us being from so many different places.&amp;nbsp; For the first month we fumbled because each of us simply assumed that everyone else worked the same ways, that we had the same values.&amp;nbsp; Of course we did not and this realization created riffs of distrust within the team.&lt;br /&gt;
&lt;br /&gt;
To consider us a team at all in the beginning was really absurd.&amp;nbsp; We were from all over the world and everyone was new to Pittsburgh.&amp;nbsp; At the time this was one of the most diverse groups of people with which I had ever worked with teammates hailing from the US, Panama, India, Bangladesh, and Taiwan.&amp;nbsp; In my case (and I’m sure it was the same with everyone) I came from a team that worked like a well-oiled machine.&amp;nbsp; The team I worked with before had been together for over a year and had been working efficiently for over half that time.&lt;br /&gt;
&lt;br /&gt;
Leaving an amazing team and going to a new one with no trust was jarring and excruciatingly painful.&amp;nbsp; After the first month this new team could barely work together on anything.&amp;nbsp; We were all still in mourning after having left our previous, awesome teams.&amp;nbsp; And things were not going well as we were getting to know each other while at the same time trying to get work done.&lt;br /&gt;
&lt;br /&gt;
Conflicts, distrust, missing commitments – we were a full on storming team.&amp;nbsp; And we seemed to be stuck there.&lt;br /&gt;
&lt;br /&gt;
In hindsight, the biggest problem we faced in the beginning was that we didn’t know we were a dysfunctional team.&lt;br /&gt;
&lt;h4&gt;
&lt;/h4&gt;
&lt;h4&gt;
Identifying Team Dysfunctions&lt;/h4&gt;
&lt;br /&gt;
One tool that helped turn everything around for us was the &lt;a href=&quot;http://dogbert.mse.cs.cmu.edu/mse2009/projects/SquareRoot/wiki/team_dysfunction_assessment_survey.html&quot;&gt;Team Dysfunctions Survey&lt;/a&gt;.&amp;nbsp; The survey comes from &lt;a href=&quot;http://www.amazon.com/gp/product/0470580461/ref=as_li_ss_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0470580461&amp;amp;linkCode=as2&amp;amp;tag=nevletdowdotn-20&quot;&gt;&lt;i&gt;Overcoming the Five Dysfunctions of a Team&lt;/i&gt;&lt;/a&gt; by Patrick Lencioni.&amp;nbsp; The book is a field guide for, as the title suggests, overcoming the various dysfunctions teams face.&amp;nbsp; The book consists of equal parts theory and application.&amp;nbsp; Each chapter talks a little about a dysfunction and then presents activities that can be used to help overcome the problem.&amp;nbsp; The material will look familiar to anyone who has ever attended a leadership retreat but it’s presented in a disciplined, well organized way so that any team leader can use it to help bring the team together.&lt;br /&gt;
&lt;br /&gt;
The Team Dysfunctions Survey is a brief 15 question quiz that all team members take to gain a quick assessment of how everyone thinks the team is doing.&amp;nbsp; &lt;a href=&quot;http://dogbert.mse.cs.cmu.edu/mse2009/projects/SquareRoot/wiki/team_assessment_process.html&quot;&gt;When my team took it&lt;/a&gt; we kept the lowest score in the group from each of the five sections of the quiz.&amp;nbsp; Our thought was that if one person on the team feels there is a problem in an area, then the whole team has a problem.&amp;nbsp; So if one person felt a lack of trust, for example, then trust is an area in which the entire team would need to work on further.&lt;br /&gt;
&lt;br /&gt;
The quiz quickly revealed some important aspects about our team.&amp;nbsp; One of the most important things I learned was that I, as the team leader at the time, had a skewed sense of how the team was actually coming together.&amp;nbsp; With data from the survey in hand and a way of thinking about building healthy teams I had the power I needed to pinpoint the exact areas we needed to work so we could come together as a team.&lt;br /&gt;
&lt;br /&gt;
Lencioni describes the five dysfunctions as a pyramid where the things at the base must be present for the things at the pinnacle to be successful.&amp;nbsp; For example, trust, at the base of the pyramid, is the most essential part of any team.&amp;nbsp; Not surprisingly, this was also the area where my team was having the most trouble as revealed by the Team Dysfunctions Survey.&amp;nbsp; As such, building trust within the team became our top priority.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3O8eMFBqBDzUAJ1j8kUkVczZ-7tOSL14oySU40dtpMbEZTL7DB_Ve5MsOzfHi0p5WvO5N2g6wxBAgDEVU_bqtjdAdU_8Ocbk2J2Z7jXWeH-6EesJWUjUU8N3iOp4dm4LOovgu21bZeuH7/s1600/dysfunctions-pyramid.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;371&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3O8eMFBqBDzUAJ1j8kUkVczZ-7tOSL14oySU40dtpMbEZTL7DB_Ve5MsOzfHi0p5WvO5N2g6wxBAgDEVU_bqtjdAdU_8Ocbk2J2Z7jXWeH-6EesJWUjUU8N3iOp4dm4LOovgu21bZeuH7/s640/dysfunctions-pyramid.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h4&gt;
&lt;/h4&gt;
&lt;h4&gt;
Building a Foundation Based on Trust – Getting Past Storming&lt;/h4&gt;
&lt;br /&gt;
Really the only way that you can trust someone is if you know them on a human level.&amp;nbsp; The only way to know someone is to share something about yourself with them.&amp;nbsp; This sharing involves creating a level of vulnerability and building a bond of trust based on that shared experience.&amp;nbsp; Without this trust, you will not work as well together and this will negatively impact the quality of work the team is able to produce.&lt;br /&gt;
&lt;br /&gt;
The easiest way to get to know someone is pretty obvious since we do it almost every day: hang out.&amp;nbsp; To kick off our trust building effort I hosted a dinner party at my house where we ate lasagna and played Wii Sports for a few hours. &amp;nbsp;If I recall correctly, I think we even buzzed one of fellow our teammates hair! &amp;nbsp;Letting everyone see where I lived and getting everyone together in a relaxed, non-work setting made it easier for folks to open up and tell stories about where they came from, what they valued, and how they thought about the world. &lt;br /&gt;
&lt;br /&gt;
Hanging out was really good for us, but we had a lot of work to get done and not a lot of time to do it.&amp;nbsp; To accelerate trust building we played some simple icebreaker games.&amp;nbsp; One example was the M&amp;amp;M game.&amp;nbsp; In the M&amp;amp;M game, each team member gets a small pile of M&amp;amp;Ms and everyone sits together around a table.&amp;nbsp; Going around the table, one at a time, each person picks up an M&amp;amp;M and tells the group something about themselves and then eats the candy.&amp;nbsp; The color of the M&amp;amp;M determines what the subject will be, red for family, yellow for job, green for hobbies/personal interests, blue for childhood, orange for undergraduate, and brown for future.&amp;nbsp; In the ideal situation, each person chooses a wide range of colors and talks for less than two minutes at a time for each story they tell.&amp;nbsp; This game was simple and effective for us.&lt;br /&gt;
&lt;h4&gt;
&lt;/h4&gt;
&lt;h4&gt;
Measuring our Dysfunctions Progress – Norming and Performing&amp;nbsp;&lt;/h4&gt;
&lt;br /&gt;
So did it work?&amp;nbsp; Another interesting thing my team did was to continue using Lencioni’s survey as a means for assessing how we were doing.&amp;nbsp; To keep things honest, there was a 60 second time limit on filling out the survey and the results were collected anonymously.&amp;nbsp; We charted our progress over time in each of the five areas.&amp;nbsp; Keep in mind that the things at the top of the pyramid probably aren’t valid unless the things underneath are solid.&amp;nbsp; In this case, solid is a score of 6 or higher on the survey.&lt;br /&gt;
&lt;br /&gt;
My team’s results over the course of the project are charted in the graph below.&amp;nbsp; The score for each dimension is shown over time.&amp;nbsp; Lencioni’s terminology is strange to use in this way, so it might be easier to negate the ideas in your head when reading the graph – for example a high score for “Absence of Trust” really means “We have Trust” while a low score means there is no trust among the team.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYwERWYmiFphmYaYg9LPynlIy3eM4L8O07W2Rif75LVjZn7pjceXb5aqJU4cMXeDHCzSyKnuVLue08Zt2IB6m_OYJGdg2L7sxTaq__03sckAvmoFLSNN5yTUmuDBc_il5qg_Wgutn2XI0D/s1600/team-dysfunction-result.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;444&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYwERWYmiFphmYaYg9LPynlIy3eM4L8O07W2Rif75LVjZn7pjceXb5aqJU4cMXeDHCzSyKnuVLue08Zt2IB6m_OYJGdg2L7sxTaq__03sckAvmoFLSNN5yTUmuDBc_il5qg_Wgutn2XI0D/s640/team-dysfunction-result.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
A few interesting points from the graph above:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;The surveys were not taken at regular intervals.&amp;nbsp; Because of the way the capstone project is designed, we only spent 12 hours per week during the Inception and Elaboration phases and 48 hours per week during construction.&amp;nbsp; Time between surveys was probably 1-2 months on average (just enough time to forget what the questions mean).&lt;/li&gt;
&lt;li&gt;The Inception postmortem was the end of the fall semester.&amp;nbsp; We were feeling pretty good, having survived our first semester.&lt;/li&gt;
&lt;li&gt;Elaboration iteration 3 was the end of the spring semester.&amp;nbsp; We had just received bad marks on the architecture we had spent all semester designing and realized we had more work to do.&amp;nbsp; Notice that trust is at an all-time low and conflict is at an all-time high.&amp;nbsp; This means that issues were being flushed out but it wasn’t always in a healthy way.&amp;nbsp; In other words, there was some “blame game” going on.&lt;/li&gt;
&lt;li&gt;We focused on trust again during the summer Construction phase with release parties at the end of iterations and by using a daily team stand-up meeting to keep everyone informed of progress.&amp;nbsp; These activities were essential to helping us pull through norming to become a high performance team.&lt;/li&gt;
&lt;li&gt;We also used this data as the basis for a more holistic study as shown in this &lt;a href=&quot;http://mse-square-root.blogspot.com/2009/11/square-root-poster.html&quot;&gt;team reflection super graphic&lt;/a&gt;. &amp;nbsp;There&#39;s some prose and a video walking through the graphic along with additional reflection on our &lt;a href=&quot;http://mse-square-root.blogspot.com/&quot;&gt;team blog&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
Lots of teams try to measure morale or unity.&amp;nbsp; Unlike most methods, Lencioni’s survey is based on sound research and gives concrete feedback on what you need to do to actually improve how your team works together.&amp;nbsp; If you aren’t naturally having a blast coming in to work with your team, chances are there is something dysfunctional going on.&amp;nbsp; I highly recommend taking a look at &lt;a href=&quot;http://www.amazon.com/gp/product/0470580461/ref=as_li_ss_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0470580461&amp;amp;linkCode=as2&amp;amp;tag=nevletdowdotn-20&quot;&gt;Overcoming the Five Dysfunctions of a Team&lt;/a&gt; book.</content><link rel='replies' type='application/atom+xml' href='http://www.neverletdown.net/feeds/888951600430530833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.neverletdown.net/2013/05/overcoming-team-dysfunctions-from-storming-to-awesome.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/888951600430530833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/888951600430530833'/><link rel='alternate' type='text/html' href='http://www.neverletdown.net/2013/05/overcoming-team-dysfunctions-from-storming-to-awesome.html' title='Overcoming Team Dysfunctions: From Storming to Awesome'/><author><name>Michael</name><uri>http://www.blogger.com/profile/02649257003202319541</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3O8eMFBqBDzUAJ1j8kUkVczZ-7tOSL14oySU40dtpMbEZTL7DB_Ve5MsOzfHi0p5WvO5N2g6wxBAgDEVU_bqtjdAdU_8Ocbk2J2Z7jXWeH-6EesJWUjUU8N3iOp4dm4LOovgu21bZeuH7/s72-c/dysfunctions-pyramid.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4097792925045582567.post-5506166939230649351</id><published>2013-04-15T09:00:00.000-04:00</published><updated>2017-08-21T23:03:36.680-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Design Methods"/><category scheme="http://www.blogger.com/atom/ns#" term="Software Architecture"/><title type='text'>Boxing the Infinite Design Space</title><content type='html'>When&amp;nbsp;I&amp;nbsp;work on a puzzle&amp;nbsp;I start by making piles of&amp;nbsp;pieces that seem like they go together.&amp;nbsp; When I find a distinguishing feature on a piece&amp;nbsp;(like an eye or a&amp;nbsp;unique color for example)&amp;nbsp;it&amp;nbsp;helps me fix a position&amp;nbsp;and I can&amp;nbsp;start connecting&amp;nbsp;pieces together.&amp;nbsp; If I can figure out where a pile or set of connected pieces&amp;nbsp;should be relative to one another I try to place&amp;nbsp;them approximately in the right spot on the table relative to the other piles I&#39;ve made.&lt;br /&gt;
&lt;br /&gt;
The most important pieces are the corners.&amp;nbsp; The only problem is that there are only 4 corner pieces (out of thousands)&amp;nbsp;and in some puzzles it&#39;s impossible to determine just by looking at the piece, in which corner that piece belongs.&amp;nbsp; Edges are helpful too but without some kind of context it&#39;s difficult to know if an edge belongs on the right or the left, the top or the bottom.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhADU2BoytNXq2R6opPLat8RgtYyO15iWRPPvo9fCKsAXGIrd21w_QE1p3-TnmDBuNvx_KxeCkoh7qZ_I8aM8fJ9AVHndBE-u91kaVEqkO0ZS7AxZijtl25IXbNZX_jtY-JD1dL05HIb4w4/s1600/100359991_a9fbaeff9c_b.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;pile of puzzle pieces&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhADU2BoytNXq2R6opPLat8RgtYyO15iWRPPvo9fCKsAXGIrd21w_QE1p3-TnmDBuNvx_KxeCkoh7qZ_I8aM8fJ9AVHndBE-u91kaVEqkO0ZS7AxZijtl25IXbNZX_jtY-JD1dL05HIb4w4/s400/100359991_a9fbaeff9c_b.jpg&quot; height=&quot;296&quot; title=&quot;pile of puzzle pieces&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
With each puzzle piece slowly being discovered and placed, I am slowly exploring the available options for putting the puzzle together.&amp;nbsp; By identifying essential landmarks, I&#39;m defining boundaries that let me explore within a specific context without venturing too far into the weeds.&lt;br /&gt;
&lt;br /&gt;
Jigsaw puzzles are technically finite (there&#39;s only 1000 pieces in a box), but I wonder if there is still something to learn from puzzle building strategy when approaching a software design problem with theoretically infinite possibilities.&amp;nbsp; How can you quickly&lt;a href=&quot;https://www.neverletdown.net/2010/09/exploring-design-space.html&quot;&gt; explore the design space&lt;/a&gt; so that you focus your effort on the design decisions that matter most?&amp;nbsp; Is it possible to efficiently draw a boundary around the seemingly limitless design options&amp;nbsp;of a software system?&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Boxing in the Design Space&lt;/h3&gt;
This is the start of a workshop idea aimed at &quot;finding the corner pieces&quot; with the intent of developing a more systematic strategy for exploring the plethora of solutions that can exist within the design space.&amp;nbsp; I haven&#39;t tried this workshop yet, otherwise I would provide some specifics on facilitation and examples -- so if you try it out please let me know how it goes!&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Exercise&lt;/strong&gt;:&amp;nbsp;&amp;nbsp;Quickly and&amp;nbsp;collaboratively&amp;nbsp;create 4-5 designs that are built to the extreme for specific, desired system properties and still achieve required functionality.&amp;nbsp; The general idea is that you would work in pairs or small groups to &quot;turn the dial to 11&quot; on specific quality attributes.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Outcome&lt;/strong&gt;:&amp;nbsp; With these designs in hand (at least one per quality attribute) you now know what the outer edge of the design space will look like for any given property.&amp;nbsp; You cannot go beyond the extreme.&amp;nbsp; Your design lies somewhere in the middle as either a blended solution or some combination of boundary designs.&lt;br /&gt;
&lt;br /&gt;
This workshop has some possible key advantages.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;The outcome of this workshop should help define the furthest extremes, effectively creating a boundary around what is realistically possible.&lt;/li&gt;
&lt;li&gt;In some cases you&#39;ll be able to expose tension between designs and this tension will be more obvious because you have concrete examples demonstrating how some system properties conflict.&lt;/li&gt;
&lt;li&gt;At the same time you will likely have concrete examples of mutual promotion -- cases where the same design can promote different quality attributes.&lt;/li&gt;
&lt;li&gt;In addition to boundaries, the various designs created also enumerate some alternative branches that might be possible.&amp;nbsp; For example, by identifying tactics that satisfy a quality attribute.&lt;/li&gt;
&lt;/ul&gt;
There are also some possible disadvantages to this workshop, reasons why it might not work as hoped.&amp;nbsp; The biggest one is that in all likelihood, the best design is not a direct combination of &quot;best fits&quot; for system properties, but instead might be an altogether different design completely.&amp;nbsp; Gordon Glegg shares some poignant examples of this common phenomenon in his book&amp;nbsp;&quot;&lt;a href=&quot;http://www.amazon.com/gp/product/0521113202/ref=as_li_ss_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0521113202&amp;amp;linkCode=as2&amp;amp;tag=nevletdowdotn-20&quot;&gt;Selection of Design&lt;/a&gt;&quot;.&amp;nbsp; In his book, Glegg points to the evolution of the gas engine as an example in which revolutionary design was required to find a satisfactory solution - evolution or the naïve combination of &quot;best designs&quot; actually resulted in worse engine performance.&lt;br /&gt;
&lt;br /&gt;
So while this workshop may help to bound the design space, and in many problem&amp;nbsp;domains for software it will likely work extremely well, when revolutionary design is required other methods of exploration may be needed.</content><link rel='replies' type='application/atom+xml' href='http://www.neverletdown.net/feeds/5506166939230649351/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.neverletdown.net/2013/04/boxing-infinite-design-space.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/5506166939230649351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/5506166939230649351'/><link rel='alternate' type='text/html' href='http://www.neverletdown.net/2013/04/boxing-infinite-design-space.html' title='Boxing the Infinite Design Space'/><author><name>Michael</name><uri>http://www.blogger.com/profile/02649257003202319541</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhADU2BoytNXq2R6opPLat8RgtYyO15iWRPPvo9fCKsAXGIrd21w_QE1p3-TnmDBuNvx_KxeCkoh7qZ_I8aM8fJ9AVHndBE-u91kaVEqkO0ZS7AxZijtl25IXbNZX_jtY-JD1dL05HIb4w4/s72-c/100359991_a9fbaeff9c_b.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4097792925045582567.post-5444478289264712331</id><published>2013-03-13T09:00:00.000-04:00</published><updated>2015-03-04T14:08:44.873-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Software Architecture"/><title type='text'>Play Telephone with your Architecture Description</title><content type='html'>The game starts with a simple phrase.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;I heard that Sally ate nine cooked crabs and a plate of shoestring potatoes but later decided that eating crabs was wrong.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
You tell the next person, quietly so no one else can hear.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;I heard that Sally ate nine cooked crabs with a plate of shoestringed potatoes and decided eating crabs is wrong.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
And that person tells someone else.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Sally ate nine cooked crabs with shoestring potatoes and she thinks eating crabs is wrong.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Who tells someone else.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Sally ate nine cooked crabs with sho-shu potatoes and she tin cans wrong.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
And in theory, the last person hears the same message as the first person.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Ally ate nine crooked crabs with shoo-shoo potatoes and something about tin cans singing songs.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
But it almost never works out that way in practice.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;That&#39;s the &quot;Whisper Game&quot; or &quot;&lt;a href=&quot;http://en.wikipedia.org/wiki/Chinese_whispers&quot;&gt;Telephone&lt;/a&gt;&quot; as we called it growing up.&lt;br /&gt;
&lt;br /&gt;
You play the same game on software projects, especially when using lightweight design descriptions such as the &lt;a href=&quot;http://www.neverletdown.net/2011/08/guidelines-for-system-metaphor.html&quot;&gt;system metaphor&lt;/a&gt; or &lt;a href=&quot;http://www.neverletdown.net/2015/03/architecture-haiku.html&quot;&gt;architecture haiku&lt;/a&gt;. &amp;nbsp;These lightweight design descriptions are intended to be shared by way of an &lt;a href=&quot;http://www.sei.cmu.edu/library/abstracts/presentations/keeling-saturn2012.cfm&quot;&gt;architecture oral history&lt;/a&gt;. &amp;nbsp;They are supposed to be living representations of the design for the software system being built, passed directly from one developer to another.&lt;br /&gt;
&lt;br /&gt;
While playing Telephone with your system&#39;s architecture doesn&#39;t initially sound like a great idea, it&#39;s actually a really good thing. &amp;nbsp;Playing Telephone lets you know some important things about your team and the architecture of the system being built.&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Is your team aligned?&lt;/b&gt; &amp;nbsp;Ask any two teammates about a specific design decision. &amp;nbsp;If you get two different answers then you know your team is not&amp;nbsp;necessarily&amp;nbsp;on the same page. &amp;nbsp;A paper artifact can give the illusion of alignment while in reality the team may not all understand the architecture of the to be built system.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Have you explored all options?&lt;/b&gt;&amp;nbsp; Letting the design evolve as decisions are passed by word of mouth, from developer to developer, creates opportunities for exploring options. &amp;nbsp;Each time a developer tells the story of how the design satisfies specific properties desired in the system is a chance for uncovering new and better design decisions. This is an effective way to challenge assumptions and overcome bias when only a few individuals are directly involved in the design.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Does the design stand up to scrutiny?&lt;/b&gt;&amp;nbsp; &lt;a href=&quot;http://www.neverletdown.net/2009/11/groupthink-kills-big-ideas.html&quot;&gt;Sometimes individuals hold back when the only option is to raise concerns in front of a large group&lt;/a&gt;. &amp;nbsp;Bad design decisions that might go unchallenged in a larger group setting won&#39;t stand up to scrutiny among small groups of peers. &amp;nbsp;Pairs and threesomes can easily play devil&#39;s advocate without feeling the fool. &amp;nbsp;The result is a strong architecture that holds muster to real challenges, not just straw-man arguments.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Is everyone learning from the design?&lt;/b&gt;&amp;nbsp;A document can only describe a design in one way. &amp;nbsp;Allowing the architecture design to be described through story telling lets the story teller adapt the story to best meet the needs of their audience. &amp;nbsp;As a result, teammates learning about the design stand a better chance of learning and internalizing the key decisions they will be responsible for implementing.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Does everyone own the design?&lt;/b&gt;&amp;nbsp; A formal architecture description written on paper is really only owned by one or two people. &amp;nbsp;Whether this ownership is official or not, the authors of the document will know the design the best and have the greatest vested interest in ensuring that the architecture is&amp;nbsp;satisfied&amp;nbsp;according to their design. &amp;nbsp;Allowing the architecture design to be told and retold allows everyone to become an author. &amp;nbsp;Now everyone has a vested interest in achieving the design - everyone is an architect.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
Effectively communicating design decisions to a group of people is challenging. &amp;nbsp;Writing things down certainly has its advantages. &amp;nbsp;In reality, few individuals will take the time to read and&amp;nbsp;really&amp;nbsp;study an official architecture description anyway, so having a solid architecture oral history strategy is necessary for ensuring your team communicates and develops software as effectively as possible.&lt;br /&gt;
&lt;br /&gt;
Yes, the design will evolve as it is communicated informally from person to person. &amp;nbsp;But what is worse -- playing a game of Telephone with your architecture or playing with your architecture all by yourself?&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.neverletdown.net/feeds/5444478289264712331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.neverletdown.net/2013/03/play-telephone-with-your-architecture.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/5444478289264712331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/5444478289264712331'/><link rel='alternate' type='text/html' href='http://www.neverletdown.net/2013/03/play-telephone-with-your-architecture.html' title='Play Telephone with your Architecture Description'/><author><name>Michael</name><uri>http://www.blogger.com/profile/02649257003202319541</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4097792925045582567.post-397173203092221479</id><published>2013-02-26T08:00:00.000-05:00</published><updated>2013-11-29T22:04:56.468-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Software Architecture"/><category scheme="http://www.blogger.com/atom/ns#" term="Talks"/><title type='text'>High Ceremony Software Architecture Kills Collaboration</title><content type='html'>I was a panelist on the &quot;Architecture and Collaboration&quot; panel at the &lt;a href=&quot;http://www.sei.cmu.edu/saturn/2012/index.cfm&quot;&gt;SATURN 2012 conference in St. Petersburg, Florida&lt;/a&gt; this past May. For the panel I was asked to provide a single slide stating my position. This was my first time sitting on a panel and the first time I was ever required to have a clear &quot;position&quot; on a subject. It took a long time and a lot of thinking before I finally was able to A) understand what my own position was, B) have a position that would differentiate me from other panelists (we all by and large have the same opinions toward architecture and collaboration), and C) articulate it in such a way that I could fit it on one slide.&lt;br /&gt;
&lt;br /&gt;
My position was simple, clocking in at 4 words: &quot;High ceremony suffocates collaboration.&quot;&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
Assuming the &quot;voice of the outsider&quot; for the panel and representing an Agile perspective, I explained my position (out of nerves, somewhat poorly) at the start of the event. Staring at 150+ faces in the crowd, I could feel the shock, horror, and confusion from many in the audience at what I was proposing.&lt;br /&gt;
&lt;br /&gt;
My fellow panelists and the audience immediately pounced. &quot;What do you mean &#39;high ceremony suffocates&#39;,&quot; they cried, &quot;because the methods we use help us collaborate!&quot;&lt;br /&gt;
&lt;br /&gt;
We are &lt;a href=&quot;http://c2.com/cgi/wiki?HighCeremonyMethod&quot;&gt;surrounded by ceremony&lt;/a&gt; when it comes to software architecture. The vocabulary. The abstract concepts. The workshops and processes. The artifacts and documents. Some subset of these things is supposedly required for effective software architecture design. Formal checkpoints and documents are intended to improve a team&#39;s chances of building the right thing on time and on budget by promoting collaboration among teams and individuals. While some ceremony, like a common vocabulary and basic understanding of core concepts, is essential, sometimes the ceremony becomes the goal. As a result the things intended to help teams instead become blockers to effective communication.&lt;br /&gt;
&lt;br /&gt;
The high ceremony I&#39;m referring to are documentation, formal diagramming, multi-day workshops, &quot;holier than though&quot; arguments about vocabulary. These things can get in the way of effective communication and prevent true collaboration.&lt;br /&gt;
&lt;br /&gt;
Collaboration is the act of working with others to achieve a shared objective. In software architecture, collaboration is all about creating a shared understanding. Documents do not create understanding. Reviews and checkpoints are an act in absolution (&quot;blessing a design&quot;). Workshops are a means to an end, not the goal itself. It is tempting to assume that because a design is formally articulated or because everyone participated in a workshop that this is enough, that the team is all on the same page.&lt;br /&gt;
&lt;br /&gt;
From a collaboration perspective, the right methods are the ones that facilitate to most&lt;i&gt; interactions per second&lt;/i&gt; among teammates. This might be a document. It might also just be a whiteboard. Workshops are certainly helpful, though the right workshop for your team and situation may not necessarily be the one with the most rigorous engineering process.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;As architects we are the masters of ceremony.&lt;/b&gt; And this is a role of immense responsibility.&lt;br /&gt;
&lt;br /&gt;
If collaboration is your goal, do not choose high ceremony methods. High ceremony is not about collaboration but rather pontification.&lt;br /&gt;
&lt;br /&gt;
Overall the panel went extremely well. I successfully stirred up some controversy and started an excellent converstation. For that matter, the intelligent, lively discourse throughout the entire conference is a true reflection of the kinds of high quality software architects that attend SATURN. The &lt;a href=&quot;http://www.sei.cmu.edu/saturn/2013/&quot;&gt;SATURN 2013 conference will be held in Minneapolis, MN April 29 to May 3&lt;/a&gt; and the &lt;a href=&quot;http://www.sei.cmu.edu/saturn/2013/program/&quot;&gt;conference program&lt;/a&gt; looks to reflect the same high quality as last year. Mary Poppendiek, Scott Berkun, Stephan Murer and Pilippe Krutchen are all&amp;nbsp;&lt;a href=&quot;http://www.sei.cmu.edu/saturn/2013/keynotes-and-speakers/&quot;&gt;giving keynotes&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.neverletdown.net/feeds/397173203092221479/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.neverletdown.net/2013/02/high-ceremony-software-architecture-kills-collaboration.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/397173203092221479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/397173203092221479'/><link rel='alternate' type='text/html' href='http://www.neverletdown.net/2013/02/high-ceremony-software-architecture-kills-collaboration.html' title='High Ceremony Software Architecture Kills Collaboration'/><author><name>Michael</name><uri>http://www.blogger.com/profile/02649257003202319541</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4097792925045582567.post-5596456229661741467</id><published>2013-02-16T12:16:00.000-05:00</published><updated>2015-02-26T21:54:14.442-05:00</updated><title type='text'>Reflection on Past Essays and the Path Forward</title><content type='html'>After a few years of paid hosting, I’m moving my blog to Google Blogger.  When I first bought hosting I imagined all of the interesting, amazing web applications I could build.  Sure, I built a few things here and there, but over time the web evolved and the free tools available have improved greatly.&lt;br /&gt;
&lt;br /&gt;
As a part of the migration I moved all posts and comments, doing my best to keep everything as true to the original post as possible.  In the case of comments, I migrated the exact text you left along with your name and web address.  Unfortunately this means your gravatar ID verification will be lost and nothing will be connected to Google or Google+ IDs.  This really makes it obvious how difficult the whole idea of “identity” can be on the web. &amp;nbsp;If you see a problem, let me know and I&#39;ll fix it.&lt;br /&gt;
&lt;br /&gt;
You might also some notice some hiccups in the RSS feed (including a Twitter blast), and for that I apologize.  Though, maybe thanks to these hiccups you will take a few moments to read some past posts. I’ve had a good time re-reading old essays and seeing how much I’ve changed over the past few years.  And how much I’ve stayed the same.&lt;br /&gt;
&lt;br /&gt;
With this in mind, and with it being a new year, I thought this would be an excellent time to reflect on the trends and ideas I’ve written about over the past three years.  All told that’s about 40 essays worth of content.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Agile + Architecture.&lt;/b&gt;  Over the past two years I’ve really shifted focus almost exclusively to &lt;a href=&quot;http://www.neverletdown.net/search/label/Agile%20Software%20Development&quot;&gt;Agile software development&lt;/a&gt;, &lt;a href=&quot;http://www.neverletdown.net/search/label/Software%20Architecture&quot;&gt;software architecture&lt;/a&gt;, and what it takes to do a good job combining the two.  It seems like nearly everything I write beats around the bush of these two topics.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Too Abstract?&lt;/b&gt;  In some ways I’ve become less concrete and moved further from the “core” engineering practices.  I think some of this is a reflection of the world I live in currently contrasted with the world I lived in when I started this blog.  Let’s put it this way, it’s much more difficult to make a business case for hard core engineering practices when many of the teams I’ve worked with over the past four years seem to struggle with establishing a solid foundation.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Affordance Driven Process Design.&lt;/b&gt;  Applying affordances to process was sort of a weird idea&lt;a href=&quot;http://www.neverletdown.net/2010/03/identifying-process-affordances-nudging-toward-change.html&quot;&gt; at the time I first published about it in 2009&lt;/a&gt;.  Now I’ve developed a &lt;a href=&quot;http://www.neverletdown.net/2012/08/see-you-at-affordance-driven-process.html&quot;&gt;wildly successful workshop&lt;/a&gt; with &lt;a href=&quot;http://ariadna.font.cat/&quot;&gt;Ari Font&lt;/a&gt; that we presented at Agile2012 and Pitt Agile.  Our workshop gives folks concrete advice on how to use process affordances.  Plus, human behavior and cognitive science seem to be the hot new things in the Agile community these days.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Beef with Software Craftsmanship.&lt;/b&gt;  I had some &lt;a href=&quot;http://www.neverletdown.net/2009/08/software-craftsmanship-engineering-by-coincidence.html&quot;&gt;major beef with the Software Craftsmanship&lt;/a&gt; movement for a long time.  I thought the whole idea seemed kind of dumb.  And don’t get me wrong, parts of it still seem silly to me – the mentoring metaphors seem extremely presumptuous to me.  Even Luke Skywalker couldn’t declare himself a Jedi without Yoda first deciding he had passed his trials.  Luke was lucky that a 900 year old Yoda was still around to teach him valuable Jedi lessons.  &lt;b&gt;Sadly, most of us don’t have a Yoda – they’re extremely rare.&lt;/b&gt;  The craftsmanship mentoring approach seems like having a bunch of self-proclaimed Jedi running around picking up padawan as they please… and as Obi-Wan taught us it’s not that easy to mentor….  But I digress. &amp;nbsp;I had major beef with the Software Craftsmanship movement, but now I really get where they’re coming from.  I’m a little older.  A little more experienced.  I’ve seen a little more of the world and become a little wiser.  Craftsmanship is really about caring.  Caring is essential for awesomeness; even the founders of the CMM recognized this.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Labels are Boring: A Common Theme. &amp;nbsp;&lt;/b&gt;Speaking of craftsmanship, I’ve grown extremely tired of labels and how it seems to negatively affect folks’ thinking.  &lt;a href=&quot;http://www.neverletdown.net/2009/08/software-craftsmanship-engineering-by.html&quot;&gt;When Demarco published his “Software Engineering is Dead” article&lt;/a&gt;, I was starting my final semester of a Master in Software Engineering degree.  WTF, Demarco, why rock my world like that?  Software engineering is an idea who’s time has come and past, but so what?  It’s just a label for a way of thinking about the world of software development. &amp;nbsp;But, while I’ve tried to move on from labels, there is still a lot of power in labeling something. &amp;nbsp;Engineering.  Craftsmanship.  Agile.  Architecture.  None of them are really proper labels for the things they describe.  As a result it seems I move between the labeled things, trying to blend them together in ways that folks typically don’t try.  Knowing that I’m pulling ideas from a label is powerful – being bound to the label and letting it dictate my future is not.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;h4&gt;
The Future of this Blog&lt;/h4&gt;
&lt;br /&gt;
My original goal was to write, on average, &lt;a href=&quot;http://www.nngroup.com/articles/write-articles-not-blog-postings/&quot;&gt;one well-conceived essay each month&lt;/a&gt;.  Writing 40 essays over three years hits the average, though significantly tapering off over the past year and half as I have is dissatisfying and not in the spirit of what I set out to accomplish. While it is a little disappointing, at the same time I’ve increased my participation in the local and national software development communities, generating original papers and workshops.  This is certainly in the spirit of my intent here, though, these contributions have almost no public record here.&lt;br /&gt;
&lt;br /&gt;
There are a couple of things I’m pretty excited about trying to finish and flesh out.  Hopefully by making a public declaration of their existence, I will be likely to actually do it.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;I always intended for there to be a “part three” to my series on “&lt;a href=&quot;http://www.neverletdown.net/2010/09/exploring-design-space.html&quot;&gt;exploring the design space.&lt;/a&gt;”  This third essay was planned to unify the first two parts by describing a risk-based model for pruning a multi dimensional decision tree.  If that sounds a little odd, you can imagine why I haven’t circled back to complete it yet.&lt;/li&gt;
&lt;li&gt;I am sitting on a ton of original research coming out of Ari Font’s and my workshop on process affordances.  I think there are some interesting lessons and feedback waiting to be discovered here.&lt;/li&gt;
&lt;li&gt;I’d like to do more original research, no matter how “amateurish” and “practitioner-focused” it may be.  I miss writing about real software engineering practices.  &lt;a href=&quot;http://www.neverletdown.net/2010/06/lightweight-experiments-for-process-improvement.html&quot;&gt;My first published experience report was on using science and experimentation to understand and evolve process&lt;/a&gt;.  I should be taking my own advice on this one.&lt;/li&gt;
&lt;li&gt;I should write more code, not just prose.  Concepts are good.  Seeing more concepts in practice is better.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
So, was starting a blog a good idea?  I think so.  Seeing my thinking evolve over time has been fascinating.  And it seems that a few people have learned from my essays – or at least I’ve sparked a few ideas and inspired folks to think from different viewpoints about engineering software.  Critical thinking is challenging.  Writing thoughts down, satisfying.  Publishing them, kind of scary.  Reading them years later, fun.</content><link rel='replies' type='application/atom+xml' href='http://www.neverletdown.net/feeds/5596456229661741467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.neverletdown.net/2013/02/reflection-on-past-essays-and-path.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/5596456229661741467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/5596456229661741467'/><link rel='alternate' type='text/html' href='http://www.neverletdown.net/2013/02/reflection-on-past-essays-and-path.html' title='Reflection on Past Essays and the Path Forward'/><author><name>Michael</name><uri>http://www.blogger.com/profile/02649257003202319541</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4097792925045582567.post-6502439507859998813</id><published>2012-08-11T16:00:00.000-04:00</published><updated>2013-11-29T22:05:38.930-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Agile Software Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Process"/><title type='text'>See you at the Affordance-Driven Process Improvement Workshop at Agile2012</title><content type='html'>&lt;div style=&quot;background-color: #ffff99; font-size: 12pt; margin: 0 10px 10px 10px; padding: 10px;&quot;&gt;
Here’s an introduction to our workshop at Agile2012. This is going to be an entertinaing and educational mix of theory and practice on &lt;strong&gt;Wednesday, August 15 at 9:00am in Texas 3&lt;/strong&gt;. Learn what makes Agile tick and how to design the right process for your team! And please show your interest on the &lt;a href=&quot;http://agile2012.sched.org/event/c99fc0166b03b3dc192c37887067f31a&quot; target=&quot;new&quot;&gt;conference schedule&lt;/a&gt; or &lt;a href=&quot;https://twitter.com/intent/tweet?source=webclient&amp;amp;text=See+you+at+the+Affordance+Driven+Process+Improvement+workshop+at+%23Agile2012,+Wed+9AM+Texas+3+http://bit.ly/P1qixh&quot; target=&quot;new&quot;&gt;twitter&lt;/a&gt;!&lt;/div&gt;
&lt;br /&gt;
Why do the processes and practices we use in Agile software development work the way they do? How do you know when to apply one practice or technique over another?&lt;br /&gt;
&lt;br /&gt;
These are interesting and important questions for the software engineering community, but I&#39;m going to cheat a little and give my answer to you in the form of another question: &lt;strong&gt;What does an emergency exit, a urinal in the Amsterdam airport, and a burndown chart all have in common?&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
At first blush not much, but let&#39;s look at these artifacts from the perspective of an ecological psychologist. When an ecological psychologist sees these artifacts, he&#39;ll think about how they fit in with the environment around them and how the artifacts help or hurt the animals (humans in this case) in that environment. Each of these artifacts serves very specific functions, but what differentiates one door from another or one urinal from another is how those artifacts promote specific qualities valued by the humans that use them.&lt;br /&gt;
&lt;br /&gt;
Object designers might look at these artifacts from a different perspective still. Each of these things are specifically designed to achieve explicit reactions or cause a specific outcome from the people that interact with them. &amp;nbsp;This is no longer about survival or opportunity, but about directly influencing decision making.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://neverletdown.net/2010/03/identifying-process-affordances-nudging-toward-change.html&quot; title=&quot;Identifying Process Affordances: Nudging Toward Change&quot;&gt;Built into each one of these objects are affordances&lt;/a&gt;. An affordance is a perceivable object or idea that directly influences a person&#39;s thinking toward a specific action. Let me show you what I mean.&lt;br /&gt;
&lt;br /&gt;
Emergency exits are painted red and are opened by pushing a large horizontal beam on the door. Culturally, at least in the United States, red means &quot;warning&quot; and it is also very different from how other doors are painted. The horizontal beam looks like it was made for pushing the door outward to open it.&lt;br /&gt;
&lt;br /&gt;
&lt;img alt=&quot;Example of a Urinal Fly&quot; class=&quot;alignright&quot; height=&quot;261&quot; src=&quot;http://toiletmarksman.co.uk/image/cache/data/urinal-fly-sticker-500x373-500x373.jpg&quot; title=&quot;Example of a Urinal Fly&quot; width=&quot;350&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
The urinals in the Amsterdam airport aren&#39;t all that different from the ordinary urinal. Most guys know what to do when they see one. Though we know what to do, sometimes we have a difficult time, let&#39;s say, executing flawlessly, resulting in some spillage. A true annoyance to janitorial staff and fellow bathroom patrons. To encourage concentration and truer aim, &lt;a href=&quot;http://www.urinalfly.com/&quot;&gt;these urinals have a picture of a housefly etched into the bowl&lt;/a&gt;, near the drain. Urinal researchers (no joke, they exist) have shown that this fly etching encourages dudes to pee where they&#39;re supposed to anyway.&lt;br /&gt;
&lt;br /&gt;
Burndown charts are simple graphs that show a team&#39;s progression toward fulfilling a goal. Usually these charts will show simple things like the hours or points remaining in an iteration to achieve commitments. What&#39;s amazing is that such a simple chart can convey so much information and gently alter a team&#39;s behavior. Something as simple as the slope of a line can nudge behavior towards greater productivity, sustainability, or even predictability.&lt;br /&gt;
&lt;br /&gt;
Etchings of house flies, red doors, horizontal bars, the slope of a line -- these are all examples of affordances.&lt;br /&gt;
&lt;br /&gt;
Here&#39;s the cool thing, as I hope you have already picked up. &lt;a href=&quot;http://neverletdown.net/2009/03/process-affordances-ignore-at-your-own-peril.html&quot; title=&quot;Process Affordances: Ignore at your Peril&quot;&gt;Affordances are built into not just objects, but process too&lt;/a&gt;.&lt;strong&gt; The best processes are the ones that encourage your team to naturally do the right things at the right times.&lt;/strong&gt; Of course, amazing processes like this don&#39;t happen by accident; they are specifically designed to encourage desirable behavior while discouraging harmful&amp;nbsp;behavior. By carefully choosing the process&#39;s affordances -- practices or artifacts that direct our thinking toward a specific goal -- a team can tailor a process that makes success intuitive.&lt;br /&gt;
&lt;br /&gt;
This Wednesday morning (9:00am in Texas 3) at the Agile2012 conference, &lt;a href=&quot;http://ariadna.font.cat/2012/08/11/giving-2-workshops-at-agile-2012/&quot;&gt;Ariadna Font&lt;/a&gt; and I will be exploring these ideas and putting the theory to practice during our hands-on workshop, Affordance-Driven Process Improvement: Designing a Process that Works for your Team.&lt;br /&gt;
&lt;br /&gt;
The goal of this workshop is to not only introduce you to affordances for processes, but also to find true answers to the questions I asked at the beginning of this post: Why do the processes and practices we use in Agile software development work the way they do? How do you know when to apply one practice or technique over another?&lt;br /&gt;
&lt;br /&gt;
See you there!&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;http://agile2012.sched.org/event/c99fc0166b03b3dc192c37887067f31a&quot;&gt;&lt;img alt=&quot;I&#39;m speaking at Agile2012&quot; class=&quot;aligncenter&quot; height=&quot;131&quot; src=&quot;http://agile2012.agilealliance.org/files/7213/3581/3388/speaker_banner_392x131.png&quot; title=&quot;I&#39;m speaking at Agile2012&quot; width=&quot;392&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.neverletdown.net/feeds/6502439507859998813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.neverletdown.net/2012/08/see-you-at-affordance-driven-process.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/6502439507859998813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/6502439507859998813'/><link rel='alternate' type='text/html' href='http://www.neverletdown.net/2012/08/see-you-at-affordance-driven-process.html' title='See you at the Affordance-Driven Process Improvement Workshop at Agile2012'/><author><name>Michael</name><uri>http://www.blogger.com/profile/02649257003202319541</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4097792925045582567.post-2528327737438342149</id><published>2012-06-25T09:00:00.000-04:00</published><updated>2014-10-14T16:09:18.798-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Software Architecture"/><title type='text'>Scarce Resources: The Hidden Architectural Driver</title><content type='html'>All things equal, the difference between success and failure on a project will be determined by how well you understand and deal with the scarce resources.&lt;br /&gt;
&lt;blockquote&gt;
If a design, particularly a team design, is to have any conceptual integrity, one should name the scarce resource explicitly, track it publicly, control it firmly. – Fred Brooks, &quot;Inches, Ounces, Bits, Dollars – The Budgeted Resource,&quot; &lt;a href=&quot;http://www.amazon.com/gp/product/0201362988?ie=UTF8&amp;amp;tag=nevletdowdotn-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0201362988&quot;&gt;&lt;em&gt;The Design of Design&lt;/em&gt;&lt;/a&gt;&lt;/blockquote&gt;
Scarce resources are hard to come by and in high demand. They are the ones that, if they were to suddenly become unavailable, could threaten your ability to deliver promised functionality and quality on time and on budget. Of course, this could describe a lot of things on a lot of different projects. Calendar time, engineering hours, system memory, domain knowledge, number of calls to a web service, CPU time, money, time in a day, bandwidth, database queries – depending on the project, any one of these things could become scarce enough that you need to pay extra attention to how you deal with it. Nearly anything could become scarce.&lt;br /&gt;
&lt;br /&gt;
To make matters worse, scarce resources are moving targets and could change at any time. Different design decisions can make resources hard to come by or even free resources from scarcity, making things that were once scarce, plentiful. Architectural integrity demands constant vigilance from all team members.&lt;br /&gt;
&lt;br /&gt;
Though scarcity is rarely mentioned explicitly, scarce resources drive design decisions in the architecture of a system, as much as functional requirements, quality attributes, and technical and business constraints. Generally there are only 1 or 2 scarce resources on a project at any given time and you&#39;ll nearly always want to strictly budget and track the most limiting, most scarce resources you know about.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;h2&gt;
Planning for Scarcity&lt;/h2&gt;
To deal with scarce resources you must first identify them. The easiest way to uncover scarcity is with a little risk management. My personal preference is to make identifying scarcity a part of the team&#39;s regular continuous risk management routine. Combining the other architectural drivers with your team&#39;s threshold of success makes it easy to identify and prioritize risks that may influence the architecture. Looking for themes among the highest priority risks will uncover possible points of resource scarcity. Pay close attention to the technical and business constraints as well as quality attribute scenarios that seem especially difficult. These are areas where resources are likely to be scarce.&lt;br /&gt;
&lt;br /&gt;
Most of the times your gut is a good indicator, but translating your gut feelings into something you can talk about as a team is tough.&lt;br /&gt;
&lt;br /&gt;
Since resource scarcity evolves, it&#39;s not so important that you identify everything perfectly. It&#39;s much worse for you to do nothing than it is to measure and control the wrong things. Usually you&#39;ll need to identify some kind of a proxy that allows you to see and measure the scarce resource. And since scarcity tends to move around, it&#39;s ok (actually it&#39;s a great thing) if you refine your tracking and control methods as the project evolves. I&#39;ve found that dealing with scarce resources is more like horseshoes and hand grenades than it is brain surgery – as long as you&#39;re focusing on the right general area it&#39;s better to do something than abstain from action out of worries about a lack of precision.&lt;br /&gt;
&lt;br /&gt;
Looking for tension in quality attributes is another source good source for locating scarcity. Tension within the needs of a system is an indication that design decisions are experiencing influence from conflicting properties. Relieving this tension may not be possible, but understanding why it exists and managing scarcity around it is essential for satisfying all properties involved.&lt;br /&gt;
&lt;br /&gt;
Resource scarcity should be included in teams&#39; architecture discussions alongside functional requirements, quality attributes, technical constraints, and business constraints. How you choose to budget a scarce resource will influence how you design a system. Missing a scarce resource could create conflicts and prevent you from achieving specific qualities in your architecture.&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;
&lt;/h4&gt;
&lt;h4&gt;
&lt;/h4&gt;
&lt;h2&gt;
Examples of Scarcity&lt;/h2&gt;
Often times it&#39;s easy to get a feeling for where a scarce resource will probably be, but figuring out how to name, track, and control the resource explicitly can be much more challenging. In some projects, the scarce resource can be pretty obvious. In &quot;Ten Pounds in a Five-Pound Sack&quot; from The Mythical Man Month, Brooks talks about how storage (memory) was scarce in the design of the OS/360 and some of the lessons he learned when trying to budget that resource.&lt;br /&gt;
&lt;br /&gt;
From my own experience creating Velocity search applications with Vivisimo, CPU is nearly always a scarce resource. When it comes to quickly crawling and indexing vast amounts of data (on the order terabytes of data, millions of individual documents), CPU cores are always in high demand and seemingly short supply. Identifying processing capability as a scarce resource gives us the upper hand in designing the system. We know to ask pointed questions about how often data changes, how much lag time is acceptable until changes are reflected in the search index, and how long it takes to crawl a complete data set. Carefully scheduling crawls is one strategy we use to manage this scarce resource. We also spend time profiling crawl efficiency, especially how much time is necessary to prepare documents for indexing. Shaving just 50 milliseconds off the time required to crawl and index a document can shave over 2 days off the total crawl time for a data set of 4,000,000 documents. Knowing that CPU time is scarce, we know that we need to spend more time thinking about the design of the system with respect to this scarcity.&lt;br /&gt;
&lt;br /&gt;
Another great example can be found in &lt;a href=&quot;http://www.amazon.com/gp/product/0977784215/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=nevletdowdotn-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0977784215&quot;&gt;The Xbox360 Uncloaked&quot; a case study by Dean Takahashi&lt;/a&gt;. Scarce resources for the Xbox360 project included things like heat, the size of a silicon wafer (a proxy for a number of factors including performance, future earnings potential, and improved graphics quality), game developers&#39; mindshare, calendar time, and physical size of the box. Juggling these scarce resources was essential to the project&#39;s success.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
Practical Scarcity Management?&lt;/h2&gt;
While I understand that scarcity is an important and often overlooked architectural driver, I don&#39;t have any definitive concrete guidance for identifying and managing it other than the nuggets of advice based on my own experiences and the few examples that I have shared.  If these ideas resonate with you and you have more examples, please share them in the comments to help flesh this idea out further.</content><link rel='replies' type='application/atom+xml' href='http://www.neverletdown.net/feeds/2528327737438342149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.neverletdown.net/2012/06/scarce-resources-the-hidden-architectural-driver.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/2528327737438342149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/2528327737438342149'/><link rel='alternate' type='text/html' href='http://www.neverletdown.net/2012/06/scarce-resources-the-hidden-architectural-driver.html' title='Scarce Resources: The Hidden Architectural Driver'/><author><name>Michael</name><uri>http://www.blogger.com/profile/02649257003202319541</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4097792925045582567.post-973605645184662520</id><published>2012-05-18T09:00:00.000-04:00</published><updated>2013-11-29T22:07:43.385-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Agile Software Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Process"/><title type='text'>If you aren&#39;t Agile… Then what are you?</title><content type='html'>If you tell me you are an Agile team, I assume that you are following, or at least trying to follow, the values and principles outlined in the &lt;a href=&quot;http://agilemanifesto.org/&quot; title=&quot;Manifesto for Agile Software Development&quot;&gt;Agile Manifesto&lt;/a&gt;. And I can easily verify how true you are being to those values and principles and to what extent you are achieving agility pretty quickly. Usually a 5 minute conversation about your team is enough to know where you lay on the agile spectrum. The Agile Manifesto creates a sort of measuring stick against which you can evaluate the agility of a team.&lt;br /&gt;
&lt;br /&gt;
Even if your team isn&#39;t practically perfect, the values and principles from the Manifesto are your goal. I know that you are doing your best to embrace agility, but sometimes the real world gets in the way.&lt;br /&gt;
&lt;br /&gt;
While participating in the &quot;Architecture and Collaboration&quot; panel at &lt;a href=&quot;http://www.sei.cmu.edu/saturn/2012/&quot; title=&quot;Official Saturn Conference Website&quot;&gt;Saturn2012&lt;/a&gt;, Rick Kazman made an interesting comment that I let slide at the time. In response to the difficulty of getting stakeholders together to talk about architecture, Rick commented, in summary, &quot;It turns out this is pretty easy. We all have the same goals. People want to make the system work.&quot;&lt;br /&gt;
&lt;br /&gt;
This got me thinking about my development life, with and without Agile. Sure, everyone has the same goals – or do they?&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
The Agile teams on which I&#39;ve worked had a clear goal, a clear purpose – to deliver value to our customer in the form of working software, quickly and predictably. Every decision that we made, no matter whether we were stuck in the weeds of a difficult technical problem or discussing high level methodology concepts, was made with this goal in mind. It always comes back to the software and how our actions would affect our ability to help our customer.&lt;br /&gt;
&lt;br /&gt;
The teams on which I&#39;ve worked that were not Agile, on the other hand, have always felt rudderless in retrospect. We had the same general goal of delivering software, but the focus on value was lost somewhere. The end result was usually disastrous. Little or no focus on quality. Process was either non-existent, which made the team unpredictable and unreliable, or so onerous that it actually prevented effective work. Some of these teams had fallen into the trap of jumping on the agile buzzword bandwagon without truly believing the values. Others were simply ignorant of the ideas.&lt;br /&gt;
&lt;br /&gt;
On both the Agile and non-Agile teams, everyone did indeed have the same general goal of making the system work, as Rick pointed out. The teams that didn&#39;t actively embrace Agile ran into problems with &lt;em&gt;how&lt;/em&gt; they went about achieving that goal. Without a common set of core values guiding the team, team members lacked the tools necessary to reach the goal effectively. It was like knowing we wanted to go north but not having a compass to show everyone the way. One person would use the stars, others the sun, and still others the moss on a tree.&lt;br /&gt;
&lt;br /&gt;
The Agile Manifesto is a guide, a compass, a rough measuring stick, a rallying point for teams who want to build great software effectively. The Agile Manifesto for software development gives teams... attitude. And it&#39;s a flag for letting others know what your team stands for and how your team chooses to work.&lt;br /&gt;
&lt;br /&gt;
I&#39;m not saying your team is hopelessly lost if you don&#39;t subscribe to the ideas behind the Agile Manifesto. I&#39;ve been successful with and without practicing it. The difference between the teams that were successful and the teams that weren&#39;t, was that&lt;b&gt; the teams that were successful had a core set of common values uniting the team while we worked toward our goal&lt;/b&gt;. Embracing Agile&#39;s values and principles makes it easier to start this conversation and is a great starting point.&lt;br /&gt;
&lt;br /&gt;
The big problem is that most teams who aren&#39;t Agile don&#39;t bother thinking about this kind of stuff.&lt;br /&gt;
&lt;br /&gt;
Without a set of core values and principles, how the project ends up is anybody&#39;s guess. No guide, no compass, no measuring stick for understanding how well your process is working for your team. There is nothing for your team to rally around other than perhaps some corporate sayings or a strong personality on the team.&lt;br /&gt;
&lt;br /&gt;
So this begs the question. If you are not Agile... what are you?</content><link rel='replies' type='application/atom+xml' href='http://www.neverletdown.net/feeds/973605645184662520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.neverletdown.net/2012/05/if-you-arent-agile-then-what-are-you.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/973605645184662520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4097792925045582567/posts/default/973605645184662520'/><link rel='alternate' type='text/html' href='http://www.neverletdown.net/2012/05/if-you-arent-agile-then-what-are-you.html' title='If you aren&#39;t Agile… Then what are you?'/><author><name>Michael</name><uri>http://www.blogger.com/profile/02649257003202319541</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>