<?xml version="1.0" encoding="windows-1252"?>
<node id="271617" title="Re: Re: Re: Best way to 'add modules' to web app?" created="2003-07-05 08:28:59" updated="2005-06-08 19:38:35">
<type id="11">
note</type>
<author id="127307">
IlyaM</author>
<data>
<field name="doctext">
[chromatic] is obviously advocating [http://c2.com/cgi/wiki?YouArentGonnaNeedIt|YAGNI] approach to solve design problems. In short the idea is that you split your development process in short iterations: in each iteration you select functionality to implement, then you design the system in the simpliest possible way to pass [http://c2.com/cgi/wiki?FunctionalTest|functional tests]. While doing it you religiosly refactor code to remove [http://c2.com/cgi/wiki?CodeSmell|code smells] (i.e. code dublication, too big methods and subs, etc). In my experience it is actually very efficient approach which at the end produces more high quality and more flexible code compared with [http://c2.com/cgi/wiki?WaterFall|water fall] style development process when you try to design everything from the begining. Too often initial assumptions became wrong assumptions, functional requirements change and end result becomes [http://www.laputan.org/mud/mud.html|big ball of mud].
&lt;p&gt;
Word of warning though. If you try to develop using YAGNI way then [http://c2.com/cgi/wiki?TestDrivenDevelopment|TDD] is a must, constant [http://c2.com/cgi/wiki?WhatIsRefactoring|refactoring] is a must. If you don't follow these practices you'd better stick with waterfall way or result will be a disaster. In a sence waterfall is simplier model though less effective.

&lt;p&gt;
&lt;font color="grey" size="-2"&gt;
--&lt;br&gt;
Ilya Martynov,  &lt;a href="mailto:ilya@iponweb.net"&gt;ilya@iponweb.net&lt;/a&gt;&lt;br&gt;
CTO IPonWEB (UK) Ltd&lt;br&gt;
Quality Perl Programming and Unix Support
UK managed @ offshore prices - &lt;a href="http://www.iponweb.net"&gt;http://www.iponweb.net&lt;/a&gt;&lt;br&gt;
Personal website - &lt;a href="http://martynov.org/"&gt;http://martynov.org&lt;/a&gt;&lt;br&gt;
&lt;/font&gt;</field>
<field name="root_node">
271544</field>
<field name="parent_node">
271579</field>
</data>
</node>
