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

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

<image>
	<url>https://jessewarden.com/wp-content/uploads/2016/08/cropped-Lambda2-32x32.png</url>
	<title>software &#8211; Software, Fitness, and Gaming &#8211; Jesse Warden</title>
	<link>https://jessewarden.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Some Notes To Consider on the Technical Difficulties with Healthcare.gov</title>
		<link>https://jessewarden.com/2013/10/some-notes-to-consider-on-the-technical-difficulties-with-healthcare-gov.html</link>
					<comments>https://jessewarden.com/2013/10/some-notes-to-consider-on-the-technical-difficulties-with-healthcare-gov.html#comments</comments>
		
		<dc:creator><![CDATA[JesterXL]]></dc:creator>
		<pubDate>Tue, 22 Oct 2013 21:05:23 +0000</pubDate>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[aca]]></category>
		<category><![CDATA[consulting]]></category>
		<category><![CDATA[healthcare]]></category>
		<category><![CDATA[healthcare.gov]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[technicaldebt]]></category>
		<category><![CDATA[websites]]></category>
		<guid isPermaLink="false">http://jessewarden.com/?p=4426</guid>

					<description><![CDATA[I&#8217;m not involved. I am not saying I&#8217;m for/against ACA. That said, a few things I&#8217;ve gleaned from a few of the technical views on the internet that weren&#8217;t from a higher profile source such as the NY Times: http://www.nytimes.com/2013/10/21/us/insurance-site-seen-needing-weeks-to-fix.html First, when management says &#8220;a few weeks&#8221;, what that really means is a few months. [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I&#8217;m not involved. I am not saying I&#8217;m for/against ACA. That said, a few things I&#8217;ve gleaned from a few of the technical views on the internet that weren&#8217;t from a higher profile source such as the NY Times:</p>
<p><a href="http://www.nytimes.com/2013/10/21/us/insurance-site-seen-needing-weeks-to-fix.html" rel="nofollow">http://www.nytimes.com/2013/10/21/us/insurance-site-seen-needing-weeks-to-fix.html</a></p>
<p><span id="more-4426"></span>First, when management says &#8220;a few weeks&#8221;, what that really means is a few months. Yes, months.</p>
<p>Second, because it&#8217;s so big with many of the parts not under the purview of the contractor, they can&#8217;t rewrite it. That means, it&#8217;ll take 2 times or more longer.</p>
<p>Third, bringing on additional contractors/people will not help fix the problem. There was a book written in the 1970&#8217;s called the Mythical Man Month that debunked the claim that adding more programmers will make things get done faster. It causes the opposite. See Slate&#8217;s coverage here:Â <a href="http://www.slate.com/blogs/moneybox/2013/10/21/obamacare_and_the_mythical_man_month.html" rel="nofollow">http://www.slate.com/blogs/moneybox/2013/10/21/obamacare_and_the_mythical_man_month.html</a></p>
<p>Fourth, launching a site before it&#8217;s fully tested is fine and encouraged. Software, currently, has no fool proof way to detect for all problems. There are certainly languages and programming techniques some mathematicians can use, but that&#8217;s not the tools the private sector uses to build web sites.</p>
<p>Fifth, even if fixed, it&#8217;s clear the parties they&#8217;re responsible for connecting to for customer data are a huge component and huge part of the problem such as the Centers for Medicare and Medicaid Services. Since they are not under the direct control of CGI Federal, the contractor originally responsible to buildÂ <a href="http://healthcare.gov/" rel="nofollow">healthcare.gov</a>, there is only so much you can do to compensate for someone else&#8217; incompetence &amp; lack of communication. Meaning, holding CGI solely responsible unfortunately is not an option. It&#8217;d be easy to blame CGI for the failings, but that&#8217;s not how software, and our bloated government, work.</p>
<p>Sixth, 8 out of 10 software projects are failures, and 9 out of 10 are perceived as failures. Software is hard. We do it not because it&#8217;s a lottery, but because when it works it makes a huge difference despite the huge assurance we&#8217;ll fail.</p>
<p>Things will slowly improve. There will continue to be glitches, some of which the press may even talk about, a year from now. Jan 1st deadline is unrealistic.</p>
<p>&#8230; and for those who are curious about what just 6 million lines of code can do vs. 500 million, check it:Â <a href="http://arstechnica.com/information-technology/2013/10/the-navys-newest-warship-is-powered-by-linux/" rel="nofollow">http://arstechnica.com/information-technology/2013/10/the-navys-newest-warship-is-powered-by-linux/</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://jessewarden.com/2013/10/some-notes-to-consider-on-the-technical-difficulties-with-healthcare-gov.html/feed</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Breaking the $100 Per Hour Barrier</title>
		<link>https://jessewarden.com/2013/09/breaking-the-100-per-hour-barrier.html</link>
					<comments>https://jessewarden.com/2013/09/breaking-the-100-per-hour-barrier.html#comments</comments>
		
		<dc:creator><![CDATA[JesterXL]]></dc:creator>
		<pubDate>Sun, 15 Sep 2013 15:01:29 +0000</pubDate>
				<category><![CDATA[Branding]]></category>
		<category><![CDATA[Business Process]]></category>
		<category><![CDATA[Marketing]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[1099]]></category>
		<category><![CDATA[consulting]]></category>
		<category><![CDATA[corptocorp]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[freelance]]></category>
		<category><![CDATA[money]]></category>
		<category><![CDATA[personalbranding]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[proposition]]></category>
		<category><![CDATA[rate]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[value]]></category>
		<category><![CDATA[w2]]></category>
		<category><![CDATA[w9]]></category>
		<guid isPermaLink="false">http://jessewarden.com/?p=4382</guid>

					<description><![CDATA[I get this question at least once a year so thought I would write a blog post on it to help others. &#8220;How do I make more than $100 per hour?&#8221;. I&#8217;ve learned a few ways and wanted to share them below. If you want to save time, simply do something other than programming such [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I get this question at least once a year so thought I would write a blog post on it to help others. &#8220;How do I make more than $100 per hour?&#8221;. I&#8217;ve learned a few ways and wanted to share them below. If you want to save time, simply do something other than programming such as flipping houses, investment banking, or being the boss of a mid size company. They make way more money than we do. If you still love programming, but just want to know your options for making more money, read on.</p>
<p>I won&#8217;t cover whether money can buy you happiness or not. All I&#8217;ll say is that for some people it does, and others it does not.</p>
<p>Many of the financial and tax nomenclature below applies to the USA, but the types of work are the same regardless of country.</p>
<p><span id="more-4382"></span><strong>Introduction</strong></p>
<p>Early on my consulting career, I found the maximum amount of money I could charge per hour was $100/hr. I had just assumed it was a simple linear graph: the more time that goes, the more experienced &amp; marketable I get, thus the more money I can make per hour. This wasn&#8217;t the main metric I used to measure my success, but it&#8217;s certainly how a lot of people, at least in America, do. &#8220;How much money do you make?&#8221;</p>
<p>As time went on, and I actually did get more experienced, I learned it&#8217;s not a linear line. A variety of things can happen, or not, to affect it&#8217;s elevation. Examples include not working for a couple months, whether intentionally or not. There are a variety of stages you can possibly go through, at least in software development, and I&#8217;m still learning all the possible vs. desirable ones.</p>
<p>The basics are starting out in an internship or job, then breaking away to do freelance, and finally starting a company.</p>
<p>Below are the 3 things that don&#8217;t work.</p>
<p><strong>W2 &#8211; Salaried Employee</strong></p>
<p>Salaried employees are those who work for a company, called a &#8220;job&#8221;, and that company takes out your State and Federal taxes for you. They pay a salary, a flat amount of money per 1 days worth of work, whether you actually work 1 hour or 12 doesn&#8217;t matter. They also offer &#8220;compensation packages&#8221; such as 401k matching, 20 or more vacation days, and 5 or more sick days. People put their own arbitrary dollar amounts on these which helps companies offset their lowered salaries.</p>
<p>The problem with W2 is that you eventually max out. I&#8217;ve yet to see a salaried programmer make more than $175,000, although most are $120,000. That&#8217;s gross, not net. That&#8217;s still only about $90 an hour if you take out vacation days and holidays. You&#8217;re replaceable, and there is only so much code you can produce in a given time on your own. Although there are <a href="http://www.dungeonsanddevelopers.com/">skill trees for development</a>, getting better doesn&#8217;t lead to making more money. You basically have to go into management, leadership, or sales to sometimes fully utilize all those software skills you know. There are SOME options for hybrid roles such as Enterprise Architects, people who dictate how to build things but don&#8217;t actually build the things. Sales Engineers are another. You travel with a Sales person and get their back when the clients ask highly technical questions. Sometimes you get to code, but they&#8217;re often just simple prototypes, not real projects.</p>
<p>Finally, W2 is perceived as a form of &#8220;stability&#8221;; something long term, something earned and deserved. Unfortunately, that&#8217;s how things were back in the 1940&#8217;s, not anymore. Regardless, the prophecy is self-fulfilling for some people, so they believe it to be true, and thus it is true even if it&#8217;s not.</p>
<p>Unless you actually want to get out of programming, W2 isn&#8217;t an option.</p>
<p><strong>1099 &#8211; Freelance</strong></p>
<p>Freelancers usually charge by the hour or project (obviously they like the former). They are synonymous with contractors: someone who works for the company but is their own business. Your own business can just be 1 person: you. You are ultimately responsible for all of your finances and taxes, thus you file a form for the IRS called a 1099. The common rule is when you get a paycheck, you immediately take 33%, round up, and shove into savings so you can pay once a month, 4 times a year, or once if you&#8217;re a slacker the taxes you owe the State you live in and the IRS. None of that includes your operating expenses like buying your own computer, contributing to your retirement, and paying your own medical insurance.</p>
<p>The key here, though, is you can pay those first, THEN get taxed on what you have left over using &#8220;pre-tax&#8221; money whereas in W2, you&#8217;re taxed twice: first on your paycheck and then whatever you buy with it, the IRS still assumes you made X per year. For example, lets say you make $100,000 per year. You then buy $50,000 worth of hardware, software, and office space. You then only owe $16,500 in taxes vs. $33,000 like you would as a W2. This desire to spend your pre-tax money, whether on stuff, services, or even contributing to retirement accounts like SEP IRA&#8217;s is yet another to balance in your time that has nothing to do with programming. W2&#8217;s don&#8217;t have to worry about any of this crap.</p>
<p>This amount of work is not to be understated. This is how many companies go out of business. It&#8217;s also a lot of work for 1 person to handle just 1 persons business finances, let alone all the time spent hustling to get clients. More importantly, though, companies bear this &#8220;burden&#8221; when hiring W2&#8217;s. This is why a lot more companies are going the 1099 route or hiring contractors for set projects, not providing benefits, nor the &#8220;free&#8221; tax services like <a href="http://www.bbc.co.uk/news/uk-24017011">Amazon and others are doing in the UK</a>Â and in the states.</p>
<p>There are a variety of reasons programmers go freelance. There is no growth potential at their W2 job. They don&#8217;t like the clients they&#8217;re working with and want to choose their own. They have short attention spans and want smaller projects. They hate the large code base they&#8217;re working on that&#8217;s messed up and they didn&#8217;t create, and want the opportunity to create their own. They want to utilize a completely different technology stack and there is no opportunity to do so at their current job.</p>
<p>Whatever the reason, the POTENTIAL exists for making more money than W2. Sometimes, you&#8217;ll make less. The reasons for those are also numerous. While you may get many high paying gigs, you may actually have many weeks or months with no work. While W2 has a steady paycheck, 1099 does not. Additionally, there is a cost of doing business that you now incur. Time spent on the phone, writing emails, going to meetings and conferences, writing books, blog entries, curating relationships with your content and others on social media; all of that takes a lot of time that no one is paying you for. Some of that could lead to getting a client to hire you to build something. Sometimes that client just wants free consulting, or is asking you and 9 other contractors to bid on a project and they just want you to do the quote for them with zero intention of actually hiring you.</p>
<p>The reasons are vast. The theory, though, is that you&#8217;re using a technology with either a local market (where you live) that has a need for your skills, a remote market (meaning you telecommute with clients you&#8217;ll never meet face to face), or both. Sometimes you&#8217;ll get many concurrent projects. While one project has slow communication and is long term, and other is more clear, and shorter. While you&#8217;d prefer to have both side by side, the companies hiring you, and their clients, usually dictate the schedule, and they don&#8217;t care that you haven&#8217;t had any work all June and July, and now 3 companies want to start work immediately in August all at the same time. Sometimes that can work; other times it can sacrifice your code quality so you can only get one.</p>
<p>Bottom line, this is where most programmers get stuck. If they do manage to break the $100/hr barrier, it&#8217;s because they got a fixed bid contract and just did it in a shorter time. Meaning you produce the work for this amount of money, no more. If you work 4 hours or 40, you still get paid the lump sum. So, if you can do 40 hours worth of work for less than 40, then great, you just made more than $100/hr. Sadly, this is just 1 week out of the year. It also doesn&#8217;t factor in the cost of doing business to actually get that contract signed.</p>
<p>1099 is a mindset. You either like the freedom, the &#8220;harder I work, the more I get paid&#8221;, or just the lifestyle of having your clients&#8230; even if those clients are just like a W2, only with none of the benefits. Worse, many large companies cannot do work directly with 1099&#8217;s, and want to do W9. While that&#8217;s fine, it&#8217;s usually assumed those W9&#8217;s are a preferred vendor, or have workman&#8217;s comp and a lot of other bs that isn&#8217;t needed and doesn&#8217;t matter. If you get the W9, great, but if you&#8217;re not a preferred vendor and you haven&#8217;t convinced the company to go through the process, you&#8217;ll simply have some company you&#8217;ve never heard of take $10 to $30 an hour off your paycheck. Horrible.</p>
<p>Independent Contractor programmers, someone who owns a company strictly as a tax shelter and is a single person, aren&#8217;t usually paid more than $100/hr outside of California, New York, or Boston. So 1099 is usually a no go (exceptions below).</p>
<p><strong>Recruiters</strong></p>
<p>Recruiters are a waste of your time, and theirs.</p>
<p>Many companies lack the resources to &#8220;find you&#8221;. Even if you make yourself easy to find on the internets, they often won&#8217;t look. Swimming through mountains of programmer social media is less savory than paying a fee to someone to &#8220;find me someone with these skills&#8221;. While smaller companies who recognize the value of good talent DO use Github, LinkedIn, and Google to search for people such as yourself, they aren&#8217;t going to dump bling into your lap.</p>
<p>Thus, recruiters are often the gateway to jobs nowadays. Many in large companies like recruiters because it&#8217;s not their money being spent, and a litany of resumes arrive in their email with them not having to do anything but ask HR to send a list of requirements of what they need. As such, most job sites nowadays such as Monster, Dice, LinkedIn, etc. are owned by recruiters. I say owned because finding a job posting that ISN&#8217;T a recruiter is rare. If it&#8217;s not, the likelihood of someone with your skills getting past the often horrible interview web applications or HR wall (&#8220;Yes, mam, as I&#8217;ve told you, MVP is just like MVC, and Ember and Backbone share many characteristics, so if you know one, you can easily learn the other and be prod&#8230; mam? Hello?&#8221;)&#8230; all for W2 position we&#8217;ve already talked about is a no go.</p>
<p>They&#8217;ve seen their business explode since the information age started back in the 80&#8217;s and 90&#8217;s. We have some of the worst unemployment, underemployment, and those giving up and leaving the workforce since 1979. This means a few things.</p>
<p>First, it&#8217;s just &#8220;normal&#8221; nowadays that mid-size and large companies use them. You may not like the game, so you can either get played by it, play it, or make your own rules.</p>
<p>Second, a lot of them are NOT there by choice. We have a swath of college educated youngsters with degrees not in the Art disciplines who just can&#8217;t find jobs that their degrees implied. Many went to recruiting because they had no other choice.</p>
<p>Therefore, you shoulder never be rude to them for the above reasons. Yes, I troll them every chance I get, but that&#8217;s in good fun. You should never be rude; you never know when you have zero choice but to go through a recruiter for a job. We&#8217;re extremely lucky in software, and history shows it will not last.</p>
<p>Keep in mind larger consulting firms like Accenture, Deloitte, IBM, Randstad, etc. are hybrid. They sometimes act like staffing companies, but often have internal divisions that do consulting. Meaning, although they recruit you, can you get above $100/hr rates with them which often includes lots of travel, but is still longer term projects. Still, better to err on the side of caution; bring up money first to save yourself time.</p>
<p>That said, again, recruiters are a waste of your time, and theirs. I made $80,000 at one large company, and another $140,000. We went through the same recruiting firm for the same position. When I once was hiring for my client, the recruiting firm was charging $200/hr and paying him $80/hr. Finally, recruiter rates are beholden to the location in which they are hiring. You won&#8217;t get New York city rates in Nashville even if the recruiting firm is national; companies, even for telecommuters, often pay the local rate.</p>
<p><strong>5 Solutions</strong></p>
<p>So if &#8220;a job&#8221; caps out at or below $100/hr, freelance has no growth potential with maintenance pain, and recruiters are worthless, what to do? You have 5 options that I&#8217;ve seen work. I&#8217;m sure there are more, I&#8217;m just basing the below on what&#8217;s worked for me, others I know, and what I&#8217;ve seen work from past clients who&#8217;ve done it.</p>
<ol>
<li>Build a Personal Brand</li>
<li>Score a large client</li>
<li>Find a Closer</li>
<li>Find a network and form a firm</li>
<li>Start a business</li>
</ol>
<p><strong>Build a Personal Brand</strong></p>
<p>I&#8217;ve written about <a href="http://jessewarden.com/2006/10/personal-branding-checklist.html">Personal Branding</a>Â 7 years ago. I even <a href="http://www.youtube.com/watch?v=R4HP08mlefk&amp;list=PLZEZPz6HkCZl7gJELOkwz5WF4pTahlUB7">talked in depth about Personal Branding in my video series</a> about becoming a successful freelancer. Make no mistake; the level of effort is inversely proportional to how bad ass you are. This includes either your talent &amp; technical prowess at programming, your charisma, or both. The less awesome you are, the harder you have to work. That&#8217;s called life.</p>
<p>Worse, if you cultivate a rock star status, whether on purpose or by accident, fame is fleeting. Trends in software occur just like they do in the music industry. A library you wrote, a blog post that became popular, or an app that scored you money and fame&#8230; is only temporary and you can only milk it so long. A personal brand is something that is cultivated often, like a garden. The decisions you make in the beginning help guide it and create expectations amongst those in the industry.</p>
<p>Writing blog posts, contributing to open source, releasing helpful code, speaking at conferences, and writing books are all staples of building a personal brand for yourself. Additionally, networking and PARTICIPATING in the industry, even if it&#8217;s just your small niche, are important. You want people to like you, you want them to want to work with you, and most importantly, THEY should be selling the client on you, not you selling the client on you. <a href="http://sethgodin.typepad.com/seths_blog/2008/03/why-bother-havi.html">You don&#8217;t have a resume</a>.</p>
<p>Those who have cultivated their epics skills/personality/brand are rife. Martha Stewart, Rachel Ray, Dr. Oz, Oprah, Craig Ferguson, Conan O&#8217;Brien, etc. In our industry, <a href="http://gskinner.com/blog">Grant Skinner</a>, <a href="http://en.wikipedia.org/wiki/Bruce_Eckel">Bruce Eckel</a>, <a href="http://en.wikipedia.org/wiki/Linus_Torvalds">Linus Torvalds</a>, <a href="http://ejohn.org/">John Resig</a>, <a href="http://www.paulirish.com/">Paul Irish</a>, <a href="http://joelhooks.com/">Joel Hooks</a>, <a href="http://infrequently.org/">Alex Russell</a>, <a href="http://www.joshuadavis.com/">Joshua Davis</a>, <a href="http://www.joa-ebert.com/">Joa Ebert</a>, and <a href="http://ricardocabello.com/blog">Ricardo Cabello</a> (<a href="http://www.mrdoob.com/">Mr Doob</a>).</p>
<p>You may not know some of them, which is fine, but also potentially brings up a good point. Some of them spend more time using their talents, and the fame is just a byproduct of that, whilst others get the marketing angle, and help accentuate their work. People like me are 90% big mouth, 10% contribution. Any combination works. The point is, it&#8217;s hard work, but less so if you&#8217;re talented. And you can&#8217;t stop, you have to keep marketing yourself, either through continually producing awesome, or continually producing just enough awesome, and marketing like crazy.</p>
<p>If you&#8217;re famous, you can easily charge more than $100/hr for freelance work even for work that&#8217;d normally go for $80/hr. Just depends on the clientele.</p>
<p>Con? It&#8217;s a lot of work. All the time. Sometimes you have to start at square one if the tech changes. It can be done and repeated and is easier in a objective discipline like programming vs. the entertainment industry.</p>
<p><strong>Score A Large Client</strong></p>
<p>I&#8217;ve seen many large agencies and software firms sprout up like this. You&#8217;re 1 dudette/dude, 2 friends, or maybe you just know a lot of people you could sub-contract for design and other back-end/front end development if you could only get a large client. What happens is, the contractor gets a large client, can&#8217;t handle the size of the project alone, hires people, and voila: a company.</p>
<p>The money comes into play from 2 places. First, the job is obviously larger, thus requires more money to pay more people for more time working.</p>
<p>Second, those more people do not get the same amount you do. There are a variety of factors that dictate how much a designer gets, a front end developer gets, a back-end developer, manager, project manager, qa, etc. The more you make is inversely proportional to how much you pay your sub-contractors/employees. The less you pay, the more you make. Except it&#8217;s not you, it&#8217;s the company&#8230; or are you just paying yourself? That gets into running a business which I won&#8217;t cover here. Obviously if they&#8217;re an idiot contractor who&#8217;s good at coding but sucks at math, you can&#8217;t pay them less than living expenses, else they&#8217;ll lose their house/apartment/flat in the middle of the project, and that&#8217;s no good. Yes, you&#8217;ll get people like this.</p>
<p>You then bill those people out at a higher rate. This is how it works with big clients. Large company hires large firm. Large firm hires smaller firm. Smaller firm hires you as a 1099 contractor. The pay goes like this: Large company pays Large firm $300/hr. Large firm pays Smaller firm $150/hr. Smaller firm pays you $80/hr. Now that you&#8217;re the Small firm, you now get the $150/hr&#8230; and you&#8217;re sub-contractors get the $80/hr. Make sense?</p>
<p>The more sub-contractors you get, the longer the project is, or both results in more money in your pocket; well over $100/hr.</p>
<p>How does one score such a Large client? One way, you can become a preferred vendor/consultant/provider of your favorite technology stack. Whether it&#8217;s the company that makes it, or those who have a vested interest in it, one things for sure: those who make technology are not consulting firms. They focus on making tech, not forcing a bunch of people to travel to some random location to build something for random business for a bunch of dough. YOU and yours are the ones who actually represent that company and do the actual work. Obviously they have small arms in the sales team that do this, but they usually don&#8217;t scale that side of the business.</p>
<p>Another way is networking with past clients. One way to utilize a network you&#8217;ve created is to contact past clients&#8217; clients directly if your non-compete is up. For example, lets say you worked for a company as a 1099 that worked on a project for Nike. You did a great job, and had a good relationship with the company, and even had the opportunity to work with some people at Nike directly. Most smart companies will ensure you never talk to them for this very reason. 1 year+ later (or whatever your non-compete states), you reach out to them and ask if they have any work. If you kicked ass, they&#8217;ll remember you. Suddenly, that cut in pay is gone since you can form a direct relationship with them either as W9 (corp to corp), and possibly become a preferred vendor for that company: 1 of many companies who gets first dibs on projects they outsource.</p>
<p>Other times, you just get lucky as a Freelancer, and you portray yourself as a &#8220;company&#8221; with 6 people (who are really part time sub-contractors). Thus, larger companies will come asking you to deliver something quite large. It&#8217;s not dishonest at all if you truly can deliver. I&#8217;m making the assumption here you&#8217;ve worked on multi-person projects and can actually do what you say you can do. It&#8217;s all about how sell yourself. Example: <a href="http://jessewarden.com">jessewarden.com</a> vs. <a href="http://webappsolution.com">webappsolution.com</a>.</p>
<p>Don&#8217;t be afraid to write contracts that are too large for you to handle. If they were, you wouldn&#8217;t have the cajones to actually move forward with it, and finding resources for a project that&#8217;s too big for you is a good problem to have. It&#8217;s already assumed at this point that you know a bunch of freelancers, and might have even put them in a spreadsheet to list their name, contact info, last known rate, and area of speciality. BUILD UP THAT NETWORK and then USE IT.</p>
<p><strong>Find A Closer</strong></p>
<p><iframe src="//www.youtube.com/embed/8kZg_ALxEz0" width="640" height="480" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<p>All closers are salesman, but not all salesman are <a href="http://www.youtube.com/watch?v=8kZg_ALxEz0">closers</a>. Many companies spring out from a talented closer who scores that big client, whether from a cold call or networking. It&#8217;s like the previous &#8220;Score A Large Client&#8221;, except there&#8217;s no work on your part: you just unleash the closer and wait for her/him to catch you a big fish.</p>
<p>I&#8217;ve seen some successful firms/companies who are basically run by these closers. Many are partnerships where a talented programmer partnered with a talented closer and together they built a company.</p>
<p>Actually FINDING one is where I can&#8217;t help you. Most either formed the company on their own or the technical person had a childhood/college/previous company relationship beforehand.</p>
<p>Commissions don&#8217;t help, either. &#8220;Dude, I know 9% is the norm, but I&#8217;ll give you 20%.&#8221;</p>
<p>&#8220;Oh yeah? How much y&#8217;all pulling in a year?&#8221;</p>
<p>&#8220;Uh&#8230; I guess $1 million.&#8221;</p>
<p>&#8220;My current company gives me 9%, but they rake in 30 million. Thanks for the free beer, though!&#8221;</p>
<p><strong>Find a Network and Form a Firm</strong></p>
<p>You can form a firm in 2 ways. Basically, you do #1 where you&#8217;ve either established a name for yourself, and find like minded people who want to do the type of work you want to do with the types of clients you like to work with.</p>
<p>The other option is just like her majesty&#8217;s life advice: surround yourself with those better than you. You basically find a group of people, at least 1 but hopefully more, who think like you do. You all agree to find work, share work if you&#8217;re too busy, or help each other out on projects WITHOUT a premium; meaning you don&#8217;t take a cut of the rate from each other. This makes some freelance gigs a lot easier because you can borrow people for helping you out on some projects. Since they make you a priority, and there is no worry about rate negotiations, it&#8217;s a no brainer. THAT has some serious value to clients that you should up-sell. Most clients who know what they are doing recognize that already when dealing with companies that have more than 1 person vs. an independent contractor&#8230; sometimes.</p>
<p>More importantly, though, is the hope that they already have the preexisting network contacts described above. Even better, you can combine networks. It actually goes over quite well when you describe to the client that you&#8217;ve left the previous firm to found your own since that client wants you anyway. They&#8217;ll often assume you formed it to work with like minded individuals and you&#8217;re still in the idealistic and prove yourself/your company phase.</p>
<p>This is basically what I did when one of the firms I was working with exploded on itself. Preferred vendor, existing client base to get opportunities from, and 3 guys who all have different strengths that compensate my weaknesses, specifically 2 of them doing back-end Java (I&#8217;m 100% front end). The bigger clients want <a href="http://webappsolution.com">Web App Solution</a>, not <a href="http://jessewarden.com">Jesse Warden</a>.</p>
<p>This is the opposite if your brand is really powerful, though. For example, some strong personal brands form a company, and larger companies will hire them strictly because they want that one person&#8217;s expertise/clout/reputation.</p>
<p>$101-$119/hr is no mans land. Once you have a company that consists of individuals, not just a bunch of subs, $120 on up gets tons more likely&#8230; because the sum is greater than its individual parts. That has a lot of value to companies who need you to scale, be used to scaling quickly, and have a network of your own to acquire certain resources for certain types of projects (UX, design, business analysts, etc). That and it&#8217;s easier for the CPA and lawyers to swallow since you&#8217;re a more legit entity to do W9 work with for tax and legal purposes.</p>
<p>Keep in mind, while it&#8217;s obviously nice to have a track record that you can show to existing clients of your firm helping companies build awesome, often it&#8217;s just as accurate to use past clients as that track record. For example, all of your past freelancing clients you can include in your company&#8217;s repertoire of past clientele.</p>
<p>If your partners, or even just sub-contractors don&#8217;t have a network, you better have one&#8230; else you&#8217;re just fishing for the big client with extra lines in the water.</p>
<p><strong>Start A Business</strong></p>
<p>Everything I&#8217;ve talked about up to this point has been B2B: Business to Business. Some company hires your company. However, that&#8217;s not where the real money is for software development. The real money is in products. Now, granted, you can create products for a certain set of businesses, thus making you a B2B, vs. targeting consumers as a B2C, but the point here is you are NOT a services company: You&#8217;re a product company.</p>
<p>If a clients software project fails, your company doesn&#8217;t fail. If your a product company, and your product fails, your company fails. Huge difference.</p>
<p>Products also have the nice ability to sometimes make passive income. That means, while you sleep they make money. Some products require companies around them to build and support them, hence the current state of Silicon Valley. The amount of effort gets less every day, as does the cost of entry.</p>
<p>While there is more risk, having hundreds or even thousands of people pay $10/a month for your software is a lot more appealing then hustling multiple times a year to get a client to pay for the next few months. You can flip that around, too; a few dozen customers paying you $250 a month.</p>
<p>While there are a bunch of great <a href="http://en.wikipedia.org/wiki/Minimum_viable_product">articles</a> and <a href="http://www.amazon.com/Rework-Jason-Fried/dp/0307463745/ref=sr_1_1?ie=UTF8&amp;qid=1379010456&amp;sr=8-1&amp;keywords=37signals">books</a> on the subject, here&#8217;s the general idea:</p>
<ol>
<li>Find a problem you think you can solve with software, and if it has competition, you think you can solve it better.</li>
<li>Build a prototype in less than a week.</li>
<li>Show it a potential customer and ask them if they&#8217;d pay for it.</li>
<li>Iterate weekly/bi-weekly until they do.</li>
<li>Get more customers.</li>
</ol>
<p>Eventually you&#8217;ll reach what Paul Graham calls <a href="http://paulgraham.com/ramenprofitable.html">Ramen Profitable</a>. It&#8217;s a way longer ramp up time, but has a potentially greater reward. It&#8217;s also assumed you&#8217;ll fail multiple times getting there which is hard for some people to swallow in a culture that&#8217;s all about winning and &#8220;the thought of losing&#8230; is HATEFUL to Americans.&#8221; &#8212; Patton.</p>
<p>If you ain&#8217;t failin&#8217;, you ain&#8217;t trying hard enough, sucka!</p>
<p><strong>Dangers</strong></p>
<p>There are a few potential dangers you need to be aware of going the above route.</p>
<p>First, you need to be flexible. Are you willing to accept work at or below $120/hr? If not, can you survive on savings until you find a client? The &#8220;I deserve&#8221; or entitlement mentality is dangerous. You don&#8217;t get what you deserve, you get what you negotiate. Some companies just don&#8217;t have that kind of money.</p>
<p>Second, it&#8217;s hard to go back to salaried positions once you&#8217;ve gone the Firm or Freelance route. The startup route is a lot easier, and the freelance somewhat easier. Often, if the company doesn&#8217;t know your brand, it doesn&#8217;t matter.Â You need to be careful how you pitch your &#8220;long term consulting&#8221; or &#8220;short term freelance&#8221;.</p>
<p>If you ran a company, you suddenly know a lot about the game, and companies get nervous when you want to quit that and go back to W2. Sometimes that&#8217;s uber valuable to them, but as a front line software developer, it&#8217;s sometimes hard for them to see that value. Others get nervous if they see a lot of short term gigs on your LinkedIn and/or resume and you suddenly apply for a long term position. If you talk to a business owner, it&#8217;s an easier conversation; they get it. Other times this can backfire; &#8220;If you&#8217;re running a business, why come work for me? What about your competing interests?&#8221;. If you talk to an HR, manager, or senior developer, they might not understand at all. Remember, the truth of your history is written by you; modify your social media and resume to match the position you&#8217;re going for.</p>
<p>Also, be aware it&#8217;s a new world. Going back to the old one can be hard. You can sometimes forget what it&#8217;s like to NOT speak about business and software in the same sentence&#8230; vs. just software. This is reflected in your resume, social media, and conversations with people.</p>
<p><strong>Conclusions</strong></p>
<p>If you want to break the $100/hr barrier, getting a salaried position, being a single freelancer, or wasting your time with recruiters won&#8217;t get you there. There are a few exceptions with freelancing, especially on the back-end. Many Ruby/Python/Scala etc. guys can charge $200/hr to $300/hr in the Bay Area. The key, though, isn&#8217;t getting a project for that much money, it&#8217;s getting a career where that&#8217;s the norm.</p>
<p>Whether building a strongly recognizable personal brand, scoring a large client which is a catalyst for creation and growth, finding a closer, forming your own firm, or even creating a product that itself validates the company around are just 5 ways in which you can break that barrier. I&#8217;m sure there are more.</p>
<p>Even not being successful, you still learn a ton, and if you&#8217;re a long time software developer, constantly learning and re-learning is probably something you already do anyway. So it&#8217;s ok to try some of the things above and fail, especially the last one. I&#8217;ve had a lot of failures. I even once refused work for 6 months in an attempt to learn how to double my rate. I failed but I <a href="http://jessewarden.com/2010/08/what-i-learned-about-trying-to-double-my-rate.html">learned a ton</a>.</p>
<p>I also posted a companion video to this post, embedded below, that <a href="http://youtu.be/KfXLSj2xWUE">you can watch</a>.</p>
<p><iframe src="//www.youtube.com/embed/KfXLSj2xWUE" width="640" height="480" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
]]></content:encoded>
					
					<wfw:commentRss>https://jessewarden.com/2013/09/breaking-the-100-per-hour-barrier.html/feed</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Consulting Chronicles #7: The Priority Pyramid</title>
		<link>https://jessewarden.com/2012/04/consulting-chronicles-7-the-priority-pyramid.html</link>
		
		<dc:creator><![CDATA[JesterXL]]></dc:creator>
		<pubDate>Wed, 04 Apr 2012 14:09:37 +0000</pubDate>
				<category><![CDATA[Consulting Chronicles]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[consulting]]></category>
		<category><![CDATA[consultingchronicles]]></category>
		<category><![CDATA[leadership]]></category>
		<category><![CDATA[priority]]></category>
		<category><![CDATA[prioritypyramid]]></category>
		<category><![CDATA[pyramid]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[software]]></category>
		<guid isPermaLink="false">http://jessewarden.com/?p=3099</guid>

					<description><![CDATA[Introduction The Priority Pyramid is a tool I use to stay on track with new consulting clients. It prioritizes how, who, and what I engage in at any given time. It can be overwhelming when thrust into a challenging situation, a code base in dire straits, and a frustrated team. You need a strong pillar [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img fetchpriority="high" decoding="async" style="padding-right: 8px;" src="http://jessewarden.com/archives/blogentryimages/priority-pyramid-4.4.2012.jpg" alt="The Priority Pyramid - The 8 Tiers of Software Consulting" width="320" height="483" align="left" /><strong>Introduction</strong></p>
<p>The Priority Pyramid is a tool I use to stay on track with new consulting clients. It prioritizes how, who, and what I engage in at any given time. It can be overwhelming when thrust into a challenging situation, a code base in dire straits, and a frustrated team. You need a strong pillar of guidance.</p>
<p>This article goes over what parts make up the Priority Pyramid from a high level. I&#8217;ll talk about what milestones make up each section and how you navigate back and forward between the priorities.</p>
<p>When done, you should know how to engage your client&#8217;s team and tackle working on a large code base at a frustrated client site with 99 problems.</p>
<p><span id="more-3099"></span><strong>Why?</strong></p>
<p>Over the years, I&#8217;ve prioritized what I need to be doing when working my consulting clients. There are countless things I need beyond &#8220;coding&#8221;, and all have to do with &#8220;people&#8221;. Code in its own right is challenging enough. Add people to the mix and it gets more complicated than it already is.</p>
<p>Every engagement is different, even with repeat clients. This is why I like consulting. Meet new people, travel new places, learn new things.</p>
<p>While I enjoy and thrive on improv, what I didn&#8217;t like was not having a set of guidelines to deal with each new client. The business blogs &amp; books I&#8217;ve read are pretty dry, and don&#8217;t really focus on the people issues coders encounter and have to deal with. Most also assume YOU are the one creating &amp; maintaing the app, not fixing/modifying a large one extremely behind schedule. It&#8217;s either sales, management, or product management. This includes the consulting books. Some approach it from a larger consulting perspective, where you come in, listen to the client&#8217;s problems, write up a plan, and pass it off to India. If you are involved, it&#8217;s just to either head off major disaster and/or provide face time for the client.</p>
<p>This is NOT what I, and my colleagues I&#8217;ve worked with over the years do. We&#8217;re in the trenches, working alongside our clients, playing the politics games whilst coding.</p>
<p>So, I made my own rules for engagement, prioritized based on importance, with verification points to ensure I&#8217;m on the right track. If I cannot work towards getting through all tiers of the pyramid, I will not be working for the client long, whether by my choice or theirs. It&#8217;s important I flush out these red flags early and tackle them full bore.</p>
<p>That&#8230; and it has D&amp;DÂ connotations.</p>
<p><strong>Quantitative vs.Â Qualitative Foundations</strong></p>
<p>I&#8217;ve used both quantitative and qualitative results from case studies, white papers, and my own experience to base this set of priorities on.</p>
<p><a href="http://en.wikipedia.org/wiki/Brooks%27_law">Mythical Man Month/Brooks&#8217; Law</a>: &#8220;Adding manpower to a late software project makes it later&#8221;. Some of the bad projects I&#8217;ve been on had too many people on them. Your goal at that point is to delegate refactoring to the team to compensate, lead with good architecture, and leverage your trust currency to guide the various teams into a direction you need them to go. Also known as software chaos management. This requires you be at a high enough level to be in charge of various teams. If you&#8217;re not, God help you.</p>
<p>Code Review: One person, reading code for up to but not exceeding 1 hour finds more code defects than unit testing. This is not peer review, but that is also effective. Citations: <a href="http://support.smartbear.com/resources/cc/book/code-review-cisco-case-study.pdf">Code Review at Cisco Systems</a>, <a href="http://www.cnx-software.com/pdf/klocwork-research-code-review-study.pdf">Klocwork/Forrester &#8220;The Value and Importance of Code Reviews&#8221;</a>, and some other <a href="http://www.codinghorror.com/blog/2006/01/code-reviews-just-do-it.html">stats</a> from <a href="http://www.amazon.com/exec/obidos/ASIN/0735619670/codihorr-20">Code Complete</a>. Keep in mind while most of the studies mention that defects do notÂ significantlyÂ decrease after 1 person, the ability to learn from your peers and getting architecture suggestions are very well documented in the blogosphere.</p>
<p>Cheaper to Find Defects Early: Whether you are ruthless about upfront requirements gathering and/orÂ initialÂ architecture, or are adamant about short development iterations that includes scope reduction, both allow the ability to find more defects early. It&#8217;s easier to both find, and fix problems earlier than later for a variety of reasons (code size, feature acceptance, contractual obligations, etc). Beyond the IBM studies back in the 70&#8217;s here&#8217;s an <a href="http://www.methodsandtools.com/archive/archive.php?id=29">excerpt</a> from <a href="http://www.methodsandtools.com/archive/archive.php?id=29">High Quality Low Cost Software Inspections</a>. Also, crazy charts from <a href="http://sqgne.org/presentations/2011-12/Jones-Sep-2011.pdf">Capers Jones</a> (they have some other good studies). This is why I&#8217;m so adamant about getting the visual design (wireframes/design comps/ux/information architecture, etc.) right from the get go, even if 6 months into the project. Lowest hanging fruit and saves tons of time/money.</p>
<p><a href="http://dl.acm.org/citation.cfm?id=1536639">DistributedÂ Development</a> (<a href="http://cs.queensu.ca/~ahmed/home/teaching/CISC880/F10/papers/DistributedDevelopment_CACM2009.pdf">PDF</a>): The result that physical distance between developers doesn&#8217;t matter. Different room/building/country&#8230; not a big deal at all. What matters is how far the software developer(s) are from the stakeholder(s) in the organization management hierarchy. This is extremely important. I am firm believer in both telecommuting as well as on-site visits with clients for communication &amp; leadership reasons. This is central to identifying the power structure of the organization in Tier #2 and garnering trust with those who can help you talk to who you need to talk to in Tier #3. I&#8217;ve been ineffective at more than one consulting engagement because I wasn&#8217;t Â high enough to affect the required positive change.</p>
<p><a href="http://en.wikipedia.org/wiki/Toyota_Production_System">Toyota Production System</a>: Their continuousÂ improvementÂ philosophyÂ and respect for people are what really ring true to me. While <a href="http://blog.digitalbackcountry.com/2007/01/a-look-at-the-rich-internet-application-consulting-landscape/">It Takes a Village</a>Â to build great software, sometimes you have a crowded, drama filled city that you have to work within. Doing your best to get the team motivated to constantly improve, and SEE the improvement occur over time for motivation reinforcement, is just a small way to continually improve. You can only do this if you do in fact respect the people you work with. Empowering leaders amongst those who actually do the work can lead to effective production. You can use these <a href="http://www.fastcompany.com/magazine/111/open_no-satisfaction.html">Toyota Process strategies</a> in your own team delegation.</p>
<p><strong>The Priority Pyramid</strong></p>
<p>The 8 steps are in order of importance:</p>
<ol>
<li>Report</li>
<li>Understanding</li>
<li>Trust</li>
<li>Lead</li>
<li>Build</li>
<li>Explosions</li>
<li>Diagnostics</li>
<li>Architecture</li>
</ol>
<p>While it implies 4 are about coding, make no mistake: The Priority Pyramid is all about people. It&#8217;s built on your relationships with them and those relationships ensure you can do your job.</p>
<p>Lets break down the tiers the following way: What milestones do you need to complete, how to do you move on to the next tier, and when should you move back? I make the assumption if you&#8217;re on a team, you&#8217;ll divide tasks appropriately.</p>
<p><strong>A Note on Tier Foundations</strong></p>
<p>Each tier works on top of the foundation of the former. If the foundation is weak, it won&#8217;t strongly support the one on top. If you don&#8217;t have the trust of management and your co-workers, it&#8217;sÂ difficultÂ to lead them. If you don&#8217;t have a good understanding of the company andÂ peopleÂ who work within it, it becomes veryÂ difficultÂ to affect positive visual design changes to make architecture easier. It&#8217;s ok to be in Tier #8 and realize you need more understanding of how the application will be deployed from Tier #2; just like refactoring code over time, you can continue to strengthen the foundation tiers over time as well.</p>
<h2><strong>Tier #1: Report</strong></h2>
<p><strong>Milestones Before Arriving</strong></p>
<ol>
<li>You&#8217;ve talked to stakeholder(s) on the project to have an idea of what you&#8217;re getting into.</li>
<li>Verify you actually want to get into it. Some consulting gigs are hard to get out of. Some can reflect poorly on your firm/you even if you do a good job. Make sure you&#8217;re willing to make the plunge. We&#8217;re looking for red flags here to save you tons of money and stress. I&#8217;m not saying be choosy, I&#8217;m saying be careful.</li>
<li>Where you&#8217;re going, who you&#8217;re supposed to see, and when.</li>
</ol>
<p><strong>Milestones</strong></p>
<p>You/your firm has scored a client, you&#8217;ve booked your airfare + hotel, and you&#8217;re 1st day on-site has arrived. You look sharp, are excited, and looking forward to making a good first impression.</p>
<ol>
<li>First question out of your mouth after small talk should be &#8220;Who&#8217;s do I report to?&#8221;. Yes, it&#8217;s ok to follow up this question once you&#8217;ve scored more rapport with &#8220;Great, so&#8230; who&#8217;s my boss?&#8221;. This ensures you don&#8217;t do good things that get you in bad trouble.</li>
<li>Second question: &#8220;What will make you happy when I leave?&#8221;. This helps verify why you&#8217;re really here, and what they&#8217;re really paying you for. Sometimes this takes alcohol to get the true answer. Sometimes just a neutral setting outside of the office/building.</li>
</ol>
<p><strong>Successful Exit</strong></p>
<p>Know who you work for and your true goal in life for the next 8 months.</p>
<h2><strong>Tier #2: Understanding</strong></h2>
<p>The best communicators are good listeners. Your task now is to look people in the eye, lean forward, and listen well.</p>
<p><strong>Milestones</strong></p>
<ol>
<li><strong>Listen</strong>: Get people talking, asking questions, and listen to what they say. This is the most important step in the entire pyramid.</li>
<li><strong>Goals</strong>: You need to understand what the goals are for the project, both stated and real. What are you and the client really trying to accomplish? Answering &amp; documenting this will guide your actions for the rest of the project,Â overriddenÂ only by &#8220;Who do you report to?&#8221;.</li>
<li><strong>Problems</strong>: What are the problems and challenges the company has run into? Do any relate to why you&#8217;re here? Do they have a thorough list or are there more? Solving problems earns trust, and helps in the next tier. It also validates your paycheck. Why does the client have those problems? Where do you fit in? Who&#8217;s accountable for identifying solution(s) for and solving those problem(s)? These are your first challenges in the game.</li>
<li><strong>Dissect People</strong>: This is also an opportunity for you to start learning who the players are in the game. You need to understand what makes someone tick to best interact with them. Do they like business first, small later or the opposite? Do they have ulterior motives? Can they be trusted? Can they give you valuable intel on the project others won&#8217;t? What will it take to make them comfortable enough to tell you more? How can you possibly help them? You&#8217;re going to be spending the next 3 to 18 months with these people. Get to know them, make a good first impression, and understand them. These are the people you want on your team, who you want to do certain things for you, who you want to trust you. Once you understand them, you can effectively engage them. Sometimes this is done simply by watching how they interact with others. Ask questions to get them talking; their personality whilst reveal itself. Finally, figure out who reports to whom for real? What is the power structure? You&#8217;ll need to play within this framework; best to know how it works for real vs. what the label says on their door.</li>
<li><strong>Explore</strong>: Finally, code stuff. Time for initial reconnaissance. Taken what you&#8217;ve learned, it&#8217;s time to verify what you heard is recent, relevant, and can be corroborated with the code. This should still be framed from a &#8220;learning the company&#8221; perspective. You need to:</li>
<ol>
<li><strong>Learn the Data Model</strong>: The VO&#8217;s, the Services it calls, and what those business objects actually mean to the organization.</li>
<li><strong>Learn The Framework</strong>: How is the codeÂ architected; what framework did they use?</li>
<li><strong>Understand The Story</strong>: With another developer, preferably one who worked on the code base and/or your client, ask the developer questions to learn the story. Even the worst code base has a reason how it got there. Like an archeologist, you want to understand this history, the pivotal decisions, or lack thereof, that made it the way it is. You&#8217;ll learn the to respect, and pity, even the worst code base once you&#8217;re armed with this knowledge.</li>
<li><strong>Look For Red Flags</strong>: Both the currentlyÂ benign, and the &#8220;holy eff we&#8217;re eff&#8217;d&#8221;. Whether that&#8217;s everything being a hashmap in Java, Angular &amp; Backbone both being used in the same code base, or ActionScript 2. You don&#8217;t want surprises, you want to frame your perspective of the code base with your client&#8217;s. This is a VERY important step. Don&#8217;t say it, but talk about it internally in my mind. Find out why there is aÂ disparityÂ in perception.</li>
<li><strong>Look For Mines</strong>: Like red flags, these are things that down the line of a project, based on what you learned above could go boom. They aren&#8217;t aÂ priorityÂ but need to be documented.</li>
<li><strong>Look For Validation</strong>: Did everything you learned in Steps 1 &#8211; 4 get validated or where you completely off? If so, continue to dig, and redo steps 1 &#8211; 4 to re-verify.</li>
</ol>
</ol>
<p><strong>Successful Exit</strong></p>
<p>When you firmly understand the client&#8217;s reality, the reality the code reflects, and the real reality once you&#8217;ve resolved the two, you&#8217;re ready to move on. If they still don&#8217;t mesh, keep asking questions &amp; researching.</p>
<h2><strong>Tier #3: Trust</strong></h2>
<p>Assuming you&#8217;ve made good first impressions with those you&#8217;ve met, it&#8217;s now time to validate those initial impressions in those you&#8217;ve met. It&#8217;s time to start building trust.</p>
<p><strong>Milestones</strong></p>
<ol>
<li><strong>Provide Immediate Value</strong>: Check in code into the company&#8217;s source control your 1st week there. Preferably the code fixes a bug. Do NOT try to save the world in the code base. Pick some litter instead. If you clean the entire thing in a day, great, but get your feet wet and see what happens. A lot of drama and things you couldn&#8217;t predict happen AFTER you&#8217;ve checked in code and it goes into production. Start small and work your way up. Just ensure it&#8217;s immediate.</li>
<li><strong>Make Professional Friends</strong>: Respect those you work with and get to know them. Whether this is small talk that&#8217;s sincere orÂ genuineÂ interest, whatever works to build a positive relationship. People trust those they like. Trust is a currency you&#8217;ll sometimes have to spend in buckets to make positive headway so start investing in earning some now.</li>
<li><strong>Visible Logger</strong>: Invest in a visible logger. Even if the code doesn&#8217;t currently have problems, when it does, you want it to talk to you. Not only you, but the company. You want to corroborate this communication with your boss. When production explodes, and you know within seconds because your little secret keyboard shortcut debug window shows the error, that inspires confidence. It also provides a kind of transparency to your client when others start using it proactively to find problems. You just empowered a company to work together; well done, that&#8217;ll earn some trust. Make the code talk to you so you can trust what it&#8217;s saying, then expose this communication channel to your client.</li>
<li><strong>Provide Transparency</strong>: As you start getting your feet wet, whether this is struggling to get your environment setup so you can compile, or are deep in the bowels of fixing your first bug, let your boss know. Keep them appraised of what you&#8217;re doing on regular intervals, even if she doesn&#8217;t ask. Come across with confidence; you KNOW what you need to be working on, and you&#8217;re informing your boss as such. Additionally, she has a chance toÂ re-prioritizeÂ if you need to be working on something more pressing. No communication, and neither of these things happen. If they know and have confidence in you doing what you say you&#8217;re going to do, they can play defense and keep their boss off your, and your team&#8217;s back.</li>
</ol>
<p><strong>Successful Exit</strong></p>
<p>Do you think people trust you? Have you checked in working code that fixes a problem and your boss has verified this? Can you even compile? Do you know the names of those you&#8217;re working with/near? If yes to all, you&#8217;re ready to move on.</p>
<p><strong>NOTE</strong>: If you ever lose trust, fall back to continually adding immediate value. Trust isn&#8217;t given, it&#8217;s earned. If you lose it, the only way to get it back to is re-earn it from scratch.</p>
<h2><strong>Tier #4: Lead</strong></h2>
<p>At this point you know enough about the goals of the project to start formulating plans on moving forward, whether this is how to implement new features or how to fix/refactor existing ones. You&#8217;ve provided enough value to earn a modicum of trust. It&#8217;s time to lead people forward.</p>
<blockquote><p>A manager puts people in a line, puts the guy with the machete at the front, and leads people through the jungle effectively. A leader climbs the tree, and tells everyone they need to go left instead.</p></blockquote>
<p><strong>Milestones</strong></p>
<ol>
<li><strong>Short Term Goals</strong>: You&#8217;ve assessed the situation and identified priorities that need to be refactored (using my previous article). You need the team to agree on a common logging interface, both in code and visually. Finally, you need the team to agree on an architecture.</li>
<li><strong>Long Term Goals</strong>: You&#8217;ve identified architecture holes that need to be plugged. Sometimes there are design problems that if changed could save months of work and hardship. You need to start work and documentation on it now. Solidify the long term goal into something defendable, and get the teams input. <span><span style="color: #000000;">Be careful how you go about talking about it. While you need client feedback (remember transparency), it must be attainable to company-relevant, short term steps. You can spend trust currency for longer term refactoring/re-architectureÂ endeavors, but I recommend against it.</span></span></li>
<li><strong style="color: #000000;">Resources</strong><span style="color: #000000;">: Sometimes you need to hire additional people, whether from internal client teams, additional consultants/contractors from your firm, or hiring on behalf of your client. This could be staff augmentation or hiring a specificÂ </span>skill set<span style="color: #000000;">Â you need/want. Identify these early and ask your boss.</span></li>
<li><strong>Divide, Delegate, and Conquer</strong>: Whether the client&#8217;s employee&#8217;s or your firms, you need to divide up the massive amount of work amongst people. Offer up tasks first, and then assign to those you deem appropriate if no volunteers materialize. Building upon Tier 2 and 3, you should have a gut feeling for who&#8217;s best for what task. You cannot save the world by yourself. It may seem that you spend more time aiming people in the same direction then actually walking that direction yourself. Don&#8217;t fret; you&#8217;re on the right track.</li>
<li><strong>Be Positive</strong>: While misery loves company, peopleÂ like and follow positive people. In talking &amp; delegating all of your goals, plans, do so positively. You&#8217;re not &#8220;fixing a pile of rubbish&#8221;, you&#8217;re &#8220;building an awesome application&#8221; or &#8220;improving an important machine&#8221; or whatever you can say and actually believe when you say it. Eat right,Â exercise, and/or surround yourself with positive influences. Make this the year you <a href="http://www.menshealth.com/best-life/make-life-worth-living">commit suicide</a>, reorganize &amp; clean your working environment/home office, or just accomplish a small goal that&#8217;s not work related that you use asÂ positivityÂ fuel. Mentor &amp; encourage your team but don&#8217;t come off as a know-it-all/holier-than-thou. Play to win.</li>
</ol>
<p><strong>Successful Exit</strong></p>
<p>If you know what you/your team needs to be working on today, next month, you&#8217;ve approved the hiring you need, and the team is all tasked up, then it&#8217;s time to move on.</p>
<p><strong>Notes on Tier #5 &#8211; 8</strong></p>
<p>The latter teirs are development specific, but rely on a strong firm foundation from the first 4. Remember, the human component is your weakest link, not your Factories. Strengthen them; do not enter these 4 latter tiers of first 4 are weak.</p>
<h2><strong>Tier #5: Build</strong></h2>
<p>You need to easily build the software. This is the most common, and frequent, option you&#8217;ll do many times a day, every day. The longer this takes, the longer it takes you to develop. This can also kill your team&#8217;s momentum. If something goes wrong, such as someone checking in a bug that breaks the build into source control, or a feature needing be implemented for a presentation by some date, a slow buildÂ exacerbatesÂ time to resolution.</p>
<p>Worse, some developers will start making their own build setup, leading to code that works on some developers machines and not on others. Validation of working code suddenly becomes meaningless which can adversely affect project schedule metrics. Even worse, you can think your code works, but it doesn&#8217;t for others. Who&#8217;s right?</p>
<p><strong>Milestones</strong></p>
<ol>
<li><strong>Quick</strong>: The build needs to run quickly. This obviously anÂ arbitraryÂ metric based on code size, libraries,Â continuousÂ integration setup, etc. If developers say &#8220;the build is slow&#8221;, then it&#8217;s slow. Utilize libraries so the entire thing doesn&#8217;t have to compile, inject dependencies at runtime, utilize modules&#8230; whatever it takes.</li>
<li><strong>Easy</strong>: If the build is complicated to do, you&#8217;ll get developers making a lot of mistakes during code validation time before they check in. They&#8217;ll either check in bad code, or make their own setup that allows the code to work on only their machine. They should be able to just click 1 button, run an Ant/Maven script, or do a 1 line command line execution.</li>
<li><strong>Duplicated</strong>: The build should be able to be duplicated on a new developers machine. It&#8217;s completely fine to have company standards, such as only Windows 7 PC w/admin rights, Flex SDK 4.6, running Rake 0.8.2. It&#8217;s also ok if that takes some time with another developer to setup. What&#8217;s not ok is once they do that, it doesn&#8217;t work. If there are 3rd party dependencies that cannot effectively be deployed x-machine, find a way to remove them. Solutions include, again, using libraries, modules, development servers vs. local server setup, etc.</li>
</ol>
<p><strong>Successful Exit</strong></p>
<p>If you can run the build multiple times a day without pulling your hair out, it can be run multiple times on the same code base and not break, and anyone on the team can explain to a new developer 90% of the setup, you&#8217;re good to go. Another validation includes Developer A checking in code, then Developer B updating to latest and running the build and it works on their machine as well.</p>
<h2><strong>Tier #6: Explosions</strong></h2>
<p>When things go awry, you need to immediately know where and why. More than aÂ euphemismÂ for errors/exceptions, explosions also include errors in the application that constantly cause fire drills in the company.</p>
<p><strong>Milestones</strong></p>
<ol>
<li><strong>Exceptions Handled</strong>: Handle all errors save null pointers. If you have global exception handling capabilities, implement it/them. This doesn&#8217;t mean just wrapping something in a try/catch; it means not only logging the catch, but putting something meaningful in the catch so you&#8217;ll understand what it means when it happens.</li>
<li><strong>Logging</strong>: You need to centralize all long into a single library. It&#8217;s ok if this library is your own that builds on top of the built-in provided one, such as Flex&#8217; ILogger. As long as anyone, anywhere on the team wants to log something, they use that vs. print/trace.</li>
<li><strong>Visual Log</strong>: Optional: A visual window, built into the application itself (SWF/JS, etc), that prints out the log levels. This is done to allow logs to be seen by developers, not users. It also allows non-developers,Â especiallyÂ QA, to proactively find problems and talk directly with thoseÂ responsibleÂ vs. the 1st developer they can find. The value this provides inÂ empowermentÂ and time saved should not be underestimated.</li>
<li><strong>No More Fire Drills</strong>: Wrangling in challenging errors to help prevent fire drills can do 3 things. First, you score a lot of trust in &#8220;knowing&#8221; why something is wrong vs. 10Â peopleÂ running around aimlessly trying to figure out why. Second, you can clearly cite accountability; is it the server-side team, your team, or the database team? Instead of yelling &#8220;I think your stuff broke&#8221; you can confidently say it did with helpful data for them to test against. That kind of attitude is much easier to solve problems with. Third, fire drills no longer sabotage your productivity.</li>
</ol>
<p><strong>Successful Exit</strong></p>
<p>If an error occurs and you know where it happened, a general reason of why, and who&#8217;s potentially accountable, you&#8217;re in insanely good shape. Users don&#8217;t see these errors, just null pointers, or those you&#8217;ve built a GUI for (ie Alert error dialogue). Bonus points if fire drills happen on other teams that aren&#8217;t related to yours&#8230; but you have a way of helping through logging to make testing easier.</p>
<h2><strong>Tier #7: Diagnostics</strong></h2>
<p>Diagnostics form a range of tools, not just code. They are anything that helps provide insight into code issues or runtime errors without costing more overhead inÂ maintenanceÂ than the value they provide. The reason diagnostics is before architecture is that in larger applications,Â especiallyÂ in a consulting context, adding simple diagnostics has a ton of value with little effort whereas architecture takes a ton of effort but tends to have low perceived value (yes, it&#8217;s valuable, just harder to sell).</p>
<p><strong>Milestones</strong></p>
<ol>
<li><strong>Unit Test Coverage</strong>: Even if you&#8217;re not doing TDD, unit tests along help find &amp; prevent bugs as well as improve API&#8217;s. Unlike code reviews, they don&#8217;t get tired, benefit the entire team, and if written well only slightly add to codeÂ maintenance. Finally, they can be automated. These are also great things to work on in down times such as when JIRA is cleared, you&#8217;ve hit a brick wall with another bug, or are waiting on dependencies for a feature.</li>
<li><strong>Integration Tests</strong>: These are my favorite on service layers, more so than unit tests. The reason being is most of the Flex projects that I&#8217;ve worked on in a consulting context had some form of service layerÂ problem; ie how they talk to the back-end. Both refactoring the service code and writing unit tests that allowed me to automate the testing. It&#8217;s also nice to quickly know what part broke with confidence; client, server, or database. Automating these also makes you feel better when the server guys test new code, you can quickly help them test. There are more to integration tests, but these are the low-hanging fruit of &#8217;em.</li>
<li><strong>Automated Builds</strong>: Expanding upon Tier #5,Â streamliningÂ your build process to be more inline withÂ continuousÂ integration practices. This means designating a resource to setup, and maintain, aÂ continuosÂ build tool like CruiseControl/Hudson/TeamCity, etc. You should know who checked in bad code and when.</li>
<li><strong>Custom Diagnostics</strong>: Some applications have challenging domains of complexity. For example, video; there are TON of things that can go wrong at runtime even if the code compiles just fine. There are also a sequence of events that can cause video to fail, and knowing this sequence is paramount in debugging it, or shrugging it off since there&#8217;s nothing you can do (i.e. CDN is down). More importantly, though, sometimes you need a way to glimpse this in a more visual way than a logging window can provide. Conversely, sometimes you need to see environment variables in real-time. This little window can verify your application is running in the mode you think it is for a developer in another country. Simply making a box with a text field in it that showed Flash Player&#8217;s sandbox security type saved me 3 days (I lost 3 figuring this out, heh). Additionally, they can help empower others to do testing &amp; diagnostics on their own. Just be careful these are not a security risk for code and/or company information if deployed in production.</li>
</ol>
<p><strong>Successful Exit</strong></p>
<p>If you have good unit test coverage, can automate their running, your build is automated in some fashion (even if just client side only), and you have gui or command lines way to gain insight to your running application to find out more about errors, you&#8217;re in awesome shape.</p>
<h2><strong>Tier #8: Architecture</strong></h2>
<p>While good architecture requires a book full of information + years ofÂ experimentationÂ to get right, what we&#8217;re concerned with here is IMPROVING existing architecture. If you are starting a project from scratch and own the architecture, great, use this phase forÂ maintenance. Otherwise, we&#8217;re looking for that sweet spot of a 1 day change for a more decoupled, easier to use &amp; test in code system. If something takes longer than 3 days, you&#8217;ll be hard pressed to merge it back in and notÂ inconvenienceÂ other developers&#8230; unless it&#8217;s very little code.</p>
<p><strong>Milestones</strong></p>
<ol>
<li><strong>Tight Factories</strong>: Any part of your application which takes outside data into it&#8217;s system, such as external JSON/XML as well as user input, needs to be furtherÂ hardened. DRY the code, layer with <a href="http://jessewarden.com/archives/pix/moar-unit-tests-jxl.jpg">#moarUnitTests</a>. Form a convention on what happens when parsing/decoding fails; do you throw errors orÂ returnÂ null and log them, thus passing the burden of handling null to your system? Decide as a team.</li>
<li><strong>Fault Tolerant Services</strong>: Whether to a back-end, an external call to JavaScript in a host page, or an ad library&#8230; if it&#8217;s not your code, it&#8217;s a service. Make sure you wrap that with a Proxy that can NOT explode, and logs everything that went wrong. That extra 20 minutes pays off mad dividends.</li>
<li><strong>MVC/MVP/MVVM/YourMom/SC/PV/PM</strong>: As a team, pick one an over arching architecture pattern and stick with it for new code. I like <a href="http://martinfowler.com/eaaDev/SupervisingPresenter.html">Supervising Controller</a>, while others of my front-end Â ilk like <a href="http://martinfowler.com/eaaDev/PresentationModel.html">Presentation Model</a>. A lot of JavaScript web frameworks follow more of a <a href="http://martinfowler.com/eaaDev/PassiveScreen.html">Passive View</a>. The only right choice is team consensus &amp; comfortability. Then endeavor as a team to get certain parts moving in that direction. If there is old code, and you&#8217;re currently working on it, see if I can convert in less than a day to make more congruent with the rest of the architecture.</li>
<li><strong>DRY</strong>: If none of the above can be improved, simply making code more DRY is a good fall back task to more unit test coverage.</li>
<li><strong>TODO/FIXME/KLUDGE/HACK</strong>: Do a find all in the code. If you see those, fix them. #<a href="http://pragprog.com/the-pragmatic-programmer/extracts/software-entropy">fixBrokenWindows</a></li>
</ol>
<p><strong>Successful Exit</strong></p>
<p>You never really exit Tier #8; in fact you tend to loop back to either 7 or 6 and 7 and then back to 8. However, if you find yourself working on new features, or fixing bugs with no other drama and the rest of your team is doing the same&#8230; then you&#8217;re in epic shape.</p>
<p><strong>Conclusions</strong></p>
<p>As you can hopefully see, my priority list helps keep you focused on delivering value to those that matter quickly. Good software development is iterative. Earning trust is also iterative; you don&#8217;t take people&#8217;s money and disappear for 6 months (that&#8217;s called good Capitalism via Waterfall). This whole list, while referring to software development, is all about relationships with people. Excluding code review, your challenge as a leader is delegating the tasks in each tier to divide &amp; conquer, mitigating conflicts, and solving hard software problems in addition the rest of yourÂ responsibilities.</p>
<p>Each tier builds upon the former all the way down the line. While deep in the bowels of fixing explosions in Tier #6, I&#8217;m still continuing to build meaningful relationships in Tier #3.</p>
<p>Remember:</p>
<ol>
<li><strong>Report</strong>: Know your true boss and what will make her happy.</li>
<li><strong>Understanding</strong>: Listen, learn about the company, the people, and dive into reading the code.</li>
<li><strong>Trust</strong>: Earn trust by providing immediate value.</li>
<li><strong>Lead</strong>: Take the initiative and move the team forward. Delegate, divide, conquer.</li>
<li><strong>Build</strong>: Make the build fast, easy, and capable of being duplicated if need be.</li>
<li><strong>Explosions</strong>:Â When things go awry, you need to immediately know where and why. Prevent fire drills.</li>
<li><strong>Diagnostics</strong>: Get good unit test coverage, integration tests, automate your builds, and build any customÂ diagnosticÂ tools needed.</li>
<li><strong>Architecture</strong>: Decide on a direction/framework, and continue to nurture the code, and developers, in that direction. Loop back to 6 &amp; 7 if need be.</li>
</ol>
<h6><a href="http://www.flickr.com/photos/55935853@N00/2401448261/">Title photo by Ewan Monro</a>Â is under aÂ <a href="http://creativecommons.org/licenses/by-sa/2.0/">Creative Commons &#8211; ShareAlike Attribution license</a>.</h6>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Five Lies They Tell You in Software</title>
		<link>https://jessewarden.com/2011/10/five-lies-they-tell-you-in-software.html</link>
					<comments>https://jessewarden.com/2011/10/five-lies-they-tell-you-in-software.html#comments</comments>
		
		<dc:creator><![CDATA[JesterXL]]></dc:creator>
		<pubDate>Mon, 10 Oct 2011 22:19:52 +0000</pubDate>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[lie]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[software]]></category>
		<guid isPermaLink="false">http://jessewarden.com/?p=2854</guid>

					<description><![CDATA[The following are 5 things I wish someone had told me back inÂ JanuaryÂ of 2000. The User is the Most Important Thing If You Don&#8217;t Evolve, You&#8217;ll Die Using OOP, Design Patterns, Frameworks, and TDD with the Right IDE Will Solve All Your Problems You Can Code Something Right The First Time There is a Clearly [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>The following are 5 things I wish someone had told me back inÂ JanuaryÂ of 2000.</p>
<ol>
<li>The User is the Most Important Thing</li>
<li>If You Don&#8217;t Evolve, You&#8217;ll Die</li>
<li> Using OOP, Design Patterns, Frameworks, and TDD with the Right IDE Will Solve All Your Problems</li>
<li>You Can Code Something Right The First Time</li>
<li>There is a Clearly Defined Career Path in Programming</li>
</ol>
<p><span id="more-2854"></span><strong>1. The User is the Most Important Thing</strong></p>
<p>Making money is the most important thing.</p>
<p>Anyone who says the user is the most important thing hasn&#8217;t been in enterprise software, is endeavoring to fight against bad software, doesn&#8217;t run a business, or is talking about Open Source.</p>
<p>If you want good software, yes, you should pay attention to the user. Doing informal user testing, engaging with real users/customers while developing the software should be done. Investing in design early, heavily, and constantly are great ways to lead to building software that has a great user experience that people want to use.</p>
<p>That doesn&#8217;t implicitly make software magically sell itself. For mid-size to larger companies, those using the software aren&#8217;t the ones who pay for it. Often they&#8217;ll never use it, nor see it. They&#8217;ll be looking for the right marketing messages, and/or validation that it solves key problems THEY are concerned about. They are hoping to solve what they perceive as important problems to their business, not those actually using the software in their day to day jobs for their business.</p>
<p>A lot of the most profitable software is the mostÂ tortuousÂ to use. Case in point, SAP. Atrocious user experience. Yet, it sells extremely well (well, did, heh, read <a title="Blue Ocean Strategy Book" href="http://www.amazon.com/Blue-Ocean-Strategy-Uncontested-Competition/dp/1591396190/ref=sr_1_1?ie=UTF8&amp;qid=1318261040&amp;sr=8-1">Blue Ocean Strategy</a>). SAP can &#8220;run your entire business&#8221;. No other software product can make that claim with that much history to validate the claim.</p>
<p>This is important when you consider extremely large companies with a variety of different departments from HR to shipping, to finance, to IT. Even a modicum of perceived productivity enhancements across the board implies a significant amount of money saved. Remember, the 3 ways to make more money in a business:</p>
<ol>
<li>Raise your prices</li>
<li>Increase your output</li>
<li>Lower your overhead</li>
</ol>
<p>If something can &#8220;run your entire X&#8221; where X is &#8220;your business&#8221;, &#8220;your IT hardware &amp;Â softwareÂ operations&#8221;, or &#8220;patient scheduling for 3 hospitals&#8221;, those signing the check are doing so because they perceive #2 and #3 improved. That&#8217;s what writes the check to your company building the software, not the nurses who use the software for patient scheduling and loathe the interface. Who cares if they do, as long as people keep buying it, it&#8217;s profitable.</p>
<p>Like TRON, I too fight for the User. If you want to build software that&#8217;s a pleasure to use, you must focus on the user. Life is too short to produce crap merely for capitalistic gain. Many companies buildÂ pleasurable userÂ experiences and are profitable, from <a href="http://37signals.com">37Signals </a>to <a href="http://apple.com">Apple</a>.</p>
<p>Just remember making money is the most important thing. The happy user is not an implied gateway to bling.</p>
<p><strong>2. If You Don&#8217;t Evolve, You&#8217;ll Die</strong></p>
<p>You can learn 1 language on 1 platform on 1 OS, and remain employed with no worries, or get a new job if you need one.</p>
<p>Those insecure about their own career and investment in a particular technology stack project this line a lot. They do it in a variety of ways such as saying it as a factual proclamation for dramatic affect, as an ominous warning, or as a matter of fact statement that is law. Technical journalists creating click bait do this as well.</p>
<p>I&#8217;ve been employed &amp; done consulting at enough places to tell this is completely wrong.</p>
<p>Some facts:</p>
<ol>
<li><a href="http://www.bankingtech.com/bankingtech/article.do?articleid=20000168221">80% of the world</a> runs on a 50 year old language, <a href="http://en.wikipedia.org/wiki/COBOL">COBOL </a>.</li>
<li>AT&amp;T still uses <a href="http://en.wikipedia.org/wiki/Fortran">Fortran</a> for some of their dialing services.</li>
<li>Although we&#8217;re in a tech hiring bubble, university/college enrollment in tech has continued to decline.</li>
</ol>
<p>Business Insider has 2 good bullet points at the end of their <a href="http://articles.businessinsider.com/2010-09-10/tech/29957413_1_software-engineers-demand-early-stage-funding">hiring article</a> which explains the problem well.</p>
<blockquote><p>&#8230;skilled labor simply can&#8217;t change overnight. You can&#8217;t become a top-notch programmer overnight, and becoming skilledÂ <em>and proven</em> takes years.</p>
<p>&#8230;this shortage has been around and acute for the past decade.</p></blockquote>
<p>The same tech hiring shortage we have now is the same one we had at the turn ofÂ theÂ century. Microsoft had such hiring problems by 2005, Bill Gates was activelyÂ lobbyingÂ Congress to ease hiringÂ restrictionsÂ overseas since the terrorist attacks of 2001 had made it much harder.</p>
<p>Additionally, it&#8217;s a perception problem for new students. In 1999 they were told tech was a path to riches. Then the dot bomb happened, and the media wrote about out of work tech workers with no options, so students fled. Although the opposite now, you still get the same types of <a href="http://articles.boston.com/2011-09-18/business/30173049_1_software-engineers-technology-microsoft-windows">scare tactic articles</a> published.</p>
<p>Any software dev who reads even part of that article, or its ilk, will recognize the problems. Learning a new language isn&#8217;t what employers need. If you&#8217;ve ever done any interviewing or hiring for another company, you&#8217;re all to aware of the problems with tech job postings. The job will list 15 technologies when you only need 1. It&#8217;ll claim that you must know all 15 as an expert when no one on the planet actually does. It&#8217;ll say that you must have all of this or won&#8217;t be considered. Sometimes you&#8217;re fielded by HR and if you&#8217;re honest, you won&#8217;t make it through even if you&#8217;re the exact candidate they need.</p>
<p>So playing the hiring game is one problem. It has nothing to do with software skills and is rarely taught (well) in schools/colleges. This includes self-marketing, <a href="http://jessewarden.com/2006/10/personal-branding-checklist.html">personal branding</a>, and learning how to teach yourself.</p>
<p>The second problem is focusing on languages vs. fundamentals. If you know procedural, OOP, Design Patterns, Frameworks, an IDE, source control, error handling, logging, debugging, formatting, commenting, documentation writing, unit testing, software processes (waterfall, scrum, peer programming, etc), and how to search for help on Google for your problems&#8230; it doesn&#8217;t matter what language, technology stack, or OS you know. Those same core skills can be applied to any language on any platform. Employers who know this will hire for those skills even if you don&#8217;t know the particularÂ language/stack.</p>
<p>GETTING to be noticed by those employers is what you see happen with a lot of unemployed software developers critiqued in those tech journalist articles.</p>
<p>Knowing a programming language doesn&#8217;t imply you have core fundamentals. Additionally, you can still remain employed at a company, or get hired to a new one, when you don&#8217;t have them.</p>
<p>I&#8217;ve worked with companies that have spent $80,000 over 3 months for what they perceived as 10 competent outsourced developers. They delivered nothing excluding emails stating they were working hard. At the end, more money was sent to this outsourced firm to hire more developers&#8230; the opposite of what I thought would happen.</p>
<p>I&#8217;ve worked with companies who had developers breaking the build every day. The accountability &amp;Â reprimandingÂ was a company wide email pleading with them to fix the build since with 200+ software devs &amp; QA&#8217;s, it brought a lot of them to a stand still for half the day or more over 3 time zones in 3 countries. This continued for 2 years, and only got worse. I never saw any firing or anyone laid off in my 4 months over 2 years there.</p>
<p>I&#8217;ve worked with a company where a developer rewrote their core part of a larger application 5 times. Each time, it still didn&#8217;t work. They still kept their job.</p>
<p>The stories are countless. The press articles give a false impression of a larger whole that isn&#8217;t there. Even a modicum of ability to write code and have it compile will ensure a job. Like writing the first book, the key is to play the game to get the job. That&#8217;s the low hanging fruit to learn, not a new language through a college course.</p>
<p>I&#8217;m a huge proponent to never stop learning. Even learning 1 new language a year is a wonderful way to improve your skills even in your existing preferred language. A college course can work as well if that is your desired way to learn vs. self taught.</p>
<p>Do not think, however, if you fail to learn the latest new tech your job isÂ necessarilyÂ in jeopardy. Depending on the company, I&#8217;ve seen teams, not just individuals, who provide no value, are hostile to work with, and yet keep their employment. They continue to produce no revenue for the company years later. Learning politics in that case is more valuable than learning Ruby or Scala. Others aren&#8217;t actually specialists, but someone who &#8220;codes what they tell me to&#8221;. They in effect become Jacks of All Trades in that they&#8217;ve touched a lot of technology types for that particular company.</p>
<p>What these developers, who proclaim &#8220;evolve or die&#8221; statements, are really afraid of, and thus projecting onto the world, is mediocrity. They do not want to be bored, under paid, or unchallenged in their jobs. They don&#8217;t want to &#8220;have a hard time&#8221; finding work or a job. They want to have fun, be paid well, and be challenged all the while being courted with lots of job opportunities. They want to feel that their technology choice is in fact relevant, and ensures they are achieving those goals.</p>
<p>I can tell you with confidence there are a lot ofÂ <a href="http://www.codinghorror.com/blog/2009/04/the-eight-levels-of-programmers.html">Unknown Coders</a> out there with as much job security as the next coder. This doesn&#8217;t even touch upon how hiring a college kid right out of school for $100,000k, who actually costs the company money vs. providing revenue, actually <a href="http://www.wired.com/epicenter/2011/06/talent-fight-silicon-valley/">helps the company</a> because it ensures the competition doesn&#8217;t get a potential, even if that potential cannot be easily recognized.</p>
<p><strong>3. Using OOP, Design Patterns, Frameworks, and TDD with the Right IDE Will Solve All Your Problems</strong></p>
<p>Learning, applying, experience, working with mentors, and having stakeholders who care &amp; are apt leaders makes software development easier. Having competent designers who get what you do and are actively involved along with helpful QA and good Product Managers also help. As Dave Wolfe said, <a href="http://web.archive.org/web/20101121224639/http://cynergysystems.com/blogs/page/davewolf?entry=it_takes_a_village">It Takes A Village</a>.</p>
<p>Just because you know how to use ObjectÂ OrientedÂ Programming in your particular language, or even many, doesn&#8217;t make all the other problems go away. You still have to think how to solve real world problems via code. You still have to think, AFTER you&#8217;ve written the code, how on how to make it more DRY. You still have to interpret other&#8217;s &#8220;perception&#8221; of what they consider to be OOP vs. your own. You still have the overhead OOP has in creating more code and have to in turn manage this. In short, you have to think more. Good software allows the user <a href="http://www.amazon.com/Dont-Make-Me-Think-Usability/dp/0321344758">not to think</a>. Code that&#8217;s clever is usually code smell.</p>
<p>Design Patterns are still concepts, even if you understand them, and can effectively communicate to team members using those terms to help understanding. Every developer tends to implement them slightly differently. You need to interpret how to apply common design pattern solutions to real world problems. You need to interpret how another developer has implemented a design pattern, and what theirÂ interpretationÂ of the value is. In short, you have to think more.</p>
<p>Frameworks are an interpretation by an individual or team on how to solve common software development problems. Using learned conventions, configurations, and forced (re)definitions on existing concepts, you and/or your team areÂ theoretically capable of solving common problems, working together easily on the same code base, and having that code be more easily modified by your team or a different future team.</p>
<p>A framework is usually an amalgamation of OOP and Design patterns with a particular belief on how things should be defined, implemented, and thought about. You need to sometimes change your thinking, adopt that mind set, and teach that to those under you throughÂ analogiesÂ that are congruent with existing literature on traditional software OOP and Design Patterns. In turn this needs to be related to your current technology stack. In short, you have to think more.</p>
<p>Using TDD, or even just unit tests, or integration unit tests, helps in a lot of places. For building API&#8217;s, it forces you to actually be a consumer of the API you are building, and thus results in a better API. It also helps with backwardsÂ compatibility. Reading the tests helps document how to utilize the code. For loosely typed languages, it helps reduce the amount of time hunting down null pointers.</p>
<p>You now have to write more code to test existing code. You&#8217;ll find you have to manage a separate code base. You have to maintain the tests. Even if you don&#8217;t test first, you still have to ensure your code is easily testable. This requires re-refactoring. Usually more challenging, however, is to encourage your team members to not only write their own unit tests, or help you maintain yours, or at least make their code easier to test so you can write them if they are not testÂ proponents. All this assumes your GUI and path of development doesn&#8217;t take drastic changes early on negating large portions of your design &amp; code base. In short, you have to think more.</p>
<p>A comfortable developer is a productive developer. A good chair, a quiet (or loud) environment, and a helpful IDE. Doesn&#8217;t matter what it is (VIM, Eclipse, Visual Studio), as long as the developer likes it, it helps them code faster, and helps them find errors &amp; debug easier, and thus more quickly. Although learning new IDE&#8217;s can make you think more, and take a lot of time investment, whether testing yourself or reading about others&#8217; adventures on blogs, the hope is they actually make you think less&#8230; which can help a lot with the above points where you&#8217;re required to think more.</p>
<p>Combine this with years of experience, academic and real world learning, and application in a breadth of technology stacks, you should be at the top of your game, never failing. Sadly, this isn&#8217;t the case. Simply learning everything there is to know, whether in core fundamentals, or for a specific technology, is in no way aÂ guaranteeÂ for success.</p>
<p>The first problem is other developers. Even after you learn everything, getting consensus in programming is actually called &#8220;compromise&#8221;. Every developer has their own interpretations of implementation details, OOP, Design Patterns, Framework best practices, favorite IDE setups, etc. Some are religiously devote in these beliefs. In driving, no matter how good you are, you need to drive defensive (not professional racing). In programming, same thing; you need to adapt to the developers you&#8217;re working with.</p>
<p>Secondly, and more importantly, there are a lot of things that can go wrong, regardless of how smart and/or adept you, or your team, are. This includes <a href="http://uxmyths.com/post/746610684/myth-21-people-can-tell-you-what-they-want">users not knowing what they want</a>, stakeholders simply not caring, <a href="http://www.martinfowler.com/bliki/TechnicalDebt.html">technical debt created</a> by others, or the company running of out money or simply cancelling the project. Sometimes you&#8217;re hired to ensure the project internally or by a separate firm tanks so your firm can take over development. That&#8217;s correct: You can utilize your knowledge &amp; experience on how to make software succeed to ensure another software development project fails. Other times you&#8217;re just not high enough in the food chain to affect positive change, thus, you keep the <a href="http://stargate.wikia.com/wiki/Destiny">Destiny</a> flying for as long as possible.</p>
<p>The good news is as you learn, <a href="http://jessewarden.com/2010/07/when-you-do-it-right-and-on-time.html">it does get better</a>. A lot better. In fact, you&#8217;ll find that the majority of your time is spent not in software, but trying to fend off those types of problems. Just like how science continually answers questions that just leads to more questions, so too does learning software development lead you to realize there are bigger problems that can set you up to fail that have nothing to do with software development.</p>
<p>Anyone who says by learning TDD or some language will solve all your problems are selling something, or are the types of people who think that awesome, working software that was never shipped is still considered successful. Keep learning, it&#8217;ll pay off.</p>
<p><strong>4. You Can Code Something Right the First Time</strong></p>
<p>The best way to code software is to release early and often.</p>
<p>This means you code it as quickly as possible to get a working build in front of real users. You take their feedback, <a href="http://uxmyths.com/post/1048425031/myth-24-people-always-use-your-product-the-way-you-imagi">filterÂ their responses</a> into a more accurate flight path, and move forward.</p>
<p>There are a few problems with this. In my experience, most people do not do user testing, even in an informal context. While it&#8217;s a horrible shame for companies, it can be dangerous for software developers. There is a reason why Joel Spolsky and others <a href="http://www.joelonsoftware.com/articles/customerservice.html">recommend</a> software developers answer support requests from customers. While having incentive to fix the problem is one thing, it teaches relevance.</p>
<p>Software developers,Â especiallyÂ inexperienced ones, have strange perceptions of what&#8217;s relevant to do at a given point and time. This is completely justified in that they are required to create their own tasking for building software which is complex, has a plethora of details to keep track of, and future ramifications that they need to watch out for because they&#8217;ll be the ones to suffer them, and no one else will.</p>
<p>One example, a start up I worked with spent months on building a core product. I continually pushed for, and failed, at getting them to get real users feedback. 8 months in we finally did and we had usability problems. We knew about them, but it was a lot harder then to make drastic design changes. We forged ahead anyway. A year later with the 1st customer, they only actually needed 10% of the interface in a specialized form to run their business. We canned the other 90% and pivoted to use a completely different interface for the CMS to support it. Torching 11 months worth of code, and letting go of a pivotal,Â valuableÂ team member was completely lame on aÂ varietyÂ of levels.</p>
<p>Another example, I had one developer spending an inordinate amount of time optimizing the underlying architecture of a cover flow like component. Being in charge, and knowing how both versions of the component worked, I told him to move onto other tasks as it worked fine. We vetted a build with the customer that day, and they preferred the sortable list vs. the cover flow. I should note that the previous day, the customer liked the cover flow, and felt it worked/performed just fine. The developer in question heard this, and seemedÂ visibilityÂ happy to hear this. I can only surmise in their pyramid of needs, their need for approvalÂ drove them to hone on this particular component to ensure itÂ performedÂ optimially to maximize the client&#8217;s approval of their work.</p>
<p>Bottom line, the client didn&#8217;t need it once we provided a better design. Going with this same pyramid of needs theory, the developer started to modify the list control to be faster. While I didn&#8217;t agree with the amount of time spent, at least his work was now relevant.</p>
<p>Again, when giving the software to the user, you can validate what you are spending your time on is actually valid. Same with answering support calls; you as a developer have an incentive to fix the problem, both for the user&#8217;s sake, and your own.</p>
<p>If you don&#8217;t do any user testing, then you have to focus on &#8220;getting it to work&#8221;. This is why, even without user testing, iterative software development is good in that it forces developers to get compiling code, sooner. They can&#8217;t spend 3 days in a cave refactoring some super, awesome architecture because it has to compile and be shown tomorrow.</p>
<p>Another example is DRY. Although some developers think they can predict DRY right out of the gate (like putting methods in utility classes), other times the most valid way of making something DRY is through re-factoring. You won&#8217;t see the duplication until it&#8217;s created. This happens more in larger projects with multiple developers on disparate and/or non-communicative teams. It&#8217;s your job to recognize this after the fact and recommend a solution to reduce/remove the duplication.</p>
<p>Big classes are another. Packages, frameworks, and IDE&#8217;s with good search &amp; refactoring capabilities are extremely helpful in managing large code bases. Inexperienced developers think they need to organize now else they&#8217;ll be left with an unmanageable mess later on in the project. Not so. You&#8217;ll know when it&#8217;s getting too big. At that point, you can refactor it out into multiple methods, classes, etc. Obviously you&#8217;ll already know how much forethought you can put into it. You&#8217;ll reach a point, however, where you don&#8217;t know and you&#8217;re guessing. Unless you have a valid reason, it&#8217;s best to start coding for the now. If you can&#8217;t refactor, you&#8217;ll learn. Refactoring is the one skill gained through experience which allows you, and your team, to be successful in iterative development.</p>
<p>Plan for what you know, not what you don&#8217;t. Being good at refactoring will save you if you get cornered. Remember, <a href="http://jessewarden.com/2010/07/agile-chronicles-12-technical-debt.html">80% of a Scrum Sprint is spent refactoring</a>. No software is ever 100% &#8220;right&#8221; when you build it. I can tell you, though, if you work hard, you&#8217;ll reach a point in your career where you&#8217;ll love your code, your architecture, your tooling, and your approach. Your only problems at that point will be preventing politics from sabotaging your courting of users.</p>
<p><strong>5. There is a Clearly Defined Career Path in Programming</strong></p>
<p>Once you become an architect level, you have 3 options: Continue on, become a manager, or start your own company.</p>
<p>I bring this up because no one told me this lie. In fact, no one told me anything. I was raised by good (and bad) role models from the WW2 and Baby Boomer generation. To them, you worked hard, and climbed the corporate ladder for success.</p>
<p>However, some cultural changes happened since their generation.Â Globalization, outsourcing, and easy to make companies with readily availableÂ investment. Software started actually impacting consumers lives, not just businesses. Oh yeah, and the Internet. Once Microsoft became the most profitable company, the Information Age started.</p>
<p>You no longer had pensions at companies. You didn&#8217;t work there for life. You didn&#8217;t &#8220;deserve&#8221; certain things because you had seniority. People became a lot moreÂ expendable. Replaceable. BA&#8217;s and MBA&#8217;s no longerÂ guaranteedÂ a job.</p>
<p>I didn&#8217;t at the time know any of this and fell in love with software. Fast forward to 2006, and I became&#8230; stuck. There wasn&#8217;t any clear path on where to go. My father and step-father weren&#8217;t any help because they couldn&#8217;t comprehend my career path, let alone what was &#8220;next&#8221; since it&#8217;s so vastly different from their generation. The best I could do was research what others do.</p>
<p>What I&#8217;ve found is what I&#8217;ve wrote. Either you stay hungry and keep learning new things as a developer or branch out into consulting.</p>
<p>Others will turn in their developer hat and go into management, whether as a perceived increase in pay, value, or just because that&#8217;s where they think they&#8217;ll make more of a positive impact (like the things that affect lie #3). Perhaps they&#8217;ve lost the hunger and need something new.</p>
<p>The third is they start their own company. While being technically savvy is good, and being able to target a market you already know in B2B, or even consumer is also good, it&#8217;s easier nowadays with readily access to investment capital even if you are a developer.</p>
<p>The other option is just to continue your service work, whether that&#8217;s freelance to choose your projects, make more money, or even creating your own consulting or software development shop.</p>
<p>I&#8217;ve been with companies that had &#8220;career paths&#8221; for software devs, but they didn&#8217;t make any sense to me. Either they were merely title changes that had very little if anything to do with software, had a bit more authority that didn&#8217;t really help with actual development, or lead directly to management positions.</p>
<p>On a positive note, I will say doing architecture for large teams, consulting, freelance, and running or working for startups offers a tremendous opportunity to learn new, relevant skills.</p>
<p>If you&#8217;re looking for the old guard style of career path, software from what I&#8217;ve seen doesn&#8217;t have it. They do have defined paths in government and larger organizations, but the incentives to &#8220;rising in the ranks&#8221; there are either pay raise, or authority levels, and you don&#8217;t code anymore.</p>
<p><strong>Conclusions</strong></p>
<p>Remember, software that makes money is the most important thing. If paying attention to users helps, great but never forget the first.</p>
<p>You don&#8217;t have to learn the latest tech craze to stay relevant and employed. You should learn, however, to make it easier if you want career flexibility. Make it fun. It SHOULD be fun. Create sample projects that are creating something relevant. You don&#8217;t have to finish, they&#8217;re just to learn.</p>
<p>Learning software fundamentals and mastering them will not lead to some software utopia. Individuals are smart, but people are stupid. You&#8217;re coding for, and amongst, people. Continue to master software, and then you can focus on the larger problems with much prejudice.</p>
<p>Given how users never know what they want nor can they effectively communicate it (nor clients), and businesses&#8217; needs constantly change, software development is 80% refactoring, 20% calculated risks. Move forward, relying confidently upon your skills. If you need to change direction, refactor.</p>
<p>Knowing that a career in programming results in <a href="http://nick.typepad.com/">a life long career in programming</a>, management,Â entrepreneurship, or running your own software shop, be aware of that early and work towards it vs. suddenly learning about it like I did.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jessewarden.com/2011/10/five-lies-they-tell-you-in-software.html/feed</wfw:commentRss>
			<slash:comments>28</slash:comments>
		
		
			</item>
		<item>
		<title>How to Launch a Small Software Product Slides</title>
		<link>https://jessewarden.com/2010/11/how-to-launch-a-small-software-product-slides.html</link>
					<comments>https://jessewarden.com/2010/11/how-to-launch-a-small-software-product-slides.html#comments</comments>
		
		<dc:creator><![CDATA[JesterXL]]></dc:creator>
		<pubDate>Sat, 13 Nov 2010 17:16:34 +0000</pubDate>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[air]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[entrepreneur]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[ironman]]></category>
		<category><![CDATA[product]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[service]]></category>
		<category><![CDATA[small]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[startup]]></category>
		<guid isPermaLink="false">http://jessewarden.com/?p=2514</guid>

					<description><![CDATA[My slides from speaking atÂ RIA Unleashed and 360 Flex conferences. How to Launch a Small Software Product View more presentations from Jesse Warden. Download &#8211; Keynote &#124;Â PDF &#124; JPEG&#8217;s &#124; Slideshare Resources Referenced: Steve Krug&#8217;s Book &#8220;Don&#8217;t Make Me Think&#8221; Gary Vaynerchuk&#8217;s Book &#8220;Crush It!&#8221; &#8220;Minimum Viable Product&#8221; blog post Startup Book &#8220;Start Small, Stay [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>My slides from speaking atÂ <a href="http://riaunleashed.com">RIA Unleashed</a> and <a href="http://360flex.com">360 Flex</a> conferences.</p>
<div id="__ss_5768715" style="width: 425px;"><strong><a title="How to Launch a Small Software Product" href="http://www.slideshare.net/jesterxl/how-to-launch-a-small-software-product">How to Launch a Small Software Product</a></strong><object id="__sse5768715" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=preso-jxl-ria-unleashed-2010-101113101719-phpapp02&amp;stripped_title=how-to-launch-a-small-software-product&amp;userName=jesterxl" /><param name="name" value="__sse5768715" /><param name="allowfullscreen" value="true" /><embed id="__sse5768715" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=preso-jxl-ria-unleashed-2010-101113101719-phpapp02&amp;stripped_title=how-to-launch-a-small-software-product&amp;userName=jesterxl" name="__sse5768715" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/jesterxl">Jesse Warden</a>.</div>
</div>
<p><span id="more-2514"></span>Download &#8211; <a href="http://jessewarden.com/archives/preso-jxl-ria-unleashed-2010-slide-images.key.zip">Keynote</a> |Â <a href="http://jessewarden.com/archives/preso-jxl-ria-unleashed-2010.pdf">PDF</a> | <a href="http://jessewarden.com/archives/preso-jxl-ria-unleashed-2010-slide-images.zip">JPEG&#8217;s</a> | <a href="http://www.slideshare.net/jesterxl/how-to-launch-a-small-software-product">Slideshare</a></p>
<p>Resources Referenced:</p>
<ul>
<li><a href="http://www.amazon.com/Dont-Make-Me-Think-Usability/dp/0321344758/ref=sr_1_1?ie=UTF8&amp;qid=1289664864&amp;sr=8-1">Steve Krug&#8217;s Book &#8220;Don&#8217;t Make Me Think&#8221;</a></li>
<li><a href="http://www.amazon.com/Crush-Time-Cash-Your-Passion/dp/0061914177/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1289664912&amp;sr=1-1">Gary Vaynerchuk&#8217;s Book &#8220;Crush It!&#8221;</a></li>
<li><a href="http://www.startuplessonslearned.com/2009/08/minimum-viable-product-guide.html">&#8220;Minimum Viable Product&#8221; blog post</a></li>
<li><a href="ttp://www.startupbook.net">Startup Book &#8220;Start Small, Stay Small&#8221;</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://jessewarden.com/2010/11/how-to-launch-a-small-software-product-slides.html/feed</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
	</channel>
</rss>
