<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>scrum &#8211; Software, Fitness, and Gaming &#8211; Jesse Warden</title>
	<atom:link href="https://jessewarden.com/tag/scrum/feed" rel="self" type="application/rss+xml" />
	<link>https://jessewarden.com</link>
	<description>Software &#124; Fitness &#124; Gaming</description>
	<lastBuildDate>Fri, 29 Apr 2016 22:35:32 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://jessewarden.com/wp-content/uploads/2016/08/cropped-Lambda2-32x32.png</url>
	<title>scrum &#8211; Software, Fitness, and Gaming &#8211; Jesse Warden</title>
	<link>https://jessewarden.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Experiences in Managing Software Development Through Kanban &#038; Trello</title>
		<link>https://jessewarden.com/2016/04/experiences-in-managing-software-development-through-kanban-trello.html</link>
		
		<dc:creator><![CDATA[JesterXL]]></dc:creator>
		<pubDate>Sat, 16 Apr 2016 20:02:57 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[angular]]></category>
		<category><![CDATA[bdd]]></category>
		<category><![CDATA[behaviordrivendevelopment]]></category>
		<category><![CDATA[cucumber]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[gherkin]]></category>
		<category><![CDATA[kanban]]></category>
		<category><![CDATA[leadership]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[protractor]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[testdrivendevelopment]]></category>
		<category><![CDATA[trello]]></category>
		<category><![CDATA[unitests]]></category>
		<guid isPermaLink="false">http://jessewarden.com/?p=5112</guid>

					<description><![CDATA[Introduction On my last project, I managed a team developing an application to manage hospitality locations. Given our requirements were constantly in flux, the contracts were on a short cycle, and the team was generally new to enterprise software development, I chose a Kanban style approach to managing and delivering it. I wanted to share [&#8230;]]]></description>
										<content:encoded><![CDATA[<h1>Introduction</h1>
<p>On my last project, I managed a team developing an application to manage hospitality locations. Given our requirements were constantly in flux, the contracts were on a short cycle, and the team was generally new to enterprise software development, I chose a Kanban style approach to managing and delivering it. I wanted to share with you the rationale, methodology, challenges, and the surprising change to my role while on the project.<br />
<span id="more-5112"></span></p>
<h1>Why Kanban vs Scrum?</h1>
<p>Scrum has too many meetings, requires a well groomed backlog, and assumes senior developers so that they canÂ accurately task &amp; plan their stories.</p>
<h2>Junior to Mid-Level Team</h2>
<p>Given I was running my mid-level team in an Enterprise setting, I knew others would be more than happy to sabotage our teams productivity with meetings of their own. Part of the solution, not part of the problem. New team members, both onshore and offshore, who I expected to be reasonably cross functional whether they liked it or not, needed all the time they could to focus and learn quickly.</p>
<h2>No Solid Requirements</h2>
<p>Given staffing wasÂ changing bi-weekly with an my on-going effort to teach the Subject Matter Experts (SME&#8217;s) turned Business Analysts (BA&#8217;s) how to create properly groomed stories, there wasn&#8217;t anything the team could commit to within a reasonable timeframe. For example, it took us 8Â <a href="http://programmers.stackexchange.com/questions/176063/how-to-be-successful-at-bdd-specifications-workshops">workshops</a>Â over 3 weeks to get to a solid understanding of what we thought we were building.</p>
<h2>No CICD</h2>
<p>We also had no buildÂ nor <a href="https://en.wikipedia.org/wiki/DevOps">DevOps</a>Â in place to facilitate <a href="https://www.thoughtworks.com/continuous-integration">ContinuousÂ Integration</a> and <a href="https://www.thoughtworks.com/continuous-delivery">Continuous Delivery</a>.Â Thus we had no ability for weeks to deliver a working, high quality feature because there was no build to allow Developers &amp; Quality Assurance toÂ verify quality, nor server to deploy it to.</p>
<h2>No Roles, Just Fullstack / Cross Functional</h2>
<p>Having a <a href="https://www.mountaingoatsoftware.com/agile/scrum/product-owner">Product Owner</a> assumes you have someone either in Business, or who represents them, that knows what to build. The client asked us to use our expertise to help them out in true Consulting style.Â Thus there was no Product Owner.</p>
<p>There was no need for a <a href="http://whatis.techtarget.com/definition/scrum-master">Scrum Master</a>. <a href="https://www.mountaingoatsoftware.com/agile/scrum/sprint-planning-meeting">Sprint Planning</a>Â was pointless because we couldn&#8217;t plan 1 to 2 weeks in advanced since high level Epic&#8217;s were still beingÂ both defined, priced, and architecturally validated. ForÂ months. I already knew what the team was working on, and so did they, by their small Trello cards. If people had blockers, they asked me or the team over <a href="https://slack.com/">Slack</a> andÂ we collectively resolved it. There was no need for <a href="https://www.mountaingoatsoftware.com/agile/scrum/sprint-retrospective">Retrospectives</a> because there were no Sprints since things changed daily so you couldn&#8217;t effectively reflect on what happened the past week because it was ever changing.Â There were no roles beyond everyone coding the client, server, and some of the DevOps together.</p>
<p>Scrum would of beenÂ lot of ceremony with noÂ value.</p>
<h1>EnterÂ Kanban</h1>
<p>What <a href="https://www.atlassian.com/agile/kanban">Kanban</a> does well is allow you to change quickly, allow the team to be productive despite the chaos, with a continuous flow of delivering working software that&#8217;s in sharp contrast to the insanity outside their productive world. Unlike <a href="https://www.scrumalliance.org/community/articles/2014/july/scrum-vs-kanban">Scrum</a>, you much more quickly visualize the work going on &#8220;today&#8221; and identify problems sooner than later. Since the work in progress tends to be smaller, you can flush out bottlenecks in the process sooner. You can create <a href="http://leankit.com/learn/kanban/kanban-board-examples-for-development-and-operations/">swimlanes</a> and also identify which ones have bottlenecks.</p>
<h2>Flexible to Ever Changing Direction</h2>
<p>As each new day brought in new or modified requirements, role changes, and improved DevOps and API offerings, I wouldÂ changeÂ the Backlog to match &#8220;today&#8221;. Given we had no build, nor DevOps starting from scratch, I had a lot of flexibility to inject more build specific tasks so as to keep away from <a href="http://martinfowler.com/bliki/Yagni.html">Yagni</a>Â until we got a solid enough user story. &#8220;No user stories, nor API? No problem, get <a href="https://mochajs.org/">Mocha</a> working with our <a href="https://nodejs.org/en/">Node</a> code.&#8221; I&#8217;d attempt to stay 1 to 4 days ahead of my team. This was to ensure they were working on what I knew at the time to be real and providing client &amp; user value.</p>
<h2>Productive Despite Chaos</h2>
<p>Politically, it helped ensure we were being productive and thus visually showing we&#8217;re using the client&#8217;s money effectively with the fast ability to change course if they wanted something changed faster than aÂ Scrum Sprint would typically allow. This happened often.</p>
<h2>Learning the Team&#8217;s Strengths, Weaknesses, and Desires</h2>
<p>I had a new, junior to mid-level Development team and QA team, on a greenfieldÂ client (meaning no existing infrastructure or code), with ever changingÂ requirements, staffing, and contract lengths. Since the team was new and learning the entire <a href="https://en.wikipedia.org/wiki/Systems_development_life_cycle">Software Development Lifecycle</a> whilst me doing my best to shield them from politics, lack of a CICD process,Â lack of requirements, and nothing pre-built for them via <a href="http://yeoman.io/">Yeoman</a> generators / starter projects&#8230; I knew things would be slow and unpredictable at first.</p>
<p>What I didn&#8217;t know was the team. I didn&#8217;tÂ know their strengths, weaknesses, and most importantly, desires. Happy developers are productive developers. A lot of people say they are <a href="http://andyshora.com/full-stack-developers.html">fullstack</a> to ensure they are employable or because they are insecure that their speciality skill set cannot stand on it&#8217;s own. That or they like working in smaller, more cross functional groups.</p>
<p>As much as I expected the team to touch all parts of the development stack, including myself, you always have people who naturally gravitate somewhere, or like to be pushed to a particular area like API&#8217;s, services, components, or build level tasks. This should be encouraged just as much as being cross functional to get the most out of them, and the team. Additionally, as the project matures, you have less of a need to be cross functional as often, and tend to see people dive deep over time.</p>
<h1>Creating Tasks in Trello</h1>
<p>I also didn&#8217;t know the team&#8217;s ability to estimate their own tasks. It didn&#8217;t matter since the user stories weren&#8217;t defined enough for them to do so. Thus, I broke all tasks down for the team and included additional DevOpsÂ and QAÂ tasks as well into small units. We used <a href="https://trello.com/">Trello</a>, a real-time collaborative project board full of cards, to keep track of the work.</p>
<p>We had 6 columns in our Trello board, from left to right:</p>
<ol>
<li><strong>Bulletin Board</strong>: All the documents &amp; images for our project</li>
<li><strong>Undefined</strong>: Stories &amp; Tasks I didn&#8217;t have enough clarity on for the team to work on.</li>
<li><strong>Defined</strong>: Tasks I fleshed out enough toÂ ensure anyone on the team could work on with clearly defined success criteria, easily merged into a <a href="https://github.com/">Github</a> <a href="https://help.github.com/articles/using-pull-requests/">Pull Request</a>, and colored with the swimlane it belonged to: Testing, Client UI, Node API, DevOps, and <a href="https://en.wikipedia.org/wiki/User_experience_design">UX</a>.</li>
<li><strong>Working On It</strong>: What tasks were being actively worked on in the team. I ensured only 1 card per developer</li>
<li><strong>Done</strong>: For tasks that were done and developer tested, but not QA approved via them manually testing the Card&#8217;s associated PR.</li>
<li><strong>Approved</strong>: QA approved PR&#8217;s that merged into the dev branch and deployed via <a href="https://jenkins.io/">Jenkins</a> <a href="https://www.docker.com/">Docker</a> build.</li>
</ol>
<p><img fetchpriority="high" decoding="async" class="alignnone size-full wp-image-5113" src="http://jessewarden.com/wp-content/uploads/2016/04/trello-board.png" alt="trello-board" width="720" height="456" srcset="https://jessewarden.com/wp-content/uploads/2016/04/trello-board.png 720w, https://jessewarden.com/wp-content/uploads/2016/04/trello-board-300x190.png 300w" sizes="(max-width: 720px) 100vw, 720px" /></p>
<h2>Observe the Flow of Development&#8230;</h2>
<p>What happened next sold me on one of the key strengths of Kanban.</p>
<p>Every day I could immediately see problems. Instantly. It happened just like <a href="https://www.linkedin.com/in/andrea-ross-csm-sa-0a056b3b">Andrea Ross</a> <a href="http://jessewarden.com/2013/08/kanban-paper-airplane-factory.html">said it would</a>, and I&#8217;d see where bottlenecks were in the process. Each column in Trello would suddenly get overflowed with cards. You could be near blind, simply squint at the board so you couldn&#8217;t actually read anything and STILL SEE IT. The size of the columns told all: you have a bottleneck somewhere here.</p>
<p>It&#8217;s called <a href="https://stefanroock.wordpress.com/2010/03/02/kanban-definition-of-lead-time-and-cycle-time/">Cycle Time</a>: how long a piece of work goes from left to right. You want toÂ ensure once cards are created, they speed from Undefined to Accepted (left to right, start to finish) as quickly as possible. Typically that process isn&#8217;t linear; SOMEWHERE in the journey there is always a bottleneck.</p>
<h2>&#8230; Adjust as Necessary</h2>
<h3>How do I know I&#8217;m done?</h3>
<p>The first one was the success criteria I gave wasn&#8217;t clear enough. 90% ofÂ my created cards in Defined were moved back to Undefined by the team. Once I gave better success criteria, the development team started to chew through them. I wouldn&#8217;t hear from them for hours, then cards would suddenly start piling up in the Done column w/PR&#8217;s to boot.</p>
<h3>What does the UI look like?</h3>
<p>The second one was lack of good <a href="https://en.wikipedia.org/wiki/Website_wireframe">wireframes</a> and <a href="http://graphicdesign.stackexchange.com/questions/30860/what-is-the-difference-between-wireframes-and-mockups">designs</a> to illustrate both the layout and interactions of how the UI worked. We didn&#8217;t yet have budget for a UX resource, so I spent the time myselfÂ building low fidelity wireframes that were as accurate as possible and then creating design comps matching our <a href="https://www.google.com/design/spec/material-design/introduction.html">Material Design</a>Â style guide. I ensured all new cards had relevant design artifacts attached. If the wireframe/design comp changed, I&#8217;d move the card from Defined back to Undefined to ensure the team didn&#8217;t touch it. If it was too late, I&#8217;d create an iteration card to modify an existing piece of work with the updated UI/functionality change.</p>
<h3>How do I test itÂ works?</h3>
<p>The third one was the inability for QA to test functionality as cards started piling up in the Done column. QA didn&#8217;t yet have the build running locally, nor a QA environment to test on, nor a set of tools to help them automate it, nor a lead to help mentor them towards this.</p>
<p>So I picked up the torch, implemented <a href="http://www.protractortest.org">Angular&#8217;s Protractor</a> with theÂ <a href="https://github.com/mattfritz/protractor-cucumber-framework">Cucumber</a> version, then had a team member get an actual working feature through <a href="http://gulpjs.com/">Gulp</a>. I then worked with the QA team and BA&#8217;s to help define better Cucumber features through workshops so they were easier to test. I attached these as additional artifacts to each card where applicable.</p>
<p>Finally, we started Dockerizing our build to use throughÂ <a href="https://kitematic.com/">Kitematic</a> &amp; <a href="https://hub.docker.com/">DockerHub</a>.Â Given how hard it was to get <a href="http://redis.io/">Redis</a> + Node working the same between the Developer&#8217;s Macs and the QA&#8217;sÂ Windows machines with various lack of admin rights, this helped ensure things actually worked, quickly, without debugging install or configuration issues.</p>
<h3>Continually Improve</h3>
<p>This process never stopped. Sometimes it was smallÂ bottlenecks or even just blockers and we&#8217;d do our best to improve the process.Â Despite the politics, climate of unknowing, and constant readjustment of requirements &amp; processes&#8230; it felt good to be making both progress and improving the process.</p>
<p>Developers got to zone out by donningÂ headphonesÂ toÂ jam on code all day. Working codeÂ continually emerged as long as I fed this process.</p>
<p>We almost got to the point where the developers had no clue about the ever changing conditions on the ground with the client, ignored it when I brought it up, and focused strictly on questions about specific tasks. I&#8217;d call that a process win.</p>
<h1>Challenges</h1>
<p>It wasn&#8217;t all rose colored glasses.</p>
<h2>The Importance of Good, Upfront DevOps</h2>
<p>The main pain point throughout the entire process was our DevOps starting late in the cycle. Without a good CICD process, Scrum and Kanban don&#8217;t really seem to work all that well in tracking &#8220;actual work&#8221; because no actual work&#8230; works. Now, the CIÂ portion we knocked out of the park ourselves and quickly while waiting for confirmed requirements using Github and Jenkins in Docker + <a href="https://aws.amazon.com/">AWS</a>. Mostly. The CD, however, took awhile.</p>
<p>What we wanted at first was once a PR was approved, the code would, after a successful Jenkins build, deploy a Docker container of our code to a publicly accessible Amazon Web Service (AWS) instance. It took us about 3 months to get that going given our resource constraints &amp; timing. In the interim, we did a lot of <a href="https://en.wikipedia.org/wiki/Mock_object">mocks</a> and testing on localhost with <a href="https://ngrok.com/">ngrok</a> for demos.</p>
<p>Once our Docker deployment was working we started having code be deployed without our knowledge in a good way; the development teamÂ just focused on completing cards, and eventually the QA would focus on verifying manually what made it through the automated QA process to the server matched up.</p>
<p>The latter took forever simply because I was stretched too thin running the Development team, helping the DevOps team, doing my own wireframes and design comps, mentoring the BA&#8217;s to writeÂ awesome user stories via <a href="https://dannorth.net/introducing-bdd/">Behavioral Driven Development</a> to minimize our story grooming sessions, and keeping Senior Management in the loop.</p>
<p>Even with Analysts starting the DevOps, it&#8217;s clear having them full time on that endeavor payed off big time. In the future, I&#8217;m curious if I&#8217;d rather focus on that full time myself since it seems to have the largest, cross team impact regardless of whether the requirements, UX, and CIÂ are in a good or bad spot.</p>
<h2>Wireframing &amp; Designing at the Same Time vs. Staggered</h2>
<p>While me being the same person to do the wireframes made it easier to build design comps around them, it simnifically reduced the time I could spend with other teams.Â When the Undefined column would get too full, I&#8217;d have to spend the early part of the week ensuring I had enough information to wireframe. I&#8217;d then spend the weekend onÂ the design comps and then break them down into easily tackled, small PR tasks in Trello. This wasn&#8217;t sustainable and I knew it, but was banking on getting budget for UX resources.</p>
<p>While I was helping the BA&#8217;s, Development Team, and QA by ensuring the stories had a visual component toÂ help ensure we&#8217;re all on the same page of what theÂ user story looked like, I&#8217;d end up neglecting other things like refining those very stories, not unblocking the development team when they&#8217;d get stuck on build or architecture issues, nor helping push the DevOps team to help the QA do their job.</p>
<p>Rather than complain, I made a daily tactical call on what to focus on based on what Trello was telling me. Once we got the UX resourceÂ onboard, he worked aside the BA&#8217;s and that helped a ton; at that point I could just match the design comps to his wireframes, cutting my work in half + his were of insanely higher quality for talent &amp; focus reasons.</p>
<p>What this tells me is that unless I have a huge backlog of build and DevOps work in the pipeline, I&#8217;ll be hard pressed in the future to keep my development team busy with those tasks for a long timeÂ without quickly needing a proper UX team member(s).</p>
<h2>QA in Lean Engineering</h2>
<p>I didn&#8217;t have enough seniors to delegate management tasks to, and coupled with my CD problems, IÂ struggled to keep QA productive. While our developers were using <a href="http://eslint.org/">linting</a> <a href="https://www.typescriptlang.org/">compilers</a>, <a href="https://github.com/vigetlabs/grunt-complexity">complexity metrics</a>, unit and integration testing with <a href="https://www.youtube.com/watch?v=o6KSOs-N75o">end to end testing</a>, no one was laser focused on improving the latter part of the QA CD pipeline. I&#8217;d made some headway in getting QA involved in the beginning to help contribute to ensuring good user stories came out of our workshops. Where I struggledÂ was giving them enough of my time to teach them basic JavaScript coding, DevOps, and helping them walk through their testing plans on what we did have to start to develop a cadence.</p>
<p>A lot of this was we just didn&#8217;t have that much to test yet and the other was&#8230; well, nothing. I did the best I could working insane hours. If I were to do it again, I&#8217;d assign a senior dev interested in furthering their testing &amp; DevOps chops to work with them on owning the CD process, and ensuring a good quality pipeline.</p>
<p>In Lean Engineering, QA is no longer thrown code to test weeks or months later. Instead, they are brought into the beginning of the process and the end to improve the entire pipeline. You can&#8217;t do that if you don&#8217;t have a DevOps pipeline.</p>
<h2>User Feedback</h2>
<p>The same problem I had with QA I had with user feedback. Part ofÂ Lean engineering with Kanban is continuously improve not just the process, but the software. You do this by giving the working build to a user, testing it, and taking their feedback BACK into the process. While doing wireframes, I did informal and adhoc user interviews, created basic <a href="https://www.smashingmagazine.com/2014/08/a-closer-look-at-personas-part-1/">Persona&#8217;s</a> to differentiate who we were targeting, but did not get to validate this with released software until late in the cycle.</p>
<p>This actually wasn&#8217;t much of a bad thing, but rather, a challenge because a working build didn&#8217;t emerge until much later in the cycle, so we just did localhost demo&#8217;s &amp; testing vs. &#8220;use whatever device you have on your person or will use in your job&#8221;. I had already had extensive, informal discussions with the target users and really liked them as people. It just came up when I&#8217;d look at swimlanes via colors in Trello cards, the features had a huge cycle time in knowing if they were valid or not from user testing.</p>
<h1>Role Changes</h1>
<p>Traditionally in Agile, I&#8217;ve found I do most of my management efforts on Sprint Planning and post Retrospective. I ensure the requirements are rock solid and follow up on loose ends, and take action items seriously during retrospectives where new things need to be implemented or changed. The rest of the time I architect, pair program, and code.</p>
<p>In Kanban, it was very different. My role, daily, was to manage away problems for the team. Instead of a weekly or bi-weekly discovery, this was daily to hourly. I&#8217;d adjust based on what Trello was telling me. It gave me a greater insight into how my management efforts positively and negatively affected the team.</p>
<p>I also liked continually working with the team to improve our process. I&#8217;ve done that before in teams with Scrum, but process improvement usually fell behind &#8220;getting my story done&#8221; in terms of priority. In Kanban, fixing the bottleneck and improvingÂ the process is the priority.</p>
<p>I&#8217;ve found I really like Kanban. The consulting world is full of extremely hard software problems surrounded by politics and chaos. I love thoseÂ aspectsÂ and Kanban is now my tool of choice for managing teams within it.</p>
<h1>Citations</h1>
<p>I wanted to thank <a href="http://joelhooks.com/">Joel Hooks</a> forÂ telling me about Kanban being an alternative to ScrumÂ years ago. If Joel likes something, I typically trust his judgement that it must be good.</p>
<p>Also thanks to my manager, <a href="https://www.linkedin.com/in/mlancast">Matt Lancaster</a>, for teaching me about Lean engineering processes. You can see him speak about the processÂ below.</p>
<p><iframe src="https://www.youtube.com/embed/q2eyhFVWuKY" width="640" height="360" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<p>Thanks to <a href="https://www.linkedin.com/in/eric-motazedi-648a0490">Eric Motazedi</a>Â for teaching me about BDD and why <a href="http://programmers.stackexchange.com/questions/176063/how-to-be-successful-at-bdd-specifications-workshops">workshops</a> are so important.</p>
<p>FinallyÂ thanks to the Richmond <a href="http://www.meetup.com/Capital-Kanban/">Capital Kanban</a> group for teaching me more about how <a href="http://jessewarden.com/2013/08/kanban-paper-airplane-factory.html">Kanban works</a>.</p>
<p>&nbsp;</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Kanban Paper Airplane Factory</title>
		<link>https://jessewarden.com/2013/08/kanban-paper-airplane-factory.html</link>
		
		<dc:creator><![CDATA[JesterXL]]></dc:creator>
		<pubDate>Sat, 10 Aug 2013 15:19:37 +0000</pubDate>
				<category><![CDATA[Business Process]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[airplane]]></category>
		<category><![CDATA[factory]]></category>
		<category><![CDATA[kanban]]></category>
		<category><![CDATA[paper]]></category>
		<category><![CDATA[project management]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[sixsigma]]></category>
		<guid isPermaLink="false">http://jessewarden.com/?p=4307</guid>

					<description><![CDATA[I went to the local Capital Kanban meetup yesterday evening. It was a bunch of Project Managers discussing Kanban and waste in IT. Seemed completely out of my comfort zone and a way to meet new people in tech here in town so I attended. It turned out to be really cool and way more [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I went to the local <a href="http://www.meetup.com/Capital-Kanban/">Capital Kanban</a> meetup yesterday evening. It was a bunch of Project Managers discussing <a href="http://en.wikipedia.org/wiki/Kanban_(development)">Kanban</a> and waste in IT. Seemed completely out of my comfort zone and a way to meet new people in tech here in town so I attended. It turned out to be really cool and way more interesting than my expectations were. I wanted to mention some of those here, specifically some of the IT wastes that were mentioned I see all the time, the insights I got from the paper airplane factory game, and some after meeting talk that changed my perspective on what I perceive as problems in our industry with good software east of California (hah, trick question, there IS no good software done east of California&#8230;).</p>
<p><span id="more-4307"></span><strong>IT Wastes</strong></p>
<p>Andrea Ross did a presentation about waste in IT. Kanban, the production process used by Toyota then turned into a Project Management and Software Development, has 7 or 8 forms of what it calls waste. These are primarely in the factory line production process, so you have to draw your own metaphors and similes, and that&#8217;s what Andrea&#8217;s presentation extrapolated on.</p>
<p>From a high level, these are:</p>
<ul>
<li>Defects / Rework</li>
<li>Overproduction</li>
<li>Waiting</li>
<li>Non-Standard Over Processing</li>
<li>Transportation / Logistics</li>
<li>Intellect</li>
<li>Motion</li>
<li>Excess Inventory</li>
</ul>
<p>Her slides that have bullet point examples for each one are pretty self-explanatory. What was interesting to me was the sheer volume of bullet points I see all the time, together, in the same projects I work on. Some can&#8217;t be avoided, nature of the business and all that. Still, it was pretty eye opening to see that a traditional Factory Production process has identified these items as the core waste items, and software development has plenty of them with just about the same meanings. I won&#8217;t cover them in detail here as her slides do.</p>
<p><strong>Kanban, Bottlenecks, and Waste</strong></p>
<p>The concept of Kanban is to quickly identify bottlenecks in the existing production process, and iterate to improve the process to fix them.</p>
<p>Notice I said &#8220;existing&#8221; and &#8220;process&#8221;. The existing part is where Kanban has been easier to market than say <a href="http://en.wikipedia.org/wiki/Six_Sigma">Six Sigma </a>which is bought into wholesale, hence why it&#8217;s easier to be a Six Sigma consultant than a Kanban one. Kanban you basically overlay on top of what you have and it surfaces the problems your existing process has pretty clearly. Meaning, if you see a bunch of cards on a Kanban board that are in the &#8220;Analysis&#8221; column, and very few in the rest, it&#8217;s pretty clear where the bottle neck is located.</p>
<p>Now the &#8220;process&#8221; part is analogous to the production line; in this case all that goes into making software from the traditional waterfall perspective: design, development, deployment. However, the key here is you aren&#8217;t fixing the &#8220;bottleneck&#8221;, but rather the process itself. That is what I learned through our Paper Airplane Factory exercise quite clearly. There are a series of games like this that can be modified, but the point is they help teach the bottleneck vs. process modification process extremely clearly.</p>
<p>The key takeaway for me was fixing the bottleneck, like the 5 developers + 1 manager in a war room during a troubling moment during a software project, is actually a form of waste. Yes, it&#8217;s great teams rise up to tackle these problems in the moment. However, it&#8217;s important to note that it&#8217;s the Project Manager&#8217;s job to both recognize this as waste and fix the actual process problem. I&#8217;ll explain this below.</p>
<p>Note: If you&#8217;re concerned about spoilers, please be aware of 2 things. First, there are more than just the airplane factory game that you can find online. Second, if you do read the following section and later participate in the exercise, please either let the teacher/presenter know, or try not to modify the process too much to allow others to learn.</p>
<p><strong>Airplane Factory</strong></p>
<p>The game is like so (abridged version, you can find the <a href="http://www.teachengineering.org/view_activity.php?url=collection/wst_/activities/wst_kanban/wst_kanban_activity1.xml">full instructions here</a>):</p>
<ol>
<li>Divide your people into 4 groups, each sitting adjacent to each other. Circle or semi-circular seating arrangements works best to encourage intentional bottleneck adjustment engagement.</li>
<li>Cut up the airplane folding instructions alone the designated lines.</li>
<li>Give the first part of the instructions to the first group in the line. Give the second part of the instructions to the second group, and repeat on down the line. Some people may not necessarily have designated jobs beyond passing papers, etc. This is intentional to illustrate the intellect waste of not using human IP&#8230; and also to note how they&#8217;ll often become efficient passers, helpers, or even QA.</li>
<li>Ensure the group/person who&#8217;s last in line is aware of how far the plane must fly as a metric of defining a successful plane.</li>
<li>Setup a 5 minute timer, start it, and yell &#8220;Go!&#8221;</li>
<li>After 5 minutes, identify how many successfully flown airplanes were made as well as how much waste (crumpled papers, non-flying planes, etc) were created. That&#8217;s the round 1 score.</li>
<li>Iterate.</li>
</ol>
<p>The iterate step is where you reflect on what just happened and attempt to modify the process. I&#8217;ll go over how ours went down so you get an idea.</p>
<p><strong>Round 1</strong></p>
<p><strong>Line Setup</strong>: We had 8 people in our line. Round 1, we had 1 lady do the half fold, the 2nd guy do the additional 2 folds + paper sides cut, Andrea and I pass the paper to our left, another lady handle the 1st wing folds, and a gentleman at the end to make the wings and throw it. Our last person was a lady who handled QA and scoring.</p>
<p><strong>Process</strong>: Very quickly we had a bottleneck with the lady at my stations left. The instructions weren&#8217;t very clear and she struggled to learn how to do the first one. Both Andrea and I quickly went to help; Andrea attempting to do it with her, me taking a picture of the instructions with my iPhone, and attempting to duplicate at my desk while ensuring I kept passing the planes to my left into an ever growing pile.</p>
<p>Once I figured it out (I had actually built the exact same plane last week for my daughters birthday present which has an electronic propeller you attach), I told the ladies to ignore the &#8220;requirements&#8221; as they were crap and I walked them through how to successfully complete their step. I then quickly returned to my desk which had a pile of unmoved inventory.</p>
<p>The only person who didn&#8217;t struggle with their assembly was the 1st in the line who had to fold paper in half.</p>
<p>I believe we ended up with 2 planes and 1 waste.</p>
<p><strong>Takeaway</strong>: Our teacher quickly pointed how we went &#8220;downstream&#8221; to fix the production line process. This is a reactionary, and completely normal mode, to fix production line problems. It&#8217;s also wrong. You&#8217;re supposed to identify the upstream problem causing it and fix that. Additionally, we didn&#8217;t stop the line to ensure we fixed this problem first before continuing, also wrong. Car companies like Toyota do this via a chain that&#8217;s pulled to stop the line so they can ensure the problem is resolved. Sometimes they even take part of their line off the main line to ensure things keep moving.</p>
<p>As a side note, apparently GM used to keep going. Door doesn&#8217;t fit right? Keep going; jam the mofo on there. They&#8217;d end up with a lot full of cars pretty quickly&#8230; even if they were low quality. Ford was similar, but they&#8217;d ensure the cars were actually sold first before they sold them, thus not resulting in lots full of inventory they couldn&#8217;t sell like GM&#8230; even if the quality of pre-sold cars was still low.</p>
<p>We also noted various other problems such as no training in each plane&#8217;s building instructions, no one stopping if the station after them go overwhelmed with their ever growing stack, and sometimes idle resources (people with not much to do).</p>
<p><strong>Round 2</strong></p>
<p><strong>Improvements</strong>: First, the teacher actually implemented designated stack areas with a piece of paper on each station, and then wrote a number on the paper; this was the max amount of completed planes you could place for the next station to build so you didn&#8217;t exacerbate a bottleneck.</p>
<p>Second, I become a designated passer to my left while my partner moved to the left station to have a 2 women team doing the complicated folding.</p>
<p><strong>Process</strong>: My job was pretty easy; pass, and ensure I don&#8217;t bottleneck it. Every single station was faster since they had practiced their portion. The guy to my right had actually done his first 3 paper cuts wrong in round 1 which caused confusion to my left station, but had it down pat in round 2. The last station still experimented with various angles of folding to see how far the plane could actually fly. We actually had the last women in the line, QA, send a messed up plane back through the line as an unfolded piece of paper because it didn&#8217;t fly right; w00t, less waste!</p>
<p>A bottleneck, again, formed to my left, but the girls found a way to divide up the 2 step process between them to be more efficient. As our 5 minutes progressed, they got faster and eventually started making progress on the backlog.</p>
<p>We made 5 planes, 1 waste.</p>
<p><strong>Takeaway</strong>: We built 4 planes with 1 waste. The first person, as usual, was too fast. The guy to my right had an inefficient process because he&#8217;d have to fold, pick up the scissors, cut, then put &#8217;em down again. We had all abandoned our airplane instructions by this point.</p>
<p><strong>Round 3</strong></p>
<p><strong>Improvements</strong>:Â Everything else was fine, so we decided to give me the cutting job and the guy to my right would just fold. The girls to my left on-the-fly modification was good and we kept it.</p>
<p><strong>Process</strong>: My first 3 were slow, but once I practiced, I was uber fast and we were humming. The girls to my left were killing it. I managed to keep my right stack always below or at 2 in the pile. Very quickly it became apparent the 1st person was too fast; she was constantly folding and then waiting before she was allowed to make another.</p>
<p>We made 8 airplanes, no waste.</p>
<p><strong>Takeaway</strong>: Those of with spouses were already getting texted like mad to leave, but we all WANTED to see Round 3 succeed better than 2, and see if we made the process perfect. We didn&#8217;t; it went the complete opposite direction to the front of the line needing minor modifications. Overall, though, our output increased a lot, our waste went down, and it was very clear that the adjustments we made + the teachers maximum stack amounts were working well.</p>
<p><strong>My Overall Takeaways</strong></p>
<p>I went to this meeting to both meet new people in town to network with as well as to get out of my comfort zone. I find when I do the latter, I learn a lot and sometimes get a new perspective. It gave me a new appreciation for Project Managers who have not just 1, but 5 projects they have to manage to make an attempt to do this on. This also assumes they get enough time to really learn about each teams issues, where those bottlenecks are, and what the best ways are to address them. NOT by just fixing the bottlenecks, but by fixing the process itself, ensuring stop guards are in place not as many items/cards in a column, etc.</p>
<p>It also made me intimately aware of how I, as a consultant, immediately want to fix the bottleneck, and have learned ways (such as the war room) to solve them&#8230; when in reality, it&#8217;s a PM issue for a greater process problem. The other thing that makes it more complex is the whole &#8220;all things being equal&#8221;. For example, a Kanban board a PM would use on the whole process vs. just the Kanban board my software team would use. If my team fails to do TDD and ends up with a variety of bugs in the system because we&#8217;re forced to develop quickly and produce bad work, this show up on hers as us being the bottleneck. Without time to talk to us and really empower us to change our process, nothing will change.</p>
<p>I see this time and time again. The excuses, which are sometimes valid, range from &#8220;the software&#8217;s good enough even with the bugs&#8221;, or &#8220;TDD is too much work for not enough value&#8221; or &#8220;we can&#8217;t write a test suite for a huge mess that isn&#8217;t even testable&#8221;. &#8230;and that&#8217;s just a small portion of what I&#8217;ve seen gone wrong. If you&#8217;ve ever worked for a design agency, or even a large firm that has a huge new client, it&#8217;s very apparent many teams have a hard time getting sign off from clients which causes a bottleneck in the analysis column on the Kanban board because the items either pile up, or priority constantly shifts&#8230; yet they never actually make it out of their column.</p>
<p>A PM there who works with the government offered his strategies for dealing with the strange QA cycles government agencies will have where it goes into a black hole for 6 weeks thus really screwing up his Kanban metrics.</p>
<p>Overall, it was neat to be in a room with people who were geeking out on improving process. You see a lot of software developers get bored with programming or frustrated with how their lack of process is going, so they read up on XP and Agile. When you look at what these PM&#8217;s deal with, it makes you feel like just a small part in a larger overall process.</p>
<p>More importantly, my preconceptions about leadership being the problem 99% of my problem projects really had a wrench thrown in. I was bitching about it to one of the PM&#8217;s, and quickly explained, in great detail, why some big companies which don&#8217;t have a hard line metric such as money to predict performance will often use Lean methodologies since &#8220;ensuring customer satisfaction&#8221; is hard to measure depending on your business, and requires a more exploratory way of doing business. That said, it was great to hear that the common problems I experience in software dev with solutions were the same, just 1 of many that PM&#8217;s have to deal with.</p>
<p>I highly encourage software developers to partake in one of these exercises, even if you do Scrum vs. Kanban. Really eye opening stuff.</p>
<p>&nbsp;</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Consulting Chronicles #5: Getting In, and Out, of the Industry</title>
		<link>https://jessewarden.com/2011/05/consulting-chronicles-5-getting-in-and-out-of-the-industry.html</link>
					<comments>https://jessewarden.com/2011/05/consulting-chronicles-5-getting-in-and-out-of-the-industry.html#comments</comments>
		
		<dc:creator><![CDATA[JesterXL]]></dc:creator>
		<pubDate>Thu, 12 May 2011 16:11:59 +0000</pubDate>
				<category><![CDATA[Consulting Chronicles]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[consulting]]></category>
		<category><![CDATA[consultingchronicles]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[scrum]]></category>
		<guid isPermaLink="false">http://jessewarden.com/?p=2644</guid>

					<description><![CDATA[Today, I&#8217;ll talk about how to get into consulting, what the skills and expectations are, and what can cause you to get out. What is Consulting? Consulting in the Flash/Flex world usually consists of 3 tasks that may be related: Offer your architecture expertise. Offer your code mechanic expertise. Augment an existing team. For #1, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Today, I&#8217;ll talk about how to get into consulting, what the skills and expectations are, and what can cause you to get out.</p>
<p><strong>What is Consulting?</strong></p>
<p>Consulting in the Flash/Flex world usually consists of 3 tasks that may be related:</p>
<ol>
<li>Offer your architecture expertise.</li>
<li>Offer your code mechanic expertise.</li>
<li>Augment an existing team.</li>
</ol>
<p><span id="more-2644"></span>For #1, companies either want you to architect a project, give professional feedback on a suggested/signed off architecture done by another firm (usually to give a stakeholder corroborated evidence), or are having scalability problems and want your advice.</p>
<p>For #2, things aren&#8217;t going well and they want you to fix it. No, not re-write it, fix it.</p>
<p>For #3, they want you to augment an existing team. Some firms do this because the pay + finder fee is good money. Other firms do not because you can sometimes be put into situations where you&#8217;re setup to fail since you may be smart enough to fix it, but you&#8217;re not in charge, thus you cannot do so.</p>
<p>#3 is how I got into consulting, staff augmenting an existing team. While the #1&#8217;s were fun, they were few and far between; usually big companies would rather pay lots of money to fix things vs. pay what it costs to do it right. This isn&#8217;t cynical, this is fact.</p>
<p><strong>Why Get Into Consulting?</strong></p>
<p>The reason is often simple: more money. More money than full-time/salaried/W2 work. More money than freelance/contracting.</p>
<p>Other reasons include working with really smart developers, learning about how Enterprise companies build &amp; sell software, Â learning about how to work in and manage large software teams&#8230; TONS of opportunities to just learn on a variety of subjects. Sometimes people havenâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t worked on extremely large codebaseses. Itâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />s fun to take all the theory and see what it actually does in the real world, with real people.</p>
<p>Me personally, I like travelling, meeting new people, and seeing how different companies work.</p>
<p><strong>Getting Into Consulting</strong></p>
<p>You have a few options listed in order of ease.</p>
<ol>
<li>Find a firm, become an employee.</li>
<li>Find a firm, become a sub-contractor.</li>
<li>Become an independent contractor.</li>
</ol>
<p>If you find an existing firm, especially when your country isnâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t in a recession, this is the easiest way. Whether large like Deloitte and Accenture, to smaller firms (more focused on Flash/Flex) like Roundarch and Universal Mind. Regardless of skill level, while youâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />ll be sold to the client as a â€œconsultantâ€, but larger firms will ensure a senior is on the project unless youâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />re merely staff augmentation. Joining as an employee usually is easier because youâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />re cheaper tax wise/cost wise to the firm, and youâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />re more versatile to them. Meaning, since youâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />re on payroll, they can pay the same rate to fix a huge clientâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />s code base as well as working on your firms intranet when in between clients.</p>
<p>If youâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />re the freelance type, or typically like getting a variety of clients (and often potentially making more money), becoming a sub-contractor is another option. This is how smaller firms get off the ground, and is common place even in larger firms. While you usually cannot do mundane work, this is often easier for smaller firms tax wise, thus itâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />s an option as well. If the firm has no current clients, you wonâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t get any work though. A W2 will get paid for the 2 week downtime, you wonâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t. Hustling during consulting engagements is usually harder than hustling during contracting ones.</p>
<p>If you have enough contacts or typically do only Enterprise type software (LiveCycle, BlazeDS, Java/Spring/Hibernate), then going the independent route is also an option. Basically, start your own company, and start working directly with clients. This is the hardest, even if you do Enterprise software, because most larger clients only work with â€œcompaniesâ€. Just because you have a company legally filed on paper doesnâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t mean youâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />re a â€œcompanyâ€. Often theyâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />ll want multiple developers on a whim, liability insurance, and multiple large clients on your track record/portfolio. Iâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />m personally still learning the sales for this, but it seems networking tends to help a lot/the most.</p>
<p>My advice, seek out people you know from the community at Roundarch, Universal Mind, or Cynergy, and make sure youâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />re known to be available, even if they donâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t currently have any openings.</p>
<p><strong>Skills</strong></p>
<p>Being a consultant involves a lot of things a normal software developer doesn&#8217;t do. Even if you&#8217;re a salaried/W2 employee, these are still required:</p>
<ol>
<li>leadership</li>
<li>large scale architecture</li>
<li>travel on-site to client&#8217;s location</li>
<li>expense reporting</li>
<li>meeting clients and their stakeholders</li>
<li>offering professional, 3rd party opinions</li>
<li>dressing nice</li>
<li>attending meetings for a company you don&#8217;t work for</li>
<li>interviewing/hiring members for your team and/or the company&#8217;s on the company&#8217;s behalf</li>
</ol>
<p>All the standard stuff like team management, working with the company&#8217;s stakeholders, and tracking your hours are there too. You also donâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t always do all the above mentioned; sometimes just one. Itâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />s just those arenâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t normal required in traditional freelancing (excluding #3 and #5). Let&#8217;s break down what these skills mean.</p>
<p><strong>Leadership</strong></p>
<p>Unless your role is for staff augmentation, leadership is the most important skill for a consultant. You need to be able to inspire confidence in strangers you&#8217;ve just met, inspire confidence in your chosen direction &amp; decisions, and to keep people moving on the right path.</p>
<p>Some leadership skills can be taught. Some people are just born with the other aspects. If you don&#8217;t know how to do this, watch &amp; learn from those that do. Examples include raising your Charisma score. Doing one or more of the following will help:</p>
<ul>
<li>have good hygiene</li>
<li>have clean clothes that are ironed</li>
<li>dress to impress; this boosts your confidence as well. You want to look successful.</li>
<li>listen: people like good listeners</li>
<li>empathy: people like others who understand them. If you listen to their pains, and sound like you understand, you connect.</li>
<li>be knowledgeable: if you know what you&#8217;re talking about, you&#8217;ll exude confidence when you talk. You also won&#8217;t get offended if someone disagrees and will want to hear their point of view. If you don&#8217;t know, ask/listen vs. act like you know.</li>
<li>have a vision: assuming you know the companies problems, have a long term vision to fix everything. Communicating this to your colleague and your clientâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />s employeeâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />s is paramount.</li>
<li>communication: you need to be an effective communicator to articulate your vision to others, and get them to follow you. Be relaxed, look people in the eyes, be confident in your delivery, and be open to listen. Using slang/ebonics/l33t in normal conversation negatively affects peopleâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />s perception of you. Be professional when you speak.</li>
<li>egg shells: crush those sons of bitches. You do NOT walk on egg shells. You&#8217;re a consultant; grab drama by the neck, raise it high, and execute it. Then, move forward.</li>
<li>be positive: while Andrew Dice Clay and Rush Limbaugh have gotten popular for their negative spin on things, they don&#8217;t last. Positivity is the antithesis to Entropy; that lasts, especially in people&#8217;s perception of you.</li>
<li>control your emotions: software is hard. People in large groups do really dumb things, particularly large companies. Have patience, breathe, and keep your emotions in check. Â Your self-control inspires confidence in your actions by others. People assume you have things under control if you&#8217;re relaxed and poised.</li>
<li>win: You have to WANT to win. You need ambition to reach your goals and vision. If you have that, you&#8217;ll have the motivation to do all of the above.</li>
</ul>
<p><strong>Large Scale Architecture</strong></p>
<p>The most common need in the Flex world is architecting how the Flex talks to the BlazeDS/LiveCycle, and how that talks to the Java, and how that talks to the client&#8217;s stuff. Often, they&#8217;ll have an existing infrastructure in place and you&#8217;ll need to decide &amp; describe how and where to integrate technology stacks to a client&#8217;s existing infrastructure and possibly already in progress project with the existing resources, which are often in a variety of teams.</p>
<p>You need to know this well enough that you can cater design, development, and deployment techniques to various client needs. You need to be able to effectively articulate these to the client, the team, and ensure the tasks meet the resources currently available; meaning the client can build, deploy, and support what you&#8217;re actually suggesting to do. Thatâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />s a lot of traditionally Project Management tasks.</p>
<p>If you don&#8217;t know how to architect large Enterprise sized projects, specifically Flex, learn. If the back-end/middle tier isn&#8217;t your thing, partner with those who know it. Unlike learning traditional software skills, you can&#8217;t really get away with practicing as a consultant. Based on my consulting gigs people can do this all the time if they&#8217;re a salaried employee of a large company. So, if you want to get on the fast track to learn, join <a href="http://universalmind.com/">a consulting firm</a> and get mentored.</p>
<p><strong>Travel On-site to Client</strong></p>
<p>Unless it&#8217;s staff aug, most consulting involves travelling on-site to the client&#8217;s location(s) to meet the stakeholders and team. This means donning your business casual, booking airfare &amp; hotel, and travelling both on the weekend and during the week. Being responsible by ensuring you have ample lay over time, donâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t get the last flight out, Â arriving to the airport early, and arriving at a client site early to ensure you&#8217;ve gotten enough sleep are assumed.</p>
<p>For those with needy significant others and/or young children, this is challenging to do, and will determine if you do higher level consulting or not. This has forcibly paused my career which Iâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />ll defer to a later blog post.</p>
<p>To me, this was one of the draws I have to consulting. I like traveling to new places, meeting new people, and the lifestyle of being on the move. Being on the road is one thing that&#8217;s therapeutic to me.</p>
<p>If you don&#8217;t have a few thousand in the bank to cover the costs (flight, hotel, fuel, food), the firm you work for will have to front the money. Either way, you have to ensure this is tracked as reimbursed expenses for tax purposes (unless you&#8217;re salaried with the firm). The benefit of paying for these things yourself are tax write off opportunities as well as frequent flyer miles with certain airlines.</p>
<p>If you can use expedia.com, drive a car, and find your way around an airport, you&#8217;ll be fine. Sometimes you get to meet new people you sit next to on the plane. Yes, there are cool people in coach, but you want to strive to be in first class even if the company will only fund coach. Make sure you use your own miles program vs. the companies if you can. You aren&#8217;t paid for your travel time like lawyers, so it&#8217;s nice to have some way to offset costs; i.e. being able to work. Trying to type on your laptop in coach is torture vs. first class.</p>
<p><strong>Expense Reporting</strong></p>
<p>A lot of consultants, even if salaried, are required to document their time and expenses. This means documenting, usually in some web based time tracking program. Thus, you need to be aware of how much time you&#8217;re spending on tasks, what those tasks were, and how much more you think you&#8217;ll do. This can get tricky, too, when you end up in a staff aug position and basically end up running the project. Suddenly you&#8217;re holding the ball, and people are wondering why you&#8217;re billing time for meetings vs. coding&#8230; you can get into really uncomfortable, and extremely irritating and unfair situations. Examples include being the architect &amp; mentoring company employed developers on the project, and when the UAT comes up at the end of an Agile SCRUM Sprint, you show zero User Story points completed, and people in charge question what value youâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />re providing.</p>
<p>If you document well, cya (cover yer arse), and have transparency with the client into what you&#8217;re spending your time on by talking to them early and often, you&#8217;ll do fine. While they often don&#8217;t plan for you to spend a lot of your time in meetings for doing architecture, as long as they&#8217;re aware that out of 4 months of billable hours, 2 months were spent helping the client align their processes to ensure they could support the app, ensure the user stories/features in the application were valid, and the design was actually capable of being built&#8230; then you&#8217;ll at least get paid.</p>
<p>Document your time, be aware of what you&#8217;re working on, and what you need to work on. Communicate what you&#8217;re doing for the client often.</p>
<p><strong>Meeting the Client and Its Stakeholders</strong></p>
<p>I like meeting new people. I like talking. I like meeting successful people and learning from them. Consulting with companies that desire your expertise teaches you a lot about software that supersedes the construction of it, but how it&#8217;s actually consumed and sold. This makes you question a lot of the commonly held beliefs by OOP Purists and other fads touted in the news. It&#8217;s awesome. You get to learn how to build software, how to fix it, how to align teams, how to prevent fire drills, why you&#8217;d even want to prevent a fire drill, how to compromise amongst silo&#8217;d departments, how itâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />s sold&#8230; the list goes on and on.</p>
<p>To get things done, and get bigger problems resolved (like using the wrong technology stack/methodologies/processes), youâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />ll have to meet &amp; talk with the big wigs. If you arenâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t comfortable talking with upper level management, having an MBA helps. If that isnâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t your thing, find someone who is good at it, and learn. Sometimes these are either A) the only people that can move you forward and/or B) theyâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />ll great at articulating why youâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />re so effâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />d and just need to deal with it.</p>
<p>Bottom line, you can get the REAL story behind why the way things are, and exactly where they are going by talking to project stakeholders vs. the variety of â€œthis is my world at this companyâ€ responses youâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />ll get from interviewing employees who arenâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t Director level or higher.</p>
<p><strong>Offering Professional, 3rd Party Opinions</strong></p>
<p>Often youâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />re firm will be hired for your realm of expertise. Other times, they already have the expertise, whether internal employees or another firm, and just want your opinion as a 3rd party who isnâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t currently involved nor has stake in the current project. They actually care what youâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />re opinion is and pay for it. This helps them confirm what they already know with an â€œiron cladâ€ assessment, or perhaps challenging strongly held beliefs in a certain section of the company.</p>
<p>Sometimes these validations, such as:</p>
<p>â€œYes, this other consulting firm is billing out a bunch of n00bs to you for $150/hr, and yes, youâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />re internal employee DID in fact build something amazing in 1 week what the 2 n00bs couldnâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t do in 3 months.â€</p>
<p>&#8230;lead to consulting engagements. Sometimes confirming what the company already knows builds trust, and thus leads to a longer term engagement.</p>
<p>Other times youâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />re actually hired for a less valued position such as staff augmentation, but youâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />re experience/knowledge ARE in fact beneficial the project. Thus, you need to find a way to ensure those who need to know learn about what you know. If you sucked, you wouldnâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t be hired for your high price, thus, ensure the client gets value from you via your professional opinions.</p>
<p><strong>Dressing Nice</strong></p>
<p>Iâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />ve mentioned this countless times before. Clothes make the man. Women typically dress to impress other women; in this case, women need to dress to impress the client. Business casual is usually ok, although, the larger the account, the more formal you need to look. In my opinion, you CANNOT be overdressed for an engagement. If someone mentions on the side you donâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t have to, theyâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />re either threatened, or donâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t understand the game.</p>
<p>Dress to impress. If you look impressive, you must be impressive. Youâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />re thus apparently successful because youâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />re knowledgeable. This includes accessories such as the car you drive, the bag/briefcase you carry, and the business card you deploy.</p>
<p><strong>Attending Meetings for a Company You Donâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t Work For</strong></p>
<p>Sometimes, especially if you end up being a shield for the rest of the team, or if you just want to learn about the lay of the land, the players, and all the drama, youâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />ll need to attend company meetings. These are often a waste of time, or things to be avoided at all costs. However, to management, THIS is their transparency to give to stakeholders at some companies. Providing attendance by your firm is often a requirement.</p>
<p>Either way, youâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />re involved in the project, and need to attend the meetings, and sometimes participate. Sometimes you even need to call/create meetings (OMG, the horror!). These are usually to get consensus from the team on an issue that you couldnâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t do in SCRUM, or resolve drama, or to brainstorm on how to solve some challenging coding issue.</p>
<p><strong>Interviewing/Hiring Members for Your Team and/or the Company&#8217;s on the Company&#8217;s Behalf</strong></p>
<p>Sometimes youâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />re brought onto a project, and realize you need help. The company looks to you to â€œbuild itâ€ or â€œfix itâ€; if that means more developers/designers from your firm, so be it, theyâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />ll find the budget. Getting resources can be challenging. At a smaller firm, you may have to have the resources yourself already ready to go. <a href="http://twitter.com/davidortinau">David Ortinau</a>, one of my mentors on this, has helped me create a spreadsheet of people Iâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />ve met over the years. On it, I list out people Iâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />d hire (and who I wonâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t ever hire), what their speciality is, and what the last rate I got them for was. This is because they are often working for me. Even at my firm, my partners are uber-busy, so I canâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t immediately assume theyâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />re always available. Obviously theyâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />re my first pick to work with.</p>
<p>If youâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />re with a larger firm, they can often help in 2 ways. First, they can provide you additional consultants if the client has the budget for it. Secondly, they can sometimes provide resources from other firms. This is more challenging because usually the other firm will want their cut of providing a resource. This means, either your firm makes less revenue from that resource, or justifies the lack of serious profit from your dire need&#8230;. or both.</p>
<p>Other times, the company is looking to maintain the solution/software you/you and their team has created. This means hiring employees that work for the client. They&#8217;re responsibilities include adding features to &amp; maintaining that software. Often, youâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />re the most qualified to hire said employees. Interviewing potential coders is a challenge &amp; learned set of skills in and of itself.</p>
<p><strong>Getting Out of Consulting</strong></p>
<p>A profession that provides a significant amount of money, a huge opportunity to learn, and networking opportunities with new people &amp; companies seems like something you wouldnâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t ever want to leave, right?</p>
<p>Wrong.</p>
<p>Consulting has a lot of overhead on the soul. This includes the following:</p>
<ul>
<li>copious amounts of travel to be on-site wherever the client is. This is time away from your loved ones.</li>
<li>dealing with incompetence where said incompetence cannot be fired/laid off, yet continues to actively sabotage your project and/or client relationship.</li>
<li>dealing with politics that theoretically help the companyâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />s stockholders, but ensure the software team is setup to fail</li>
<li>various implementations of Agile SCRUM that arenâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t true to the tenets of SCRUM, and thus donâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t see the benefit of it. A lot of times, this angers everyone involved in the team including the PMâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />s running it, and is just a gross feeling.</li>
<li>You potentially never â€œlove the codeâ€ youâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />re working on.</li>
<li>The ultimate consulting goal of â€œleaving the company better than you found itâ€ may potentially be unknowable in how to do so.</li>
<li>Entropy is scientific fact that all things eventually will return to chaos. Youâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />re constantly fighting this in consulting/leading large teams regarding the code base; this can take an emotional, and spiritual, toll.</li>
<li>Sometimes, companies pay you lots of money to produce code that never sees the light of day.</li>
<li>Sometimes, companies pay you lots of money to code in an IDE you loathe on an OS you are unfamiliar with using a framework you hate implementing design patterns you disagree with amongst a team who doesnâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t understand why youâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />re unhappy with the status quo.</li>
<li>If things go sour, you can sometimes not get paid, or take awhile to get paid.</li>
<li>Depending on the team, the complex processes involved on the surface appear to provide no value to the project and prevent developers from actually writing code since they&#8217;re in meetings or writing docs instead.</li>
</ul>
<p>Add to that the paperwork around expenses &amp; taxes, and itâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />s an enough to make anyone want a salaried job. A steady, consistent paycheck with easy taxes. Sometimes way less stress, too.</p>
<p>In most cases Iâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />ve seen a change of scenery, a long vacation, or just a different project is enough to rejuvenate even the most burnt out consultants. Other times a dive back into the W2 world is a great vacation from consulting.</p>
<p>Just be aware there is a huge pay scale difference between consulting and non-Enterprise salaried positions. Just because you take a salaried, full-time position at a large company because they offer comparable money &amp; benefits doesnâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t mean youâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />ll actually be able to use your consulting skills. There is a lot of power in not working for a company directly. You can get away with telling them off for being incompetent, explaining how to get out of the mess, and theyâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />ll thank you for it. You do that as an employee, you typically get a different reaction, one you donâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t want.</p>
<p>Bottom line, this can make finding comparable employment &amp; compensation challenging if youâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />re thinking of getting out. From a skill set perspective, usually only start-ups need someone of that caliber, and unless they have known backers, itâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />s hard for them to afford you unless they offer some serious equity.</p>
<p><strong>Conclusions</strong></p>
<p>Consulting is a profitable endeavor, usually involving your skills on larger projects for larger companies. You can work with various teams or simply offer your expertise, perhaps via training. Itâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />s a great opportunity to learn, meet new people, and discover the business of software and the development processes various companies use. The money canâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t be beat, either. The easiest way to get in is to find an existing firm such as <a href="http://www.universalmind.com/">Universal Mind</a> or <a href="http://www.deloitte.com/">Deloitte</a> and get hired.</p>
<p>The skills required are more demanding that normal freelance software development. Specifically, knowing how to architect extremely large applications, having good leadership skills, and the ability to communicate complex subjects succinctly are key. These skills can be learned and practiced.</p>
<p>Consulting is a demanding career choice and itâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />s ok to take a break from it. Being an expert in your field requires you to be constantly researching, learning, and being on top of your game.</p>
<p>Keep in mind, too, you can work for a consulting firm and â€œjust codeâ€. This isnâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />t consulting, though.</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jessewarden.com/2011/05/consulting-chronicles-5-getting-in-and-out-of-the-industry.html/feed</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title>Agile Chronicles #12: Technical Debt</title>
		<link>https://jessewarden.com/2010/07/agile-chronicles-12-technical-debt.html</link>
					<comments>https://jessewarden.com/2010/07/agile-chronicles-12-technical-debt.html#comments</comments>
		
		<dc:creator><![CDATA[JesterXL]]></dc:creator>
		<pubDate>Fri, 30 Jul 2010 15:47:36 +0000</pubDate>
				<category><![CDATA[Agile Chronicles]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[agilechronicles]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[technical debt]]></category>
		<guid isPermaLink="false">http://jessewarden.com/?p=2401</guid>

					<description><![CDATA[I know it may sound like I&#8217;m painting a rosy,Â infallibleÂ picture of Scrum. Â It&#8217;s the truth, though, and I feel like it solved most of my project problems. Â There is, however, one main problem I saw that made Scrum, and Iterative Development in general, fall flat on its face. Â It&#8217;s called Technical Debt, and it&#8217;s a [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I know it may sound like I&#8217;m painting a rosy,Â infallibleÂ picture of <a href="http://en.wikipedia.org/wiki/Scrum_(development)">Scrum</a>. Â It&#8217;s the truth, though, and I feel like it solved most of my project problems. Â There is, however, one main problem I saw that made Scrum, and Iterative Development in general, fall flat on its face. Â It&#8217;s called <a href="http://martinfowler.com/bliki/TechnicalDebt.html">Technical Debt</a>, and it&#8217;s a problem with programming in general, not Scrum/Agile. Â When it rears its head in Scrum, the effects are devastating, and I believe one of the main reasons Scrum fails for a lot of people.</p>
<p>This article will discuss what Technical Debt is from a Flash/Flex developer perspective, how it negatively affects my Scrum projects, and what are some of the prescribed ways to prevent it. Â Nothing ground breaking here folks, justÂ corroborationÂ that TD IS a major problem, and not even Scrum is immune.</p>
<p><span id="more-2401"></span><strong>What is Technical Debt?</strong></p>
<p>Martin Fowler has a <a href="http://martinfowler.com/bliki/TechnicalDebt.html">good summary</a> about what Technical Debt is. Â Here are 2 quotes from his wiki:</p>
<blockquote><p>You have a piece of functionality that you need to add to your system. You see two ways to do it, one is quick to do but is messy &#8211; you are sure that it will make further changes harder in the future. The other results in a cleaner design, but will take longer to put in place.</p></blockquote>
<p>Git-r-done vs. <a href="http://jessewarden.com/2010/07/when-you-do-it-right-and-on-time.html">doing it right</a>.</p>
<p>Another quote which describes the metaphor:</p>
<blockquote><p>&#8230;doing things the quick and dirty way sets us up with a technical debt, which is similar to a financial debt. Like a financial debt, the technical debt incurs interest payments, which come in the form of the extra effort that we have to do in future development because of the quick and dirty design choice. We can choose to continue paying the interest, or we can pay down the principal by refactoring the quick and dirty design into the better design. Although it costs to pay down the principal, we gain by reduced interest payments in the future.</p>
<p>The metaphor also explains why it may be sensible to do the quick and dirty approach. Just as a business incurs some debt to take advantage of a market opportunity developers may incur technical debt to hit an important deadline. The all too common problem is that development organizations let their debt get out of control and spend most of their future development effort paying crippling interest payments.</p></blockquote>
<p>He goes on to mention that unlike money, you cannot effectively measure technical debt. Additionally, you only get a return on your loan once you deliver.</p>
<p><strong>Signs of Technical Debt</strong></p>
<p>There are various signs of Technical Debt. Â System fragility, tons of reoccurring bugs, or code that &#8220;sometimes&#8221; works.</p>
<p>System fragility examples include when you move a login button, the entire login form doesn&#8217;t work. Â Another sign is when you change a ValueObject&#8217;s property name slightly, yet get no new compiler errors. Â Yet another, usually a violation of DRY, is when you change a parsing error of a server&#8217;s response, yet still get the bug after compilation.</p>
<p>Another example is the statement &#8220;the application doesn&#8217;t seem to be working&#8221;. Â If there had been diagnostic tools in place such as unit tests, a debug/log window, or other testing tools, that question could be quickly answered. Â Even if it can&#8217;t, if you can&#8217;t quickly isolate problems after asking some follow up questions, that&#8217;s another indicator.</p>
<p>Another is when you fix a bug. 3 times. Over 3 Sprints. Â Then it comes back in some other unrelated area. Â Another is before the user even does anything you&#8217;re presented with one or more error dialogues.</p>
<p>The best are when you see the right data. Â Sometimes. Â You have no idea if it&#8217;s your fault, the server&#8217;s fault, or&#8230; what.</p>
<p>Bottom line the code has growing pains, and is challenging to change. Â When you change one thing it breaks something else unrelated, your change is a pain to implement, or your new code duplicates a lot of functionality because you can&#8217;t borrow other functionality because it isn&#8217;t encapsulated enough to share.</p>
<p>The one that took me a LONG time to get over when I first started dealing with extremely large code bases was &#8220;fatique&#8221;.  I&#8217;d get tired of dealing with all the problems, and feeling like I wasn&#8217;t making any progress.  That, and I had no confidence in my changes because I wasn&#8217;t sure what the ramifications were, what would break, etc. Â Effectively, I didn&#8217;t want to work on the project anymore. This has happened twice to me. Â It&#8217;s not from my attention span, but rather just pure loathing at not being able to move forward. Â Part of this is remedied in experience, part in &#8220;learning the story&#8221; of code base by spending a lot of time with it, and just general growth as a programmer.  If you&#8217;re grown, and still have this fatigue, that&#8217;s another clue.</p>
<p>All these and more are signs of Technical Debt. Â If not dealt with, they only get worse and more numerous.</p>
<p><strong>Technical Debt&#8217;s Effects on Scrum</strong></p>
<p>In Scrum, your user stories need to pass User Acceptance Testing (UAT). Â At the end of every Sprint, your client validates each user story your team completed is in fact done. Â If you have technical debt, this&#8217;ll eat away at the quality and/orÂ dependabilityÂ of your user stories actually working. Â This means one or more stories won&#8217;t pass UAT. Â This then slows down your, or your team&#8217;s, velocity.</p>
<p>This often will negatively affect your client&#8217;s view of the team as your earlier velocity will have been higher. Â Usually your team will start off slow or fast, but eventually 4 Sprints in, a common velocity will emerge. Â With a lot of Technical Debt, the reverse will happen; your initial speed will slowly decrease as your team struggles to cope with the increasing Technical Debt. Â If not tackled, more debt is created, and your velocity stays slow, or decreases.</p>
<p>Technical Debt will also often exhibit itself as &#8220;bugs&#8221;. Â In Scrum &#8220;there are no bugs&#8221;. Â Benevolent Scrum Masters will assign 1 point to bugs. Â This is often done to put a sense of accomplishment that the bug was completed, but more importantly that it&#8217;s trackable. Â Its low point value can unfortunatelyÂ skew to its business value. Â Perhaps the bug is what prevented your original user story worth the maximum of 5 points from passing UAT. Â Worse, if your team is working on fixing bugs, they aren&#8217;t working on user stories.</p>
<p>Again, negatively affecting your velocity.</p>
<p>Eventually your team will either have to pull back and pay off their technical debt, continually pay off a little to show some payoff, or just pray the client focuses on more pressing user stories in other areas and &#8220;forgets&#8221; the glaring issues. Â I&#8217;ve seen all 3 happen.</p>
<p><strong>Pullback &amp;Â Reassess</strong></p>
<p>Scrum doesn&#8217;t really have methodology for pulling back and fixing core architectural problems. Â It&#8217;s generally assumed that 80% of your 2 week Sprint is spent refactoring. Â I&#8217;ll let that sink in.</p>
<p>Done? Â Worse, Technical Debt, being <a href="http://martinfowler.com/bliki/CannotMeasureProductivity.html">unmeasurable</a>, wreaks havoc on a Product Manager&#8217;s ability to giveÂ transparencyÂ into the project for stakeholders. Â You don&#8217;t often have a stable velocity; some Sprints your team could simply deliver 0 story points. Â This makes it challenging for the PM to project when the Backlog will be completed and when certain milestones will be reached. Â It&#8217;s even worse when managing budgets and getting contracts signed. Â Scrum is hard enough to sell to clients who are used to fixed bid; suddenly Scrum sounds like a bait and switch, or just a money pit. Â Assuming your team is actually working on the user stories they were assigned and aren&#8217;t trying to sabotage the project, then that situation is usually irrefutable proof that your team has some serious Technical Debt.</p>
<p>Software done with Scrum is like a plane flying from A to B. Â While the flight path is continually corrected, eventually it&#8217;ll get there. Â Planes usually can&#8217;t fly with ice on the wings, hence why you setup good architectural bases in the first 2 Sprints. Â Ice on the wings during flight can beÂ disastrous.</p>
<p>For some projects, sometimes you have no choice. Â Your team has to take the hit, pay off the debt, and rebuild trust with your client. Â Yes, these can be bloody, but hey&#8230; anything is better than Waterfall which in my experience ends like <a href="http://www.youtube.com/results?search_query=lock+stock+and+2+smoking+barrels&amp;aq=0">Lock, Stock, and Two Smoking Barrells</a>: Tons of death, theft, and people get bling who don&#8217;t deserve it. Â While this is effective with Capitalism, life is too short to product shitty software.</p>
<p><strong>American Credit</strong></p>
<p>While not an American only phenomenon, it&#8217;s certainly indicative to our culture, hence why <a href="http://www.imdb.com/title/tt0137523/">Fight Club</a> had such an interesting ending. Â If you&#8217;re quick, good, and lucky you can get away with paying as much Technical Debt as you can per Sprint while knocking out a few new user stories as well. Â Sometimes this is just how things are; other times, you&#8217;re merely postponing the inevitable day of reckoning. Â Consultants are famous for this. Â They get away with masking the massive Technical Debt, and moving on letting some other poor W2 (employee) sap, or consultants like me, to actually fix the Technical Debt.</p>
<p>Eventually, you have to fix the broken windows&#8230; or maybe &#8220;you&#8221; don&#8217;t, but someone does. Â It&#8217;s easier to do this sooner than later. Â I&#8217;ve even seen a team where one guy would fix windows 90% of the Sprint, and another would unintentionally break them again.</p>
<p><strong>Pray for Priority Shift</strong></p>
<p>The third one I&#8217;ve seen happen in larger companies who don&#8217;t adhere 100% to Scrum. Â The priorities change for the user stories, and other parts of the application which are basically broken are ignored, buried, and eventually assumed to work. Â Flowers don&#8217;t grow as well over a dead robot&#8217;s grave.</p>
<p>Incidentally, when higher ups find out, this is where I get some of my work.</p>
<p><strong>Preventing &amp; FixingÂ TechnicalÂ Debt</strong></p>
<p>As you can see, Technical Debt has devastating effects on Scrum, and Iterative Software in general. Â The best way to ensure Technical Debt doesn&#8217;t negatively affect your project is to prevent it. Â It&#8217;s like insect infestations in your house; if you don&#8217;t attack the problem early, it can be very challenging to remove. Â The best way is to prevent the infestation in the first place by not leaving out food, water, and generally ensuring you have sealed entryways and windows. Â Same with software. Â Start with a tight, simple architecture, and continue to maintain it.</p>
<p>That sounds great from a high-level perspective, but what does that really mean?</p>
<p>Here&#8217;s a few I know &amp; have experience with:</p>
<ul>
<li>good design</li>
<li>good developers</li>
<li><a href="http://www.google.com/#hl=en&amp;q=fixing+broken+windows+software&amp;aq=f&amp;aqi=&amp;aql=&amp;oq=&amp;gs_rfai=&amp;pbx=1&amp;fp=97efa91857cb74f0">fixing broken windows</a> ASAP</li>
<li>OOP, specifically encapsulation</li>
<li>unit tests with a decent coverage</li>
<li>an agreed upon framework</li>
<li>throwing optimization out the window</li>
<li>using old technology</li>
<li>ContinuousÂ Integration:Â frequent checkins &amp;Â religious tagging</li>
</ul>
<p>Here&#8217;s a few I know of, but don&#8217;t have a lot, or any, experience with:</p>
<ul>
<li>Test Driven Development</li>
<li>Automated Build Systems</li>
<li>Automated Testing (Hudson, Cruise Control, etc)</li>
<li>Functional/Automation Testing (QuickTest and others)</li>
</ul>
<p>Let&#8217;s go over these in short detail.</p>
<p><strong>Good Design</strong></p>
<p>The #1 thing that saves you the most time, reduces the most risk, and directly contributes to the efficiency of your team is a good deign. Â Wireframes you hate since you&#8217;ve re-workedÂ them so many times with gallons of dead tree&#8217;s at your feet, and design comps you love. Â 5 minutes of a designer&#8217;s time can save a week of a developer&#8217;s. Â When you hit a brick wall during Sprint 5, a designer can quickly put your team back on track quicker and more accurately than a developer can.</p>
<p>Hire, and keep around, a good User Experience/InteractionÂ Designer/Information Architect/Designer today! Â If you&#8217;re made of epic win, hire a Usability Engineer as well. Â They are the ONLY ones who can provide real facts to your team.</p>
<p><strong>Good Developers</strong></p>
<p>A common complaint of Scrum is that it only works with senior to mid-levelÂ developers. Â I agree. Â While it <a href="http://www.cynergysystems.com/blogs/page/davewolf?entry=it_takes_a_village">takes a village</a> to build great software, you need to ensure yourÂ developmentÂ team is top notch, or mostly top notch with a rockstar to guide the rest. Â I realize this isn&#8217;t a reality for a lot of people. Â Even if you have a senior dev, the bad developers can actually detract from the senior&#8217;s ability to deliver as he/she struggles to re-factor their code while ignoring their own user stories. Â That or the bad/mediocreÂ developer continually creates Technical Debt. Â While developers not focusing on their user stories is a management problem, not a Scrum specific one, if they can&#8217;t even be professional and do what they are told, they are effectively sabotaging the project, and thus need to be removed.</p>
<p>Remember, small agile teams are more effective than <a href="http://en.wikipedia.org/wiki/The_Mythical_Man-Month">larger ones</a>. Â If it ends up only being 2 heavy hitters, so be it. Â Or you can just <a href="http://webappsolution.com">hire my team</a>.</p>
<p><strong>Fixing Broken Windows</strong></p>
<p>Not much to add <a href="http://www.google.com/#hl=en&amp;q=fixing+broken+windows+software&amp;aq=f&amp;aqi=&amp;aql=&amp;oq=&amp;gs_rfai=&amp;pbx=1&amp;fp=97efa91857cb74f0">here</a> other than they are usually one of the few things that can clearly indicate Technical Debt. Â If you have to prioritize, choose to ignoreÂ the ones you can easily predict and reproduce. Â They are less dangerous and take a lot less time to annoy your clients. Â It&#8217;s when you go, &#8220;Whoa&#8230; never seen that happen before&#8221; is when you worry your client and PM.</p>
<p><strong>OOP Encapsulation</strong></p>
<p>One of the good concepts of <a href="http://en.wikipedia.org/wiki/Object-oriented_programming">ObjectÂ OrientedÂ Programming</a> is <a href="http://en.wikipedia.org/wiki/Encapsulation_(computer_science)#Encapsulation">Encapsulation</a>. Â It may seem silly to bring up something so basic, but it&#8217;s a basic, core concept for a reason. Â Without goodÂ encapsulation, your code cannot grow, nor be flexible; something that&#8217;s VERY integral in Iterative development.</p>
<p>It&#8217;s ok if your API is good and the code underneath it sucks. Â This is where Test Driven Development can shine. Â Instead of &#8220;creating a component&#8221; from the inside out you actually write like you&#8217;re going to use the component yourself. Â A better API usually results. Â Then, you can focus on writing the guts to make that API happen&#8230; or not (see throwingÂ optimizationÂ out the window). Â It&#8217;s easier to fix bad code inside encapsulated, and thus easily isolatable components than it is <a href="http://en.wikipedia.org/wiki/Spaghetti_code">sphaghetti code</a>. Â Sphaghetti monsters are waaaayyyyy more scary to fix than WW2 tanks that just need a new engine.</p>
<p><strong>Unit Tests with Decent Coverage</strong></p>
<p>Even if you don&#8217;t practice <a href="http://en.wikipedia.org/wiki/Test-driven_development">TDD</a>, it&#8217;s still a good practice to implement unit tests on problem areas of the code. Â TDDÂ puristsÂ will state you should write tests first. Â If you don&#8217;t, there is still a ton of value in writing unit tests, or getting good &#8220;coverage&#8221; of problematic areas. Â Key areas include your Service layer or any code that accesses non AS3 data and injects it into the system. Â This includes XML, text, JSON, AMF, binary data, and anything that &#8220;parses&#8221; something.</p>
<p>Strong-typing is awesome, but it assumes you started with strong-typing. Â Parsing XML to ValueObjects is great, but if &#8220;That PersonVO <a href="http://www.gamesprays.com/spray/the-cake-is-a-spy/">is a Spy</a>!&#8221;, good unit test coverage can usually point that stuff out early and save the team days of debugging and lost time.</p>
<p>Plus, it&#8217;s really awesome to blame with 100% confidence the back-end Java team for your woes in 7 seconds vs. 2 hours of frustrating searching for a needle in a haystack whilst being verbally bashed by the back-end devs wondering why you didn&#8217;t use HTML5 instead of Flex. Â Suddenly Outlook does a cliche freeze before you can write a scathing, emotionally charged, career destroying email back at those <a href="http://steve-yegge.blogspot.com/2010/07/wikileaks-to-leak-5000-open-source-java.html">over-architecting ($*&amp;Us</a>.</p>
<p>While they have less value on GUI components, some of the ways in which you architect Flex 4 components can actually facilitate easier testing. Â Examples include really complicated components that NEED to be in a specific state when data is injected. Â While a really complicated chart that has 100 unit tests around it still has to be visually verified, those 100 unit tests can help dramatically.</p>
<p>Finally, in those areas where you have good coverage, you can do minor refactoring with a ton more confidence.</p>
<p><strong>Agreed Upon Framewor</strong>k</p>
<p>Doesn&#8217;t matter what framework your team chooses, as long as you all are in agreement. Â This could even include <a href="http://flexblog.faratasystems.com/2008/01/13/staffing-a-team-for-your-flex-project">using no framework</a>. Â I prefer <a href="http://robotlegs.org">Robotlegs</a>, my partners prefer <a href="http://swizframework.org/">Swiz</a>, and my clients often still use Cairngorm 2.x. Â Regardless of your thoughts on frameworks, in my experience they help you manage, scale, and work with a team on larger code bases.</p>
<p><strong>Premature </strong><span style="color: #000000;"><strong>Optimization</strong></span></p>
<p>Knuth once <a href="http://en.wikipedia.org/wiki/Program_optimization#cite_note-1">said</a>:</p>
<blockquote><p>&#8230;premature optimization is the root of all evil.</p></blockquote>
<p>After awhile, common optimizations you do by default, and to me, aren&#8217;t even considered intentionalÂ optimizations. Â Some are small, low hanging fruit, that you can do without even thinking and make into habits. Â Examples include setting an Array&#8217;s length to a local variable instead of inside of a loop, using <a href="http://www.google.com/#hl=en&amp;source=hp&amp;q=object+pooling+actionscript&amp;btnG=Google+Search&amp;aq=f&amp;aqi=&amp;aql=&amp;oq=&amp;gs_rfai=&amp;pbx=1&amp;fp=1&amp;cad=b">Object Pooling</a>, and using <a href="http://insideria.com/2008/11/visible-false-versus-removechi.html">visible vs. removeChild</a>.</p>
<p>Good programmers constantly want to make their code better. Â Sometimes this means faster or more responsive. Â The really good ones know when to leave a TODO, and move on. Â Most users are happy with a reasonably responsive GUI. Â A programmer&#8217;s expectations of &#8220;responsive&#8221; is often way higher than what a user will accept.</p>
<p>Code it and refactor later. Â You can&#8217;t refactor vaporware. Â Focus on pimp API&#8217;s. Â Besides, this is ActionScript, not C. Â We have certain limitations (<a href="http://en.wikipedia.org/wiki/Green_threads">no threads</a>, a VM vs. all code being machine code, and a lot of <a href="http://blog.joa-ebert.com/2009/08/11/apparat-is-now-open-source/">missing optimizations</a>). Â <a href="http://waxpraxis.org/">Brandon Hall</a> once said if you have a performance problem in Flash, you&#8217;re probably doing it wrong. Â Instead of re-factoring code, step back and re-assess your approach. Â Recognize those limitations early, and yell like crazy at the designer, &#8220;WE CAN&#8217;T GO TO THE MOON IN A TRICYCLE YOU FRAKIN CRAYON PUSHER!!!?&#8221;</p>
<p>If you have something to prove, do it at night and post to your blog. Â If the GUI isn&#8217;tÂ responsive, well duh, that&#8217;s not a bad optimization, that&#8217;s a required one. Â The point here is if you need to prove through tests cases that by not doing your optimization(s) that the app will be unresponsive, you&#8217;re either in dangerous time sinkÂ territory, or doing something <a href="http://hobnox.com/">amazing</a>.</p>
<p><strong>Use Old Technology</strong></p>
<p>While I love using Flex 4, a lot of the apps I still work on, and clients have in development and/or production are Flex 3.x. Â Flex 3.5 &amp; Flex Builder are solid, 4.0 SDK and IDE, not so much. Â You want your problems to be programming challenges, not unexpected scrollRect or IDE magically disappearing code hinting bugs. Â These things can be major time sinks and devastating to your productivity, sometimes killing your entire day as you attempt to reinstall &amp; reconfigure various things. Â Mitigate those risks by using old software that works and has a proven track record. Â Most won&#8217;t listen to this paragraph and I don&#8217;t blame them. Â Flex 4 skinning does help a lot in the &#8220;make this design work&#8221; department, although, no one talks about the overhead costs of putting an icon in a Spark button, and all the other simple things that are now more complicated.</p>
<p>Software traditionally outlives it&#8217;s original expected lifespan by 3 times or more. Â One of the reasons is that it works.</p>
<p><strong>ContinuousÂ Integration</strong></p>
<p><a href="http://martinfowler.com/articles/continuousIntegration.html">Continuous Integration</a> is aÂ giganticÂ topic, and actually encapsulates a lot of other sub-topics I&#8217;ve already mentioned. Â I just want to focus on the parts of it that I found extremely helpful and harmful if not followed.</p>
<p>The first is checking in your code often. Â If you don&#8217;t know how to merge code, learn. Â If you don&#8217;t know what tool to use, use <a href="http://www.scootersoftware.com/">BeyondCompare</a>. Â If you&#8217;re on a Mac like me, use <a href="http://www.codeweavers.com/products/">CrossOver</a> to make BC work (I&#8217;ve been using that setup for 4 years).</p>
<p>Even on a 2 man team, merging and testing your changes can take a lot of time, even if you and the other developer are on completely different sections of the code base. Â On one project, we actually set a specific merge day on the 2nd week of our 2 week Sprint to ensure we planned for this disruptive day. Â We&#8217;d both merge frequently, but we&#8217;d still ensure we didn&#8217;t merge much more after that since it can wreak havoc on UAT day.</p>
<p>Regardless of what source control system you use, you NEED to implement tagging. Â This doesn&#8217;t need to be a team thing at all; just give 1 personÂ responsibilityÂ with this important task. Â Every UAT day, they need to tag the build. Â Developers in general should make their own tags and branches, but sometimes the code isn&#8217;t in a risky spot and you don&#8217;t end up doing it. Â That&#8217;s ok. Â You should still have Sprint tagged builds so you have SOME saved point to confirm/deny major bugs/changes against.</p>
<p><strong>Test Driven Development</strong></p>
<p>I won&#8217;t go into detail here, but I&#8217;ve seen the positive benefits on my Service layer, or when I&#8217;m writing a library for others to use. Â For both, you actually create the API first and it feels immediately relevant. Â Additionally since the Service layer is often the weakest link in your application it&#8217;s great to proactively find bugs that would of usually cost a lot of time early on. Â That, and you have aÂ dependableÂ suite to test for changes that may negatively affect things later on. Â Finally, you can test if the entire applications communication system is working within seconds, quickly killing assumptions that add to debugging time.</p>
<p>What I haven&#8217;t resolved yet, and this is probably due to my inexperience with it, is how to manage the <a href="http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&amp;ixPost=31666">amount of code</a> I have to refactor. Â No longer just the components, but the tests often as well. Â This isÂ especiallyÂ true with some of my more complicated GUI composition components where I test the controller layers. Â Maybe it&#8217;s my inexperience with TDD &amp; unit tests, maybe my tests just aren&#8217;t very good&#8230; I don&#8217;t know. Â Like any problems with the GUI, I just blame the Designer. Â That doesn&#8217;t make the re-factoring amount &amp; time go away though.</p>
<p><strong>Automated Build Systems</strong></p>
<p>Automated build systems include things like <a href="http://ant.apache.org/">ANT</a> and <a href="http://maven.apache.org/">Maven</a> or even <a href="http://rake.rubyforge.org/">Rake</a>. Â This is the #1 question that sabotages my sales call when talking to Enterprise clients. Â They want to here me say, &#8220;Why yes, of course I&#8217;m a major proponent of automated build systems.&#8221;</p>
<p>I don&#8217;t, though. Â ActionScript &amp; Flex Dev isn&#8217;t Java, and is a lot simpler. Â I&#8217;ve seen more team productivity lost to setting up &amp; maintaining build systems.</p>
<p>&#8230; except for deployment. Â When you&#8217;re deploying to various servers, and doing integration testing with different systems, I&#8217;ve seen TONS of value here. Â I&#8217;ve only seen this work if you have a dedicated build person who doesn&#8217;t mind having a lower story point contribution.</p>
<p>If I can&#8217;t hit the run and debug buttons in Flex/Flash Builder, I perceive that a serious problem. Â I&#8217;ve seen many teams who can&#8217;t do this, and fire drills rage. Â Once you solve that problem, you can start tackling other problems. Â There are many who disagree with me, but they are nowhere to be found on my consulting gigs where I&#8217;m saving a project.</p>
<p><strong>Automated Testing</strong></p>
<p>The King James Bible says in the 10 Commandments that you shouldn&#8217;t covet yourÂ neighbor. Â I&#8217;m an uber-sinner then because I&#8217;ve never worked on a team that had the chops, client permission, and/or resources to setting up and maintaining anÂ automatedÂ testing server, yet IÂ continuallyÂ wish I had been, or soon will. Â I&#8217;ve been on teams where we talked about it, but it was never executed because we too busy TRYING NOT TO DIE AND ACTUALLY SHIP SOFTWARE.</p>
<p>Hudson and Cruise Control look awesome. Â That said, a lot of the people I&#8217;ve worked with don&#8217;t even write unit tests, so&#8230;&#8230;..</p>
<p><strong>Functional Testing Tools</strong></p>
<p>As I stated, a lot of things in Flex are insanely visual; you can&#8217;t write unit tests to test visual accuracy. Â That, and some of the state&#8217;s they get in areÂ unwieldyÂ to write tests around. Â You can utilize <a href="http://en.wikipedia.org/wiki/HP_QuickTest_Professional">functional testing tool</a>s to automate a lot of that&#8230; and man, seeing them in action is HOT! Â They are wicked expensive as a result, and only the larger Enterprise companies employ them. Â Here, too, is another thing that sabotages my sales calls with clients:</p>
<p>&#8220;You ever use Functional Testing tools?&#8221;</p>
<p>&#8220;No, but I&#8217;d love too, they look HOT!&#8221;</p>
<p><strong>Conclusions</strong></p>
<p>In my experience with Scrum, and Iterative Development in general, Technical Debt is the only thing I&#8217;ve seen that can really destroy the promises that Scrum is supposed to deliver on. Â Thus, it&#8217;s been the one thing I&#8217;ve been focused on better understanding on how to identify, prevent, and fix. Â If you&#8217;re using Scrum, beware. Â Twice I&#8217;ve seen Technical Debt make a huge negative impact on my projects.</p>
<p>There are a bunch of things you can do.</p>
<p>Think heavily upon the decision of coding something quick vs. planned out well architecturally. Â There are pro&#8217;s and con&#8217;s to each (OOP Purists will tell you nothing should be quick, they are wrong). Â Sometimes you have zero clue if feature is even relevant to the your users, and it makes huge business sense to only make a quick foray vs. a huge, heavy architecture investment in case the user quickly scoffs at the functionality. Â <a href="http://en.wikipedia.org/wiki/George_S._Patton">Patton</a> called this a &#8220;calculated risk&#8221;. Â Software IS War. Â Other times, that quick implementation without any good architecture can have major negative consequences later down the line. Â That&#8217;s ok, though, just get really good at refactoring. Â Yes, it&#8217;s a skill you can learn. Â Yes, refactor is a good word; it&#8217;s not the same thing as rewrite, and is integral to developing software well.</p>
<p>The other ones are ensuring you have a competent team, ensuring they follow commonly known practices, and tackle problems early. Â Check your code in often and early. Â If you don&#8217;t employ TDD, at least think about getting some unit test coverage on areas thatÂ continuallyÂ are causing problems.</p>
<p>Remember, part of this recession was caused by people having massive debt they didn&#8217;t deal with, and ignored. Â Debt is a valid way of doing business, and so is software, but you need to see some eventual value on that investment, and not let your debt get out of control.</p>
<p>If you ignore everything I said above, just remember 3 things: encapsulation, refactor, and use a damn good <a href="http://jessewarden.com/2010/02/consulting-chronicles-3-preventing-fire-drills-crises-by-removing-land-mines-and-using-diagnostic-tools.html">logger</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jessewarden.com/2010/07/agile-chronicles-12-technical-debt.html/feed</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Agile Chronicles #11: The Backlog and Product Development Challenges</title>
		<link>https://jessewarden.com/2010/07/agile-chronicles-11-the-backlog-product-development-challenges.html</link>
					<comments>https://jessewarden.com/2010/07/agile-chronicles-11-the-backlog-product-development-challenges.html#comments</comments>
		
		<dc:creator><![CDATA[JesterXL]]></dc:creator>
		<pubDate>Wed, 28 Jul 2010 15:14:23 +0000</pubDate>
				<category><![CDATA[Agile Chronicles]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[agilechronicles]]></category>
		<category><![CDATA[backlog]]></category>
		<category><![CDATA[scrum]]></category>
		<guid isPermaLink="false">http://jessewarden.com/?p=2352</guid>

					<description><![CDATA[I wanted to talk about the Backlog again with regards to Scrum, an iterative Agile Software Development process. I&#8217;m working on 2 products simultaneously in my spare time, and have noticed a few patterns the Product Backlog has helped me with, as well as pointing out priority problems. I thought it important to bring this [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I wanted to talk about the Backlog again with regards to <a href="http://en.wikipedia.org/wiki/Scrum_(development)">Scrum</a>, an iterative Agile Software Development process.  I&#8217;m working on 2 products simultaneously in my spare time, and have noticed a few patterns the Product Backlog has helped me with, as well as pointing out priority problems.  I thought it important to bring this up again on what a Backlog is, how it solves the scope creep problem, and how you can use it incorrectly.</p>
<p><span id="more-2352"></span><strong>Caveats</strong></p>
<p>I continually abuse 2 terms below, Backlog and Sprint. Â Sprints don&#8217;t have to be 2 weeks, but for the sake of simplicity, I assume they are. Â Also, Backlogs contain user stories, not requirements or features. Â However, I assume for the sake of this article your features are already formed into user stories. Â Finally, I assume that once I capture a requirement, it&#8217;s thrown into the Backlog. Â I actually have a document which holds the validated requirements, which I then later formalize into user stories, and then put those officially into the real Backlog. Â In this article&#8217;s case, that process is assumed to have already happened.</p>
<p><strong>Review: What is a Backlog?</strong></p>
<p>First, a review.  A Backlog is a place you store features, or user stories.  There are often 2 Backlogs for a software project, a Product Backlog and a Sprint Backlog.  The Product Backlog contains all features for your software.  At it&#8217;s purest form, it&#8217;s an spreadsheet that lists all the things your software is supposed to do, with a rated business value.  While it can be seen somewhat as a requirements document, it is more defined, and singularly focused.  It merely lists features/user stories.</p>
<p>While a requirements document may say &#8220;The application needs to allow users to register and login&#8221;, the Product Backlog would probably have that as 4 line items:</p>
<ul>
<li>Upon entering [product URL], and the user isn&#8217;t logged in, they&#8217;ll be presented with a login screen.  They can enter their username and password, click the &#8220;Login&#8221; button.  If the correct credentials are provided, the user is shown the landing page.</li>
<li>If the user inputs the incorrect username and/or password, the Login screen is shown with the error message &#8220;Your username and/or password was incorrect&#8221;.</li>
<li>If the user is already logged in when entering [product URL], they are automatically taken to the landing page.</li>
<li>If the user does not have an account, and arrives at the login page, they can click the &#8220;Register&#8221; hyperlink to be taken to the New User Registration page.</li>
</ul>
<p>There are a lot more user stories you can write, or even refining the ones above.  There are a few points here in the difference.  The client wants users to register and login.  This requirement can easily be documented in a requirements document.  That requirement belays a lot of work for developers, and a lot of things for the PM to track.  Requirements are for capturing the client&#8217;s needs, but are not setup for clearly laying out what a developer should do, nor what the acceptance criteria is.  The developers want clear instructions on what they are supposed to code with a clear acceptance criteria.  Most importantly, the Project Manager needs to have trackable items, clearly documented, that are accepted by the client.  Additionally, she needs to have weights and priorities attached to these items so she can track over time and give the client transparency into the project.</p>
<p>These units of work, called user stories, are stored in the Backlog.  They are mutually agreed upon by the client, developer(s), and the PM.</p>
<p><strong>Review: Sprint Backlog</strong></p>
<p>A Sprint Backlog is where you put features/user stories that team needs to complete each Sprint.  You put user stories into the Sprint Backlog from the Product Backlog.  Once the Sprint starts, the Sprint Backlog becomes frozen.  While you can add &amp; modify things in the Product Backlog while the Sprint goes on, you cannot add/modify things in the Sprint Backlog.  Additionally, the Developers are the only ones who actually mess with the Sprint Backlog.  They&#8217;ll assign user stories to themselves, complete it, and move to the next.</p>
<p><strong>What Are We Building?</strong></p>
<p>One of the reasons for the high rate of software project failures is due to the software not being what the client wanted.  Software is usually built to a specification or &#8220;spec&#8221;; a document that outlines what the customer/client wants.  Clients are busy.  Thus, back in the <a href="http://en.wikipedia.org/wiki/Waterfall_model">Waterfall</a> days, you&#8217;d get a sales and/or PM to document as much of the client&#8217;s requirements as possible, formalize it into a contract, usually a Statement of Work or similar, and have both parties sign it.  This contract was supposed to be what you were building, by when.</p>
<p>There were 3 huge problems with that.  First, it assumes you accurately captured requirements.  This is a fallacy.  Communication is a flawed process based on the filters we humans use to understand other humans (my mind filters the thought into speech I believe you need to here, you hear this speech and interpret the meaning of my words, and filter it to what you think I said).  Thus, you need to, rightfully, assume any documentation, even mutually agreed upon, is flawed.</p>
<p>Second, developing software is slow compared to making dinner.  The business and/or customers who needed the software can change. Â Software needs to embrace change to be relevant. Â Iterative development embraces that concept whereas Waterfall does not. Â Waterfall assumes you got it right &#8220;months ago&#8221;, and there is no room for the client to change their mind.</p>
<p>Third, it&#8217;s <a href="http://uxmyths.com/post/746610684/myth-21-people-can-tell-you-what-they-want">a myth</a> that people can tell you what you want. Â Clients think they know, even if they are actually involved in making software, but they don&#8217;t. Â Usability testing is the only proven way in software to validate if your software works or not. Â To do usability testing, you need to have a working build of software. Â To have a working build of software, developers have to make a build vs. work on the build.</p>
<p>Iterative development forces you to make working builds every 2 weeks, and gives the client the opportunity to validate that your implementation of user stories are actually valid. Â This also allows them to validate the software is solving their current needs, and if not, they can shuffle the Product Backlog around, andÂ re-prioritizeÂ for the next Sprint.</p>
<p>The Product Backlog contains all of the features your software has, and the Sprint Backlog has the frozen features your team is implementing this Sprint. Â The key here is that the Product Backlog can change. Â Whether your client wants toÂ re-prioritize, or they have new things they want to add.</p>
<p><strong>Scope Creep</strong></p>
<p>Scope Creep is defined as the scope, or total requirements for a project, growing over time. Â The word &#8220;creep&#8221; is used to imply that it&#8217;s growing beyond the originally agreed upon scope, and it&#8217;s doing it slowly enough not to raise the ire of anyone beyond those actually designing &amp; developing the project. Â It&#8217;s the bane of web &amp; application developers everywhere.</p>
<p>Unless you use a Backlog in Scrum.</p>
<p>If the client wants to add new functionality, they can. Â Adding new functionality to a project is often a good thing. Â Whether a good idea that could of only arisen AFTER a build of the software was used by the client, or a glaring hole in available functionality was noticed weeks later. Â Sometimes the new functionality is just a piece of functionality re-stated, but with additional work behind it. Â Developers usually hate this because while the client perceives it as &#8220;the same scope, just re-worded&#8221;, developers know that it&#8217;s 3 times the work. Â First, they already built it; second, they have to re-work their existing work assuming it can be re-factored at all; and third, they still have to code all the NEW functionality added&#8230;</p>
<p>&#8230;within the same timeline.</p>
<p>Unless you use a Backlog in Scrum.</p>
<p>Remember, the Sprint Backlog, the things developers are working on during a given Sprint, is frozen once your team starts. Â It CANNOT be changed once you start. Â The client is welcome to modify, change, andÂ re-prioritizeÂ the Product Backlog whenever they want. Â If theÂ functionalityÂ your team delivers at the end of every Sprint meets UAT (User Acceptance Testing&#8230; also known as &#8220;we built exactly what you asked&#8221;), and the client wants to change it, it&#8217;s added as a new feature to the Product Backlog. Â This is huge.</p>
<p>This means that anytime the client &#8220;adds&#8221; or &#8220;changes&#8221; something, it&#8217;s clearly documented in the Product Backlog. Â The key here is if your team already delivered a user story from the Sprint Backlog, and the client wants to change things, they can&#8217;t magically undo the completed user story your team completed. Â It stays completed, and a new one is created for insertion into the Product Backlog. Â This is a track record for the PM and your team to clearly show they client they ARE adding scope the project. Â Your team IS delivering on what they were asked to do.</p>
<p>I don&#8217;t want to get into teaching the client, managing their expectations, etc. I just want to point out here that&#8217;s how it&#8217;s supposed to work, and that&#8217;s fine. Â Most Product Backlogs grow as the project moves forward. Â This is a good thing. Â It shows things are evolving and getting refined. Â Your client is getting what they want. Â Your team isÂ shieldedÂ from scope creep sabotaging your work and the client&#8217;s expectations.</p>
<p><strong>Product Development Helper</strong></p>
<p>I&#8217;m involved in 2 products currently. Â One is an Enterprise <a href="http://www.adobe.com/devnet/flex/samples/dashboard/dashboard.html">Dashboard</a> Framework for <a href="http://webappsolution.com">my company</a>, and one is an image app I&#8217;m working on with <a href="http://joelhooks.com">Joel Hooks</a>. Â Both projects were well under way when I was brought on board. Â Both project owners specifically asked me to join to help them accomplish 2 things.</p>
<p>First, they wanted to launch. Â Second, they wanted an opportunity to do Scrum development.</p>
<p>While I have gleefully accepted helping them reach these goals, this put me in a few challenging situations.</p>
<p><strong>Economics of Design Phase</strong></p>
<p>From my experience in software, I&#8217;ve found (and read online to corroborate) that the most impact with least cost is spent in the Design Phase. Â This is when the User Experience (UX)/Interaction Designer (ID)/Information Architect (IA)/Designer people/person figures out what we&#8217;re building. Â To give you context, let&#8217;s pretend I charge $50/hr (&lt;&#8211; lol!) and conveinantely leave out the design part (where wire frames are made to look hot via Photoshop/Illustrator/your mom):</p>
<ul>
<li>2 hours spent on wire framing a Login = $100</li>
<li>16 hours spent coding the Login to work = $800</li>
</ul>
<p>Now, the ratio varies, but typically development time greatly exceeds time spent wire framing. Â There is also a dependent relationship here that the above math doesn&#8217;t show. Attention to detail &amp; well thought out user stories implemented in the wireframes often significantly reduces the amount of time developers have to spend.</p>
<ul>
<li> 2 hours spent refining registration = $100</li>
<li>6 hours saved by devs not having to stop, lose momentum, ask questions, get clarity, re-work, wtf = $300</li>
</ul>
<p>Another advantage is &#8220;cheap flexibility&#8221;. Â If you want change your mind about something in Design Phase, it&#8217;s really cheap. Â I&#8217;ll often utilize a pen and paper for creating software, whether that&#8217;s in the beginning, or after we hit a design/functionality challenge in the design comps and we have to go back to the drawing board as it were. Â Drawing boxes and arrows, and thenÂ summarily ripping out the piece of paper for 2 hours until we get it right. Â This, as opposed to having developers figure out mid-sprint, costing them <a href="http://www.paulgraham.com/makersschedule.html">valuable momentum</a>, and setting them up to fail. Â &#8230;and costing a lot more money.</p>
<ul>
<li>4 hours playing around with the Landing Page = $200</li>
<li>2 days using developers to play around with the Landing Page = $800</li>
</ul>
<p>Keep mind, your Designer doesn&#8217;t contribute, nor is beholden to, Story Points. Â If you utilize your Developers toÂ experiment, you&#8217;ve detracted from their ability to deliver on theirÂ committedÂ stories. Â This costs you twice: Their lost productivity they&#8217;ll have to make up, and by spending more money using developers vs. designers to play around with a design.</p>
<p><strong>False Starts</strong></p>
<p>I&#8217;ve tried &amp; failed enough times at launching my own product ideas that I&#8217;ve learned what not to do. Â The #1 problem I ran into was lack of design direction. Â As a single man team, I had to do design, front end &amp; back-end development, and product management. Â That&#8217;s hard. Â If you know the idea, the market, and are passionate about it, you can actually do pretty well simultaneously performing all of those roles.</p>
<p>However, as a coder, I naturally spend way less time on design. Â That was consistently a mistake I paid for. It absolutely annihilated my momentum. Â More importantly, as I got frustrated I didn&#8217;t have design direction, knowing I&#8217;d have to stop coding and do more upfront design work, I lost the will to continue.</p>
<p>Once you lose the will, you&#8217;re screwed. Â You won&#8217;t launch.</p>
<p><strong>Design Phase vs. We&#8217;re Almost Done</strong></p>
<p>Thus, for both projects, I&#8217;ve spent a lot of time on the design phase. Â This means everything from documenting what we&#8217;re doing, drawings and wireframes, and keeping track of our Backlog.</p>
<p>The problem is, both teams are rearing to go&#8230; they want user stories to munch on with Sprints. Â The old adage here, &#8220;garbage in garbage out&#8221; still applies to the Backlog as well, thus I&#8217;m sticking to my guns. Â While we collectively could extract what user stories there are, and sort by priority, without a good design to guide those user stories, we&#8217;re just going down a misguided path with awesome equipment.</p>
<p>I haven&#8217;t figured out how to manage this. Â My only saving grace is that I can easily remember back to when I was &#8220;just starting&#8221; or &#8220;re-starting for the 4th time&#8221; that my will was waaaayyyy harder to break in the beginning; it was only once I had been working for 3 days straight, and hit a design brick wall that it crumbled. Â However, if I was just thinking and playing around, my will could stay strong for months.</p>
<p><strong>We Need To Do This Also: Work Intimidation</strong></p>
<p>Both projects have their challenges. Â For the Dashboard, I know the audience, so it&#8217;s pretty easy to wireframe for it, and outsource the design. Â For the image app, I have no clue who they are, and the descriptions I get from her majesty and Joel, I can&#8217;t relate to. Â So, I had to create Persona&#8217;s, validate these persona&#8217;s, and then create goals from them. Â Even simple goals lead to a lot of software work.</p>
<p>Another problem I found with trying to launch a lot of my own products and failing was breadth of work. Â Not scope, but the amount of goals the software was trying the accomplish. Â I&#8217;ve found the amount goals you&#8217;re trying to solve is directly proportional to the amount of work you have to do. Â I was only successful when I targeted a reasonable amount of goals to the created a somewhat reasonable amount of work.</p>
<p>At first, you think &#8220;man&#8230; that&#8217;s ALL the software does? Â This&#8217;ll be easy&#8230; and disappointing. Â There&#8217;s not much of a challenge, and I&#8217;m not sure my users will like software that doesn&#8217;t do a lot.&#8221;</p>
<p>Bullshit. Â If you believe that, you&#8217;ve never launched software. Â I believed that, then I failed 50 billion times trying, and eventually gave in, and tried to launch even something mediocre.</p>
<p>The incorrect perception I had to overcome was that launching, with all the hard work it takes, is the end all, be all. Â It&#8217;s not. Â A &#8220;launch&#8221; just has to be a working product normal people can pay to use. Â Like any web based, or self-updating desktop software, you can iterate well after version 1.</p>
<p>I&#8217;ve constantly had to remind myself of this as I document &amp; wireframe functionality for both applications. Â I get really disheartened when I recognize a Persona goal isn&#8217;t met, implement it on paper or the wireframes, and recognize theÂ breadthÂ of work I&#8217;m creating for my team. Â The fun challenge I&#8217;ve found is figuring out how much I can take away, yet still launch. Â The key point here is &#8220;take away&#8221; merely means tossed in the Backlog. Â Good, valid idea, documented, but not making the 1.0 launch cut.</p>
<p>I don&#8217;t have to feel bad at all, in fact, I should feel good twice over. Â First, because I&#8217;ve significantly reduced scope, and thus increased our chances of successfully launching; and second, I&#8217;ve done my part and documented the valid feature, and stored it in it&#8217;s appropriate place.</p>
<p>Painful process, but I seem to be getting better at it. Â I can&#8217;t imagine building the Google.com homepage.</p>
<p><strong>Projects Backlog</strong></p>
<p>I do a lot. I&#8217;m busy. Â I work a lot. Â Thus, prioritizing my time in helping with these projects actually creates a &#8220;Project Backlog&#8221; in my real life&#8230; one that I am not following very well. Â I can only do so much in a day, and if I don&#8217;t prioritize my tasks into a linear list, nothing will get done. Â So far, I&#8217;ve tried 3 day sprints where I focus on 1 project for 3 days, and then hop back to the other.</p>
<p>Some days, that doesn&#8217;t work, and I get confused on which one was I was working on. Â At the very least, I at least try to do my &#8220;5 minutes a day&#8221; rule: spend at least 5 minutes a day working on the task.</p>
<p>While the ivory tower solution is to focus on 1 project first, and get it done, it doesn&#8217;t work like that because there are dependencies. Â So, I&#8217;ve tried to balance it out by working on 1 project while the other is in a lull/waiting on someone else. Â Sadly, it seems a Project Backlog doesn&#8217;t really work because I can&#8217;t freeze it like a Sprint Backlog, and there are too many dependencies out of my control. Â I refuse to waste time, thus, I&#8217;ll just hop to some other project to keep productive.</p>
<p><strong>Conculsions</strong></p>
<p>If I had the choice, I&#8217;d probably just focus on project at a time. Â However, this is way different than coding. Â With coding, assuming I have a ton of user stories and design comps waiting for me, the onus is on me, and the time is full. Â With designing &amp; managing&#8230; sometimes I physically can&#8217;t do anything other than wait. Â Also, some of the tasks I need to do are a lot shorter. Â Writing a document takes 30 minutes vs. 4 hours to code a component. Â Therefore, it&#8217;s way easier to shuffle a schedule around, and make it full of multiple projects vs. just 1. Â While hard, I feel like I&#8217;m on the right track&#8230; I just need another 10 years of practice.</p>
<p>Bottom line, I&#8217;ve found the Backlog really helpful in both capturing all we want to do, and all that we don&#8217;t have time to do. Â It shields my from my clients inadvertently sabotaging my team&#8217;s development on their project, while ensuring we capture what they need. Â It ensures everyone knows what they need to do, are setup to succeed, and is trackable. Â It kills scope creep dead, and helps me reduce software complexity.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jessewarden.com/2010/07/agile-chronicles-11-the-backlog-product-development-challenges.html/feed</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
