<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Frictionless Floor: Tag lifecycle</title>
    <link>http://blog.frictionlessfloor.com/articles/tag/lifecycle</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>programming and design with minimal resistance</description>
    <item>
      <title>True Phases of the Software Development Lifecycle</title>
      <description>&lt;p&gt;I&amp;#8217;ve not been a developer for a long time, but I&amp;#8217;ve been around just long enough already to learn the lifecycle of a &amp;#8220;real world&amp;#8221; project. Note that this is for single-developer projects. Team projects give you a lot more latitude and ability to make these things work more seamlessly. Sometimes.&lt;/p&gt;


	&lt;h2&gt;Phase 1: Planning&lt;/h2&gt;


	&lt;p&gt;Most projects at least, thankfully, begin with planning. It&amp;#8217;s almost never enough, and rarely covers all the special cases you&amp;#8217;ll later be coding late nights to fix. But there is still almost always a phase where you at least are given a set of features, maybe a basic UI desire, and a pat on the back. As the developer, you get hard to work designing the perfect database structure, thinking of clever ways to organize code, until a day or two later in&amp;#8230;&lt;/p&gt;


	&lt;h2&gt;Phase 2: &amp;#8220;Git &amp;#8216;r Done!&amp;#8221;&lt;/h2&gt;


	&lt;p&gt;This is the point where you have things about half organized in your brain, and then get told &amp;#8220;We needed that yesterday!&amp;#8221; And, the corollary, &amp;#8220;Get it done, it doesn&amp;#8217;t have to be perfect!&amp;#8221; And it&amp;#8217;s not perfect, not the shining gem you hoped to produce, but it works. It works for every case they gave you, and when you&amp;#8217;re finished you sit back, hoping that&amp;#8217;s all they want. But it never is&amp;#8230;&lt;/p&gt;


	&lt;h2&gt;Phase 3: &amp;#8220;But see, there&amp;#8217;s one exception&amp;#8230;&amp;#8221;&lt;/h2&gt;


	&lt;p&gt;In this phase, you realize what they told you in phase 1, and which you used to shortcut code in phase 2, did not line up with reality. For example, they say &amp;#8220;All employees come in at 8am and leave at 5am.&amp;#8221; So when you&amp;#8217;re rushing for release, you make that an assumption. Phase 3 is where they come in and say &amp;#8220;Well, we have this one employee, Bill, who comes in at 10am and leaves at 3pm&amp;#8221;. For a minute, you think you might can get away with coding that one special case in. Until you realize that later they&amp;#8217;ll have yet another exception to cover. So you rewrite most of the business logic and make a few database schema changes. And in the end, you wind up with better code anyway, and start to feel good about what you&amp;#8217;ve produced. Until the inevitable&amp;#8230;&lt;/p&gt;


	&lt;h2&gt;Phase 4: &amp;#8220;I&amp;#8217;m a creep, I&amp;#8217;m a weirdo. What the hell am I doing here?&amp;#8221;&lt;/h2&gt;


	&lt;p&gt;Of course, we&amp;#8217;re talking about the inevitable and dreaded Feature Creep. For months, maybe years, you add feature after requested feature to that nice little software package. Maybe it began as a simple timesheet application, but now it&amp;#8217;s a fully functional document repository with full search and indexing capabilities. We&amp;#8217;ve all been there. Thankfully, the end seems to be in sight when&amp;#8230;&lt;/p&gt;


	&lt;h2&gt;Phase 5: &amp;#8220;We had to let Bill go&amp;#8230;&amp;#8221;&lt;/h2&gt;


	&lt;p&gt;They make a policy change that renders that previous Phase 3 exception void. Maybe all employees are forced to get there at 8am. Maybe they fire the guy who keeps coming in late. Either way, they no longer need your clever system for time configuration, as it adds a slight bit of complexity they get no benefit from. Only now, the whole system hinges ever so slightly on that one bit of business logic, you know that if you even touch that code the whole mountain will topple. So you finally stand up for yourself and say &amp;#8220;no!&amp;#8221; And then you quickly come back with &amp;#8220;Well, it would be possible if we did a&amp;#8230;&amp;#8221;&lt;/p&gt;


	&lt;h2&gt;Phase 6: Rewrite.&lt;/h2&gt;


	&lt;p&gt;Inevitably, your code will reach a point where you just need to rewrite it from the ground up. If you had known they wanted a document repository from the beginning, you would have designed it in. This phase gives you the chance to really plan things out knowing everything that should be included. So you work and work and release a final version that does everything right, only to find out that&amp;#8230;&lt;/p&gt;


	&lt;p&gt;They hired Bill&amp;#8217;s son, who works Bill&amp;#8217;s old schedule.&lt;/p&gt;


	&lt;p&gt;And the cycle thus repeats itself.
&lt;div style="float:right"&gt;&lt;a href="http://digg.com/programming/True_Phases_of_Software_Development"&gt;&lt;img src="http://digg.com/img/badges/180x35-digg-button.gif" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;</description>
      <pubDate>Thu, 30 Nov 2006 15:29:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:74afc892-5e27-4d8a-b605-6219f0dfcd1d</guid>
      <author>David Harris</author>
      <link>http://blog.frictionlessfloor.com/articles/2006/11/30/true-phases-of-the-software-development-lifecycle</link>
      <category>Programming</category>
      <category>development</category>
      <category>software</category>
      <category>lifecycle</category>
      <category>boredom</category>
      <trackback:ping>http://blog.frictionlessfloor.com/articles/trackback/1830</trackback:ping>
    </item>
  </channel>
</rss>
