<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Flex and Flash Developer - Jesse Warden dot Kizz-ohm</title>
	
	<link>http://jessewarden.com</link>
	<description>A blog on software development, technology, games &amp; movies.</description>
	<lastBuildDate>Mon, 16 Aug 2010 17:24:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/jessewarden" /><feedburner:info uri="jessewarden" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>What I Learned About Trying to Double My Rate</title>
		<link>http://feedproxy.google.com/~r/jessewarden/~3/IrR3rU7oYSI/what-i-learned-about-trying-to-double-my-rate.html</link>
		<comments>http://jessewarden.com/2010/08/what-i-learned-about-trying-to-double-my-rate.html#comments</comments>
		<pubDate>Mon, 16 Aug 2010 16:29:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Business Process]]></category>
		<category><![CDATA[consulting]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[freelance]]></category>
		<category><![CDATA[rate]]></category>

		<guid isPermaLink="false">http://jessewarden.com/?p=2416</guid>
		<description><![CDATA[Introduction I made a new years resolution to double my rate this year. If you take a look at the current Flex Consulting Rates, and think double or triple, you’ll have an idea of what I’m trying to do. In &#8230; <a href="http://jessewarden.com/2010/08/what-i-learned-about-trying-to-double-my-rate.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>Introduction</strong></p>
<p>I made a new years resolution to <a href="http://freelanceswitch.com/money/doubling-your-rate-a-thought-experiment/">double my rate</a> this year.  If you take a look at the <a href="http://www.hotgigs.com/rates/skill/Adobe-Flex-hourly-consultant-bill-rates/">current Flex Consulting Rates</a>, and think double or triple, you’ll have an idea of what I’m trying to do.</p>
<p>In the past 8 months I&#8217;ve found three challenges to reaching my goal.  First, I had some misperceptions of what level of quality of software businesses want.  Second, I have been distracted from the truth by the echo chamber I participate in, specifically the Twitter followers and blogs I read.  Finally, and most importantly, while I&#8217;m good at marketing, I&#8217;ve completely failed in selling the value of my services.  The following lists the failings in detail with my new goals to fix those problems.</p>
<p><span id="more-2416"></span><strong>Why Double My Rate?</strong></p>
<p>I’ve found there is a glass ceiling with programming rates.  I figure if I find a way to break through that ceiling, then I’ll learn.  You should always be learning in programming, and thus doubling my rate this allows me to learn.</p>
<p><strong>Programmers Want to Create First and Foremost, Businessmen Want to Make Money First and Foremost</strong></p>
<p>Any programmer who wants to be good is constantly focused on learning and improving their craft.  Specifically we focus on anything, and everything that can positively contribute to ensuring we produce better code that’s more enjoyable to work with, reduces project risk, and ensures a good user experience.  This includes, but is not limited to, learning new design patterns, languages &amp; runtimes, and processes such as Continuous Integration, Agile/Scrum, and TDD.</p>
<p>When talking to 3 successful businessmen I know, all 3 aren’t focused on improving their craft.  They are focused on making more money.  My Dad is in sales and sells luxury hardware installations.  My Uncle Barry is in luxury retail.  My Uncle Flip is a corporate lawyer.  All 3 are financially successful.  While they have different educational backgrounds, and different businesses, all 3 corroborate each other.  I’ve found that other successful people, whether in their blogs, in company press releases, or public interviews all have the same primary motivation.  They’ll quickly follow with others, but making money is ALWAYS #1.</p>
<p>I’ve spent 10 years learning how to make the best software possible.  It’s not helping me make more money.</p>
<p><strong>New Goal #1</strong>: Learn more about making money.</p>
<p><strong>Good Enough Software</strong></p>
<p>One thing I&#8217;ve noticed in my consulting over the years is that a lot of companies have an extremely low expectations for software quality &amp; velocity compared to me and my colleagues.  Many would rather purchase software made at Walmart vs. Louis Vuitton.  While investing in the R in RIA has a <a href="http://www.google.com/url?q=http://www.adobe.com/enterprise/pdfs/infotech-ria-business-case.pdf&amp;sa=D&amp;sntz=1&amp;usg=AFQjCNEI3QWvvPd3jgl5vOYkP-QOd4PbUQ">higher return on investment (PDF)</a>, many find that simply investing in the ubiquity of Flash Player with its predictable playback is good enough.</p>
<p>Later, a lot of these companies realize their software has usability problems or is hard to sell.  This is often where I come in; to make an existing Flex application look hot.  This is backwards how you’re supposed to do software. It happens again and again because companies are rewarded through profit for good enough software.  While it costs them a lot more later to implement a design, at least they DO eventually recognize the value of it.</p>
<p>One of the biggest challenges I’ve had in winning new engagements is educating a potential new client on what the true value of quality is vs. “good enough”, as well as justifying the cost of good design and UX.  While iPhone was a game changer, <a href="http://www.enterprisemobiletoday.com/news/article.php/3898226/Android-Leads-Smartphone-Sales-Surge-in-2Q-Gartner.htm">Android sales are surging past it</a>.  From a consumer perspective, many would agree iPhone provides a better user experience compared to Android, yet that is not hindering Android sales success enough to prevent it from beating iPhone in total market share.  Having multiple operators, multiple device types, and targeting different demographics are all the primary drivers, none of which have to do with good UX.  This fact validates the “good enough” point, and makes it even more challenging for me to quantify the value of good design when it&#8217;s not a prerequisite for software profitability.</p>
<p>I still believe good design in software is a must IF you believe in quality.  It ensures less risk, time &amp; cost savings during development, and an overall better customer experience.  This in turn leads to saving a lot of money as well as making more money.</p>
<p><strong>New Goal #2</strong>: I need to get better at communicating the benefits good quality software will bring in both quantitative and qualitative ways.  I know what they are, but wrongfully assume my clients do as well.  Educating them with qualitative experience as well as providing hard numbers &amp; associated risk costs should help.</p>
<p><strong>New Goal #3</strong>: I need to quantify the savings &amp; benefits of doing design early vs. later since in my experience every client who does design last ends up spending more and having more risk &amp; technical debt.</p>
<p><strong>Selling Value, Not A Price</strong></p>
<p><a href="http://clarkhoward.com/">Clark Howard</a>, a consumer advocate and popular talk radio host recently said:</p>
<blockquote><p>One good thing about the recession is that it has taught us to be frugal consumers.</p></blockquote>
<p>He later went on to quote those retailers that did well in Q2 of this year.  Unsurprisingly, most were retailers who sold goods as cheap as possible (Walmart, Dollar Tree, etc).  I, however, consider my services top of the line goods because I continually focus on being the best.  Even in the recession, people still buy Porsche&#8217;.  This recession certainly has made me focus on what makes a <a href="http://www.forbes.com/2010/06/24/highest-quality-cars-2010-lifestyle-vehicles-jd-power.html">Porsche&#8217; a higher quality</a> choice than a Hyundai, and translating that into how I can sell my software services vs. competitors who compete on price.</p>
<p>There are a ton of expenses working for yourself.  People who work at companies as W2/employee&#8217;s often have no clue of these expenses, and often respond with <a href="http://www.consultantjournal.com/blog/consultant-fee-sticker-shock">sticker shock</a> to some quotes.  Some just have no idea of the costs of software.  Some are just playing the haggling game until I call their bluff.</p>
<p>I&#8217;ve spent years building the Jesse Warden <a href="http://jessewarden.com/2006/10/personal-branding-checklist.html">personal brand</a>, trying to<a href="http://crushitbook.com/"> cash in on my passion</a> and <a href="http://sethgodin.typepad.com/seths_blog/2008/03/why-bother-havi.html">not bothering to have a resume</a>.  Many of my first time clients have no idea who I am, nor who my company is.  If it&#8217;s a referral client, they&#8217;ve only gotten a distilled version.  Thus, I have to start from scratch to sell my expertise, my experience, and my company&#8217;s value.</p>
<p>Two of the recommendations I received from <a href="http://twitter.com/davidortinau">David Ortinau</a>, <a href="http://twitter.com/jeffbnimble">Jeff Roberts</a>, and <a href="http://twitter.com/egrasing">Ed Grasing</a> was to sell value, not price. I don’t compete on price; I ensure I’m the most expensive to associate myself with the quality I deliver.  This doesn’t work, though, if you don’t have an established brand the client can already recognize, like <a href="http://jessewarden.com/2009/04/how-to-do-a-ria-correctly.html">Cynergy</a>.  You can do this by showcasing past work; not just the project, but the VALUE it provided the previous client of yours.  Additionally, doing the legwork on how much it will cost them if they DON&#8217;T hire me/my company helps inspire a CYA (cover yo&#8217; arse) feeling.</p>
<p>I&#8217;ve done enough consulting to know projects that should of taken 3 months that took 8.  I&#8217;ve even bid on projects where I said it&#8217;d take 4 months, the client figured 2, and then I later hear from those who won the bid that it took 10.  Therefore, it shouldn&#8217;t be overly difficult for me to also create a project cost estimate based on what I know will happen when others who compete on price do it instead of me.</p>
<p><strong>New Goal #4</strong>: Create case studies from past clients that show the value my skills provided them, and how much money it saved/made them.</p>
<p><strong>New Goal #5</strong>: For new projects where I’m putting together a Statement of Work (SOW), also add what the cost will be without hiring me.</p>
<p><strong>Selling Myself as a Purple Cow</strong></p>
<p><a href="http://sethgodin.typepad.com/seths_blog/2008/03/why-bother-havi.html">Seth Godin</a> has an idea about making a product a <a href="http://www.sethgodin.com/purple/">Purple Cow</a>; something unique that stands out.  Things that makes me unique in the Flex Community are I know how to implement complex designs in Flex, have a thorough knowledge of the Flash Player from my Design Agency background doing Flash, and have an extensive network to use in hiring/sub-contracting additional help as well as answering questions outside my expertise domain.</p>
<p>Not once have I used those 3 things as a selling point to clients about what value I provide.  However, <a href="http://www.universalmind.com/">Universal Mind</a>, three times, has used those traits in selling me to THEIR clients, the now defunct ESRIA once, and <a href="http://www.roundarch.com/">Roundarch</a> once.</p>
<p>I&#8217;ve also recently joined <a href="http://webappsolution.com">Web App Solution</a> as a partner.  One of the goals was to further increase my networking value since I now have 3 additional senior Flex/Java/Blaze DS resources as well as their experience.</p>
<p><strong>New Goal #6</strong>: Use my unique traits to help sell my value to clients.</p>
<p><strong>Conclusions</strong></p>
<p>My goal this year was to double my rate for the sake of learning, and hopefully making more bling.  I want to break the glass ceiling by years end.  Even if I fail, I&#8217;ve learned so much already in trying.  I&#8217;ve also gotten really close a few times this year so I know I&#8217;m making progress.</p>
<p>Another over all goal that I&#8217;ve been pursuing is to seek out mentors in the business field vs. the software development one.  When starting out in software, the #1 thing that helped me the most, quickly, with the least pain was mentors.  Everything from official ones to simply reading their books/blog posts.  I&#8217;ve sought out entrepreneurs and others online, cornered ones I found at conferences I attend so I could grill them, and gotten a lot of good book recommendations for business as opposed to software.</p>
<p>The consolidated list of my new goals to help reach my New Years Resolution:</p>
<ol>
<li>Learn more about making money.</li>
<li>Get better at communicating the benefits good quality software will bring in both quantitative and qualitative ways.</li>
<li>Quantify the savings &amp; benefits of doing visual design early vs. later.</li>
<li>Create case studies from past clients that show the value my skills provided them, and how much money it saved/made them.</li>
<li>For new projects where I’m putting together a Statement of Work (SOW), add what the costs/risks will be without hiring me.</li>
<li>Use my Purple Cow/unique, standout traits (design integration, Flash Player knowledge, network) to help sell my value to clients.</li>
</ol>
<p>This is a lot harder than I thought.  My Dad just said to double my price and the work would roll in.  I&#8217;m not the salesman he is, though.  Either way, I&#8217;m making a lot of progress and learning a lot, so I know I&#8217;ll get there eventually.</p>
<img src="http://feeds.feedburner.com/~r/jessewarden/~4/IrR3rU7oYSI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jessewarden.com/2010/08/what-i-learned-about-trying-to-double-my-rate.html/feed</wfw:commentRss>
		<slash:comments>23</slash:comments>
		<feedburner:origLink>http://jessewarden.com/2010/08/what-i-learned-about-trying-to-double-my-rate.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=what-i-learned-about-trying-to-double-my-rate</feedburner:origLink></item>
		<item>
		<title>Agile Chronicles #12: Technical Debt</title>
		<link>http://feedproxy.google.com/~r/jessewarden/~3/gtPT8LS2yH0/agile-chronicles-12-technical-debt.html</link>
		<comments>http://jessewarden.com/2010/07/agile-chronicles-12-technical-debt.html#comments</comments>
		<pubDate>Fri, 30 Jul 2010 15:47:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<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 &#8230; <a href="http://jessewarden.com/2010/07/agile-chronicles-12-technical-debt.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></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>
<img src="http://feeds.feedburner.com/~r/jessewarden/~4/gtPT8LS2yH0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jessewarden.com/2010/07/agile-chronicles-12-technical-debt.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://jessewarden.com/2010/07/agile-chronicles-12-technical-debt.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=agile-chronicles-12-technical-debt</feedburner:origLink></item>
		<item>
		<title>Agile Chronicles #11: The Backlog and Product Development Challenges</title>
		<link>http://feedproxy.google.com/~r/jessewarden/~3/pjzOPM9HdAQ/agile-chronicles-11-the-backlog-product-development-challenges.html</link>
		<comments>http://jessewarden.com/2010/07/agile-chronicles-11-the-backlog-product-development-challenges.html#comments</comments>
		<pubDate>Wed, 28 Jul 2010 15:14:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<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 &#8230; <a href="http://jessewarden.com/2010/07/agile-chronicles-11-the-backlog-product-development-challenges.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></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>
<img src="http://feeds.feedburner.com/~r/jessewarden/~4/pjzOPM9HdAQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jessewarden.com/2010/07/agile-chronicles-11-the-backlog-product-development-challenges.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://jessewarden.com/2010/07/agile-chronicles-11-the-backlog-product-development-challenges.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=agile-chronicles-11-the-backlog-product-development-challenges</feedburner:origLink></item>
		<item>
		<title>Consulting Chronicles #4: Qualifying Leads</title>
		<link>http://feedproxy.google.com/~r/jessewarden/~3/KUYwK4LZlag/consulting-chronicles-4-qualifying-leads.html</link>
		<comments>http://jessewarden.com/2010/07/consulting-chronicles-4-qualifying-leads.html#comments</comments>
		<pubDate>Tue, 20 Jul 2010 19:57:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Consulting Chronicles]]></category>
		<category><![CDATA[consultingchronicles]]></category>

		<guid isPermaLink="false">http://jessewarden.com/?p=2346</guid>
		<description><![CDATA[Rather than make the typical lateral developer move to learning a new language, runtime, or IDE, I&#8217;m instead trying to bring in more business. What I want to talk about today are my challenges in doing so regarding qualifying leads. &#8230; <a href="http://jessewarden.com/2010/07/consulting-chronicles-4-qualifying-leads.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Rather than make the typical lateral developer move to learning a new language, runtime, or IDE, I&#8217;m instead trying to bring in more business.  What I want to talk about today are my challenges in doing so regarding qualifying leads.</p>
<p><strong>Introduction</strong></p>
<p>Early in the year, I knew I was done with freelance, and working with other consulting firms.  Freelance doesn&#8217;t make enough money, and working with other firms prevents you both from doing what you want to do, as well as making more money.  I could either build my own firm, which required a ton of branding &amp; marketing work, or just join an existing one.  There are pro&#8217;s and con&#8217;s to each and after weighing the options for about a year, I just joined <a href="http://webappsolution.com">Web App Solution</a> as a partner for a year to see how it went.</p>
<p><span id="more-2346"></span>I figured, even without doing a marketing push on my blog, Twitter, and speaking engagements, it was a shoe in to more, larger engagements.  My assumptions were WASI already had an existing client base I could tap into, having 3 additional Flex + Blaze/LiveCycle developers associated with me exponentially increased my value to clients, and I could leverage my existing brand to enhance both.</p>
<p>It hasn&#8217;t worked out like that at all.  The recession from the fall of 2008 is still in full effect.  Back in 2006/2007, I&#8217;d have 4 clients I&#8217;d court, and then pick 1.  Getting them to sign a SoW was cake; I wanted them, they wanted me; it was just the formalities on getting a number we could both agree on.  Last year, and this year, I&#8217;ve lost count of how many clients I&#8217;m courting.  It&#8217;s gotta be in the realm of at least 20 who are worth pursuing, and tons more who aren&#8217;t, yet may pay some money in between the larger engagements.  That, and my expectations for engagements are higher.  As a company, we have a lot of value from a resources, tax benefits, and experience perspective.  We can charge more for that value.</p>
<p>Additionally, the type of clientele I target are very different from the clientele I targeted when I was freelance.  To summarize, I used to target Flash engagements that lasted 6 weeks or less (often just 2 days).  When I got into consulting, the firms I used to work for would usually target engagements, often Flex, that lasted 2 months, 6 months, to 18 months.  The 2 month gigs often cost more for the client, but didn&#8217;t have a lot of consultants on-site, and thus weren&#8217;t very profitable.  The 6 month gigs were either small engagements to help a mid-size company get started a project, or more often to save their failing project.  The 18 month gigs were often larger enterprises who wanted to create some B2B product, and needed a partner to do so.  Meaning, they didn&#8217;t the in-house development resources, and thus hired the firm.</p>
<p>My firm targets the same types of 6 and 18 month gigs.  To get those kinds of gigs, however, is really hard.  Companies are sitting on $2 trillion dollars in the USA, and a lot of the banks have $1 trillion to lend; all aren&#8217;t spending/lending it to grow their business because our Congress is trying to pass some new bill to replace the failed Sarbanes/Oxley.  The 250+ new rules has them scared, and thus they are holding back doing anything until I they know what our crazy blue gov&#8217;t plans to do.  The 2000 page document that no one in the Senate has read, has 150 page summaries being sent out to various companies by their lawyers.  Yes, I&#8217;m aware that &#8220;summary&#8221; is the incorrect adjective to utilize for &#8220;150 pages&#8221;, but it is what it is.  Also, given my blog word count, I&#8217;m aware I&#8217;m not at liberty to judge (too harshly anyway).</p>
<p>Thus, I&#8217;ve had to work extra hard to ensure the leads (potential customers) I&#8217;m dealing with actually have money and can afford my company&#8217;s services.  Once that&#8217;s complete, I have to barrage them with questions to ensure I understand what they need, and my company is in fact what they need.  Third, I then have to draft some documents, usually a proposal, to ensure I&#8217;ve documented and shown I have a more than adequate understanding of what their company needs my company to build/fix/help them with.  Fourth, this needs to be formalized into an SoW that ensures we&#8217;re protected, the client is protected, clearly states what the client will get, and ensures we get fairly compensated for what we&#8217;re doing.  Fifth, we need to close the deal.  I don&#8217;t want to do any of that, however, unless I&#8217;ve ensured the potential customer has any potential, and thus is worth spending time on.</p>
<p>I really really really suck at those things, hence this blog post explaining what I&#8217;ve learned and what I think I don&#8217;t know, as well as what others have advised I do.</p>
<p><strong>Qualifying Leads</strong></p>
<p>Qualifying leads means ensuring that those who contact you have money, have valid work, and they are worth talking to.  Just because someone who emails you for a Flash job has no money, and no valid work doesn&#8217;t mean they aren&#8217;t worth talking to.  I&#8217;ve learned a lot about our industry just talking to clients, getting to know them, learning about what they are working on, their perceived challenges, and who they know.  These are valuable networking contacts, and sometimes gateways to future work.</p>
<p>That&#8217;s the exception to the rule, though.  Your gut can quickly tell you if someone over email/the phone is a client you want.  While there are a lot of exploratory things you can look for, I only want to know 3 things before I spend any time investing more time than a quick phone call/email reply:</p>
<ol>
<li>How long is the project?</li>
<li>Do you have money to fund the project to completion?</li>
<li>Am I and/or my company a good fit for the project?</li>
</ol>
<p><strong>Project Length vs. Sales Cycle</strong></p>
<p>In the past years of doing freelance and consulting, I&#8217;ve found you can spend a TON of time on qualifying leads if you&#8217;re not careful.  While sometimes this leads to good networking contacts, as well as helping your fellow contractors/freelancers pay it forward by referring clients to them if you&#8217;re busy, you also lose a lot money.  As a freelancer, the only way to make more money is to raise your prices or increase your hours.  Freelancers often don&#8217;t really have high overhead costs, so you can&#8217;t reduce overhead.  Thus, time spent talking to clients to get work is time NOT spent working on billable hours.</p>
<p>Incidentally, this is one of the reasons I specifically try not to do any Flash work anymore.  The length of those projects, 2 days to 6 weeks, is significantly less than Flex projects which last 2 months to 18 months.  Sometimes you actually spend the same amount of time talking to a client to get the ball rolling on the project which significantly cuts into your margins (aka, profit made working on the project minus how much time it took you to get the client to let you start working on the project).  If I&#8217;m going to spend 2 total weeks courting a client when it only leads to a month of work, that&#8217;s pretty costly.</p>
<p>What I&#8217;ve noticed is that a lot of Flash freelancers tend to have many clients going on at the same time.  The churn and frequency of clients is very high; this offsets their down time.  That, and Flash projects have high frequencies of intense activity, and then die off for days at a time, usually as the agency waits for a clients feedback.  This works to the Flash freelancer&#8217;s advantage to arrange their schedule to make multiple clients work.  Additionally, there are federal laws that ensure freelancers can set their own hours (although I&#8217;ve yet to meet a client who gives a shit).</p>
<p>Bottom line, you want the shortest sales cycle (time it takes to get the client to sign your contract, or you sign theirs, or both so you can actually start designing/coding) with the longest amount of work.  Any downtime between gigs is time you aren&#8217;t making money.  Charging $200 an hour doesn&#8217;t mean much if you only work 3 month out of the year because it&#8217;s so hard to find clients who are willing to pay that much.  For some people, that&#8217;s actually fine.</p>
<p><strong>Do They Have Money?</strong></p>
<p>If a client doesn&#8217;t have money, they are usually wasting your time.  There are rare cases where a client is actually putting feelers out; this could be a director at a medium to large company, or an Entrepreneur who is doing recon before he talks to his investors.  Additionally, it&#8217;s not as black as white as having money or not; some don&#8217;t have enough, and maybe you can work something out.  You need to have a clear idea of what you charge.  That topic is too large for this post, but I&#8217;ll let you know how I operate for context.</p>
<p>I believe in creating high quality software with a high quality team, and thus charge for that.  I don&#8217;t compete on price.  I don&#8217;t lower my price to score a deal because a client thinks I&#8217;m expensive.  I know what my competitors charge, and I know I&#8217;m one of the best, and thus price appropriately.  There is a major problem in our industry right now with Flex and Flash work sometimes bleeding into each other.  This includes a LOT of factors that muddy the waters, and require a lot of education, re-education, and clarification that you need to do with clients.  Some of it is subjective, too, because there are a TON of people who do compete on price right now in our recession, and can give the perception that your points aren&#8217;t valid.</p>
<blockquote><p>&#8220;I can go to Best Buy and buy a laptop for $300 right now&#8230; why the heck would I buy a $1,500 Mac?&#8221;</p></blockquote>
<p>You don&#8217;t see Porche lowering their quality and price just because we&#8217;re in a recession.  Neither do I.</p>
<p>Regardless, common problems include pricing Flex projects as Flash projects.  A lot of programmers have flocked to using Flex and Flash Builder.  While 5 years ago, most of us would of used Flash to build a Facebook widget, nowadays a lot will use the Flex SDK.  This causes 2 problems.  First, you often get high caliber programmers put on low caliber projects that do not utilize their full skill set.  Building an Enterprise RIA is most often done utilizing the Flex SDK by software developers.  A lot of smaller scale Flash work is now more often more easily done using the Flex SDK, but the price point for such work is still in the low caliber, &#8220;quick git-r-done&#8221; programmer range.  Additionally, the time estimations for such low caliber work are often geared towards a shorter shelf life with consumers often use the tools, not clients who have a feedback channel.  Thus, the deadlines, and thus quality of code, are significantly lower because they can be.  This leads to extremely short, non-moveable deadlines.</p>
<p>This goes counter to what most Flex Developers who build Enterprise RIA&#8217;s are used to; long deadlines, mostly negotiable because of Time &amp; Materials contracts, with good quality code.  There are a lot of up and coming Flash Developers who utilize Flex for some of these projects, and thus helps create additional confusion on why one person use the Flex SDK is $30 and hour, and another is $80; when they effectively &#8220;doing the same work&#8221;. *face palm*</p>
<p>If you are one of those Flash Developers, this is fine.  If your&#8217;e a Flex Developer, you often have to ensure the client even gets Flex.  Most real clients don&#8217;t care what technology you use.  However, Design Agencies service a completely different clientele than software shops/consulting firms do.  As such, you need to ensure the lead on the phone/over email is talking about a &#8220;true Flex project&#8221;.  Otherwise, they are doing a Flash project with Flex, and their rate expectations will reflect this.  This means they&#8217;ll often be WAY too low than what you were expecting even if they go on about &#8220;Flex consuming SOAP web services&#8221;.</p>
<p>Another common client I get is the eff&#8217;d one.  Their developer went AWOL, their team doesn&#8217;t know what they are doing and need mentoring, or they are slowly realizing they are getting screwed over by another company and need me to confirm it.  If they are a big company, they&#8217;ve actually often factored this into the budget, or can easily get these budgets approved very quick.  While it sucks that its&#8217; easier to get bling approved to cut your losses than it is to help increase your gains, my consulting career has confirmed this with a lot of large companies.  However, every so often I get a company who&#8217;s eff&#8217;d, or they might not even know they are eff&#8217;d, and do NOT have the budget to get themselves out of it.  Sometimes they do, but by hiring a $30/hr miracle worker.  Consulting in bad situations is bad enough, that&#8217;s why you charge for it.  Consulting in bad situations where they client cannot afford it are situations I don&#8217;t put myself in.  While it&#8217;s hard to get the true scope of death-incarnate over the phone, it&#8217;s pretty easy to get the client&#8217;s background and understand if they can fund the rescue operation or not.</p>
<p>Keywords for me include,  but are not limited to, the following:</p>
<ol>
<li>2 week project</li>
<li>coder is almost done, but pulled off on another project</li>
<li>we&#8217;re almost done, but this one feature is killing us, and we&#8217;re not sure how to do it (usually means someone who doesn&#8217;t know Flash Player capabilities sold their client on something that they couldn&#8217;t do, or couldn&#8217;t afford)</li>
<li>we&#8217;re an design agency</li>
<li>Flash widget</li>
<li>our game is having a few problems</li>
</ol>
<p>I could go on and on, but all of the above basically mean &#8220;we can&#8217;t afford your services&#8221;.  A 2 week project isn&#8217;t profitable unless I can ensure 20 of them come in exactly at 2 week intervals, and I don&#8217;t spend months trying to line them up this way.</p>
<p>If the coder is almost done, but was pulled off onto another project, it means the company is small, or doesn&#8217;t have the resources to tackle larger projects, thus they need you for staff augmentation.  I&#8217;ve seen a few rare instances where Flex projects have this happen, but pulling the main developer off of a 6 month Flex project isn&#8217;t smart at all, and there typically isn&#8217;t just 1 Flex developer.  Thus, it&#8217;s a Flash project, under a deadline, you&#8217;re left beholden to that developers&#8217; code, usually not using best practices because the company is more focused on getting it done, on time.  Software isn&#8217;t done &#8220;on time&#8221;; if you think it is, you&#8217;re not building software, you&#8217;re building some short shelf life Flash project for a client on a fixed budget.</p>
<p>The &#8220;this last feature we need a heavy hitter on&#8221; usually implies either something that shouldn&#8217;t have been sold to the client in the first place, or a wrong approach.  For the latter, sometimes you can often knock it out in a day, but 4 hours of back and forth with the client for 8 hours of work is extremely unprofitable.  This can get worse if you actually do a good job, and they start expecting you to fix their technical debt.  While more hours are nice, if you only budgeted a day for the project, it gets complicated to fit into your schedule.</p>
<p>&#8220;We&#8217;re a design agency&#8221; means they&#8217;re used to getting Flash contractors for $30 to $50 an hour, thus your software developer rates aren&#8217;t going to fly.  Worse, most companies/firms charge more for shorter gigs because you have to take resources off of other projects to help the client with their shorter, less flexible project.  This has a major cost, and thus you factor that into your price.  This, in turn, makes agencies often get a more incredulous look at your price.  Bottom line, they want a Flash freelancer, and I&#8217;m trying to provide them a resource from my company.  Wasn&#8217;t meant to be.</p>
<p>Flash widget.  I don&#8217;t know many Flex coders using Swiz, Continuous Integration, and attempting to master TDD in their SCRUM process who build Flash widgets.  Thus, you&#8217;re often left with a really small budget, that&#8217;s fixed, that&#8217;s already coded, on the timeline, and you&#8217;re beholden to that alien workflow.  Not going to work.</p>
<p>Our &#8220;game is having a few problems&#8221; is often the worse.  Games are actually some of the most challenging things to code.  In Enterprise architecture, you often have a long history of patterns and processes to cull from.  In games, you have to have good knowledge of algorithms, specific design patterns, and a good breadth of technical understanding of how the Flash Player works.  If a client is calling you to help them fix this, they should of called you in the first place.  I&#8217;ve lost 2 game gigs last year where they ended up calling me back to help them fix it; by then I was deep into a gig, and cursed myself for my lack of sales ability.  I don&#8217;t like when clients get bit by the obvious, getting what they pay for, but I also don&#8217;t like when I would of saved them, but am not given the opportunity to do so.  Gaming architecture is often more tightly coupled for performance reasons, and thus is way harder to fix.  Combined by the fact most games are done in agencies on fixed budgets with fixed deadlines, it&#8217;s just a lose lose situation.</p>
<p>As you can see, making sure leads aren&#8217;t looking for a Flash freelancer is hard.  Once Flex seeped its way into smaller Flash projects, it made the perception even worse.  A larger majority of the &#8220;gigs&#8221; I&#8217;m filtering out are those above.  I&#8217;m looking more for &#8220;engagements&#8221;; longer term Flex projects that are for building software for companies.</p>
<p><strong>Is My Company A Good Fit?</strong></p>
<p>The last filter for leads is confirming my company is a good fit.  While a client may have settled on Flash, oftentimes I can teach them about Flex and we go the right route.  However, if they have their heart set on a custom PHP/Python back-end, it&#8217;s more difficult to sell my companies services.  My dad would say, &#8220;If they ask if you can do PHP, you answer that yes, you can do PHP&#8221;.  I know PHP, and I&#8217;m sure my fellow partners do too, but we specialize in Java.  That&#8217;s not just a preference, but Java tends to exist in the real of larger Enterprises.  There are some, yes, that do PHP&#8230; but the clients who provide the longer term Flex gigs use Java.  Back in the day, you didn&#8217;t invest in Sun servers because they were 10 times what a LAMP stack costs because you were dumb; it&#8217;s because it was WAYYYY easier to get Sun/Java consultants than LAMP consultants.  If you&#8217;ve invested half a million of your company&#8217;s money into a project, and no one can help you fix it when it breaks, you&#8217;re screwed.  Thus, double the budget, and ensure it&#8217;s a well known tech that you can hire consultants on in case things go south.</p>
<p>Thus, usually by mentioning something other than Java for the back-end, that&#8217;s usually my first indication we won&#8217;t end up working together.  While both PHP and Java have a lot in common in the open source world, if they&#8217;ve invested in a LAMP stack, they are doing so for cost reasons (most anyway).  Most large companies I&#8217;ve worked with do not care at ALL about cost; they care about making money.  If their costs are high, they focus harder on making more money to cover those costs.  I&#8217;ve seen a lot of good businesses run on LAMP, but they often aren&#8217;t the ones financing long term Flex projects.  Thus, middle-tier technology choice is often my first clue.</p>
<p>Another is vibe.  Does the client sound like someone I&#8217;d want to work with?  In freelancing, you can be way more forgiving.  If the client yells at the designer in front of you and makes her cry, you can usually hold your tongue, knowing you won&#8217;t have to work for that mean person anymore who doesn&#8217;t respect women in 2 weeks because you&#8217;ll be done.  For Flex projects that tend to last months, even a year; you&#8217;re basically entering a long term relationship.  You really need to ensure you both have the same set, or at least mostly common, beliefs.  If the client is more interested in getting it done than doing it right, I actually respect this because they believe in making money.  Clearly they respect the craft because they are still talking to someone like me who believes in finding that middle ground.  Now, keep in mind Jesse Warden is focused on quality first, money second.  Others are focused on money first, quality second.  It seems trivial, but when this forms the basis of your belief structure, you can get widely different responses on what client is worth forming a relationship with.</p>
<p>For example, if I can tell it&#8217;s going to be a staff augmentation job where you&#8217;re placed inside a huge company who doesn&#8217;t mind if you produce nothing of value for 9 months, most rational company owners would definitely move forward, and ensure more developers could be put on the project.  Once you take your cut, you ensure a significant amount of revenue flows your way, AND the risks are low; win win.</p>
<p>Not for me. I don&#8217;t want to spend 18 months of my life producing no value for my clients.  I didn&#8217;t invest 10 years of my life, 18 hours a day, every day honing my craft only to waste it warming a chair, judging the previous vendor&#8217;s code base and doing nothing to change it.</p>
<p>That said, I&#8217;ve had to lower my idealistic expectations a bit.  A lot of large companies who fund the engagements I want to be on often DO want me to produce value for them, they just don&#8217;t know how, and it&#8217;s just REALLY hard to get message across over a phone call.  That, and some of these larger companies don&#8217;t run as a dictatorship, and it&#8217;s harder to get things done in a democracy.</p>
<p>My dad the salesmen says, &#8220;You need to ask them questions.&#8221;  I&#8217;ve taken this a step further and asked them the same questions twice.  This can give me insight into their true motives.  Some clients really want you to come there, make bling, and help them create awesome software.  Others want me to work for free, or at least do the discovery phase for free.  The challenge I have is discerning between what the client needs to be educated about, and what they truly believe, and where we can meet in the middle to form a working relationship.</p>
<p>I&#8217;m still not sure what&#8217;s a good fit, but so far my criteria of ensuring they having money, paying for the discovery phase, and signing Time &amp; Materials contracts is good enough so far; weeds out 90% of the non-valid ones.</p>
<p><strong>Conclusions</strong></p>
<p>I&#8217;ve got the initial pitch down.  I listen, and ask a ton of questions.</p>
<p>The guys I work with are better at the above than I am.  They are, slowly, working with me to better understand who I should focus on, how, and how their SoW formulation process works (because mine clearly doesn&#8217;t scale to the Enterprise).</p>
<p>However, because of my personal brand and my vast network, I have an easier time of getting a plethora of leads.  Sometimes a hand off isn&#8217;t practical, and I need to feel them out directly.  Sending a bunch of $30/hr, 2 week, Flash gigs to my partners is just a waste of time.  I end up doing a lot of legwork talking to clients, feeling them out, and qualifying them as potential customers.  I&#8217;ve still got a lot to learn, and feel like a budding AS1 developer.</p>
<p>Another thing that&#8217;s extremely frustrating is that my personal brand right now does NOT reflect the clientele I want at all.  The honest, edgy, and high strung Jesse Warden is not what Enterprise clients are used to.  I&#8217;d argue that&#8217;s what you need to get anything done there.  Once I&#8217;m in these companies I can work my magic.  The problem is, I&#8217;m seen as the medicine they don&#8217;t want to take.  I&#8217;ve had 2 different salesman from a former consulting exclaim how they&#8217;d love to have me on a project, but they don&#8217;t see how I&#8217;d fit.  They&#8217;ve never seen me on-site with a client, in business attire, having a calm meeting with them working through their issues.  What they see is me at conferences rousing with my fellows in the industry, speaking at conferences being &#8220;me&#8221;, and giving honest accounts of how I do things.</p>
<p>That works great in the freelance game, and even in the consulting firm game, but not in the &#8220;I&#8217;m my own company&#8221; game.  Leads keep coming to &#8220;jessewarden.com&#8221; and contacting me as Jesse Warden vs. webappsolution.com and contacting me as WASI.  We&#8217;re in a huge rebranding effort right now which I believe will help.  Still, it&#8217;s effing frustrating.</p>
<p>Tom Link from Universal Mind once told me:</p>
<blockquote><p>&#8220;You don&#8217;t hire Schematic to get Schematic; you hire Schematic to get Danny Patterson.  Just because you hired Schematic doesn&#8217;t mean you get Danny Patterson&#8221;.</p></blockquote>
<p>I&#8217;m not sure if it was Danny Patterson or not, but that&#8217;s not the point; the point is, I know I&#8217;m sitting on a gold mine with my brand, but I&#8217;m not sure how to leverage it to make more bling.  Many people have been very forthcoming with advice, but none of it seems to work, or I&#8217;m just doing it wrong.  Many businessman who already make money in Flash/Flex without coding in Flash/Flex, and getting others to code for them, have told me I could be infinitely more rich than they were if I just leveraged my name to bring in business.  I&#8217;m not ready to do a marketing blitz on WASI just yet; we&#8217;re not ready, but I&#8217;m not sure what it would do if I did?</p>
<p>At this point, I&#8217;d argue that I could only do that doing Agency work because right now, all the Flex clients are either in Manhatttan&#8217;s financial sector, or through the magical, and elusive Adobe Professional Services gateway.  If I want those types of clients, I&#8217;ll have to start watching my mouth, redesign the format of my blog, and start playing the game differently; &#8220;clean up my act&#8221; as it were.  I&#8217;m not yet convinced I need to do that.</p>
<p>However, I&#8217;m a little frustrated I&#8217;ve spent years curating (buzzword bingo, WIN!) my personal brand only to have it cap out at some dollar amount.  Eff that.  I recognize if I want to make bling, I&#8217;ll eventually have to stop coding, and get others to code for me. Fine&#8230; but right now, I can&#8217;t seem to score the bigger clients.  I know we&#8217;re in a recession, and even if the big clients have money, they won&#8217;t spend it.  Those who typically just get a loan now, can&#8217;t.  I get it, I really do; I recognize I need to use context in understanding the current economic climate and it&#8217;s affect on rates, and frequency of work.  Our client sales cycles have tripled in the last 2 years because of it.  Clients still are signing, it&#8217;s just taking longer.</p>
<p>That said, people still buy Porches during the recession.  I just want to know how to get them and stop wasting my time with these damn recruiters that never give me anything of value, nor these small potatoes Flash gigs.  My dad gets mad when I ask him advice for this, and threatens to start working for me.  I don&#8217;t work with family.  However, at this point, I&#8217;m uber close to start focusing 50% of my attention on hiring a salesman, because this is ridiculous. Maybe it isn&#8217;t ridiculous, and it&#8217;ll soon be great, it just sucks now cause I suck at it.  People on Twitter have suggested I&#8217;m great at scoring the lead + the initial conversations, I just need to hire a <a href="http://www.youtube.com/watch?v=y-AXTx4PcKI">closer</a>.  :: shrugs ::</p>
<img src="http://feeds.feedburner.com/~r/jessewarden/~4/KUYwK4LZlag" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jessewarden.com/2010/07/consulting-chronicles-4-qualifying-leads.html/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://jessewarden.com/2010/07/consulting-chronicles-4-qualifying-leads.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=consulting-chronicles-4-qualifying-leads</feedburner:origLink></item>
		<item>
		<title>Interview with Jesse Freeman – JXLTV Episode 9</title>
		<link>http://feedproxy.google.com/~r/jessewarden/~3/OUbpCZrUZWI/interview-with-jesse-freeman-jxltv-episode-9.html</link>
		<comments>http://jessewarden.com/2010/07/interview-with-jesse-freeman-jxltv-episode-9.html#comments</comments>
		<pubDate>Mon, 19 Jul 2010 15:19:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[360flex]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[apparat]]></category>
		<category><![CDATA[fitc]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[jesse freeman]]></category>
		<category><![CDATA[jxltv]]></category>
		<category><![CDATA[swf2xna]]></category>

		<guid isPermaLink="false">http://jessewarden.com/?p=2335</guid>
		<description><![CDATA[var flashvars = {}; var params = { allowScriptAccess: "always", allowFullScreen: "true" }; var attributes = { id: "viddler_ff77444d", name: "viddler_ff77444d" }; swfobject.embedSWF("http://www.viddler.com/player/ff77444d/", "viddler_ff77444d", "437", "287", "9.0.0","http://www.jessewarden.com/expressInstall.swf", flashvars, params, attributes); Download References: Swf2XNA Port Flash Games to XNA a lot &#8230; <a href="http://jessewarden.com/2010/07/interview-with-jesse-freeman-jxltv-episode-9.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="viddler_ff77444d" name="viddler_ff77444d">
<pre style="border: 0px; margin: 0px;">
<object type="video/mp4" data="http://jessewarden.com/archives/jxltv/jxltv-episode-009.jpg" width="460" height="258"><param name="controller" value="false" /><param name="src" value="http://jessewarden.com/archives/jxltv/jxltv-episode-009.jpg" /><param name="href" value="http://jessewarden.com/archives/jxltv/jxltv-episode-009.mp4" /><param name="target" value="myself" /><img src="http://jessewarden.com/archives/jxltv/jxltv-episode-009.jpg" alt="JXL TV Episode 9"></img>
		</object>
</pre>
</div>
<pre style="border: 0px; margin: 0px;"><script type="text/javascript">

var flashvars = {};
var params = {
	allowScriptAccess: "always",
	allowFullScreen: "true"
};
var attributes = {
  id: "viddler_ff77444d",
  name: "viddler_ff77444d"
};

swfobject.embedSWF("http://www.viddler.com/player/ff77444d/", "viddler_ff77444d", "437", "287", "9.0.0","http://www.jessewarden.com/expressInstall.swf", flashvars, params, attributes);

</script></pre>
<p><a href="http://jessewarden.com/archives/jxltv/jxltv-episode-009.mp4">Download</a></p>
<p><span id="more-2335"></span><b>References:</b></p>
<ul>
<li>Swf2XNA</li>
<ul>
<li><a href="http://www.appatic.com/2010/07/swf2xna-port-flash-games-to-xna-lot.html?utm_source=twitterfeed&#038;utm_medium=twitter">Port Flash Games to XNA a lot Faster</a></li>
<li><a href="http://blog.debreuil.com/?p=152">Getting Started with XNA</a></li>
</ul>
<li><a href="http://www.infoq.com/articles/enterprise-flex">InfoQ: State of the Art in Enterprise Flex Frameworks</a></li>
<li><a href="http://blog.joa-ebert.com/2009/08/11/apparat-is-now-open-source/">Apparat</a></li>
<li><a href="http://www.hobnox.com/">Hobnox Online Audio Tool</a></li>
<li><a href="http://www.fitc.ca/events/about/?event=110">FITC San Francisco &#8211; Flash &#038; Flex Conference</a></li>
<li><a href="http://www.360flex.com/">360Flex &#8211; Flex Conference in DC</a> | <a href="http://www.360flex.com/register/">Register Now!</a></li>
<li>Jesse Freeman</li>
<ul>
<li>Follow Jesse on <a href="http://twitter.com/theflashbum">Twitter</a></li>
<li><a href="http://flash.developerartofwar.com/">Flash Art of War</a></li>
<li><a href="http://www.jessefreeman.com/">Personal Site</a></li>
</ul>
</ul>
<p><b>Beer:</b></p>
<p>Heavy Seas: Smoke on the Water &#8211; <a href="http://beeradvocate.com/beer/profile/898/59396">Beer Advocate</a> | <a href="http://www.hsbeer.com/">Brewery</a></p>
<img src="http://feeds.feedburner.com/~r/jessewarden/~4/OUbpCZrUZWI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jessewarden.com/2010/07/interview-with-jesse-freeman-jxltv-episode-9.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://jessewarden.com/archives/jxltv/jxltv-episode-009.mp4" length="183003200" type="video/mp4" />
		<feedburner:origLink>http://jessewarden.com/2010/07/interview-with-jesse-freeman-jxltv-episode-9.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=interview-with-jesse-freeman-jxltv-episode-9</feedburner:origLink></item>
	</channel>
</rss>
