<?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>Research and Destroy &#187; derlanders</title>
	<atom:link href="http://research-and-destroy.de/blog/author/derlanders/feed/" rel="self" type="application/rss+xml" />
	<link>http://research-and-destroy.de/blog</link>
	<description>... using advanced technology</description>
	<lastBuildDate>Sun, 18 Dec 2011 22:38:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>For the sake of architecture&#8230;</title>
		<link>http://research-and-destroy.de/blog/2009/01/21/for-the-sake-of-architecture/</link>
		<comments>http://research-and-destroy.de/blog/2009/01/21/for-the-sake-of-architecture/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 15:27:49 +0000</pubDate>
		<dc:creator>derlanders</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://research-and-destroy.de/blog/2009/01/21/for-the-sake-of-architecture/</guid>
		<description><![CDATA[
	If it is simple, expand the problem by adding additi [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li>If it is simple, expand the problem by adding additional concerns. Justify this by future extensibility and maintainability. Incite and nurture confusion about what may only look simple but is likely to turn out complex later. Later, argue against it by pointing out that the additional complexity never came and no one knows which code is used at all.</li>
<li>If it is complex (or likely to become complex after the prototype phase), analyze half of the complexity and implement one half of that. Justify with completion time and pragmatism. Later, argue against because maintainability requires pain suppressors and protective eyewear.</li>
<li>If it has many features, have modularization by layers only. Justify with build and deploy overhead. Later, argue against the efforts going into a complex build system that was never needed because the layers are always built and deployed together anyway and no different usages, development cycles or versions exist.</li>
<li>If it has many layers, modularize by features only. Justify with agile deployment. Later argue against feature-based modularization in general because shared components have to be versioned and/or redeveloped so often.</li>
<li>If both of the above apply, use arbitrary names and have cycling dependencies between layers *and* between features. Justify by saying that you will build the whole lump in one piece anyway. Justify with easy deploy. Later, argue against modularization in general because with all those cyclic dependencies refactoring would take ages.</li>
<li>Never modularize by abstraction tier. You don&#8217;t need to justify that, nearly everyone will be with you, here, because concrete and explicit is always better than abstract and configurable. You could argue against it when having base components for more than one application. But usually this is not a problem and you will be expected to develop everything again for the second app anyway.</li>
<li>If something is expected to be used at exactly one place, have 4 or 7 classes describing its exact lifecycle. Use unary vertical inheritance or delegate to a stack of static utilities that do it. Justify with reuse. Later, argue against OO because it makes your code less understandable.</li>
<li>If something is used everywhere in different contexts, have it copied, pasted, developed anew each time or at least made static to avoid dependency inversion. Justify with redundancy and damage control. If someone tries to convince, trick or force you into abstract services that use parameter containers or commands, at least have concrete methods to keep it from sinking down the dependency tree. Produce static utilities that carry the name of the desired pattern (e.g. Service, Command etc.) so you can say you did it enterprisey.</li>
<li>If something is the same all the time, have it configure itself by a proprietary configuration file format in a virtual, internet based filesystem on a remote grid. Justify with configurability. Argue against by pointing at the myriad of undocumented config files.</li>
<li>If something is likely to change or be used in a different context, put up a couple of assumptions for the least probable case and hardcode these in a static and final fashion. Have all public methods finalized and all internal methods private. Justify with safety. Later, write a wrapper around them that fuses some concrete components into one, even more concrete component.</li>
<li>If you are working platform-independent, try to have as many dependencies to certain environmental settings as possible. Use the OS to configure your application if you can&#8217;t do it in hardware. Hidden OS particularities like new File(&#8220;C:\\&#8221;) can help. Later, argue against platform independent code because it is slow. Then use another platform-independent system.</li>
<li>If you lose control of your low level implementation, wrap it into a slightly changed interface on the same abstraction level and lose control of that as well. Then delegate that to a static utility with the same &#8220;interface&#8221;.</li>
<li>Try to have interfaces as concrete as possible. Use @implementedBy if you can. Have all possible usecases of a topic defined in one interface. Justify with comprehensibility. Later, argue against interfaces. They are emballage, bulky, stop your code from compiling and do not do anything.</li>
<li>If you really must have terms like module, service, application, scope, mandate, deletion, replication, staging or plugin in your application, try to introduce them into your code as late as possible. Justify with development speed. Have the &#8220;new&#8221; thing be parallel and concurring to the &#8220;old&#8221; thing. Spread among these strategies evenly.</li>
<li>Have as many things as possible require specific knowledge. If you have the choice between writing automation or writing documentation, choose email or your local hard drive.</li>
<li>If something is retrieved dynamically, have a static and final reference to it. Justify with coding convenience. Argue against dynamic retrieval with runtime/network restraints when high availability does not work and strange Errors show up. Recommend a different technology.</li>
<li>If something is static and final, have it initialized by a timer thread, a second application or by special parameter values in regular calls.</li>
<li>Use reflection for public business methods, within the same layer and abstraction level and especially for initialization. Have everyone hate you for it. While reflecting, do not annotat. Use concatenated naming conventions instead.</li>
<li>Ban reflection for lookups and configuration in abstract components and code that handles application components. These calls should always be explicit and concrete, with business names and long, scalar parameter lists at best.</li>
<li>Use fields for temporary calculation results and then transfer these into static methods by either a long parameter list or a proprietary backpack pattern. Make the method synchronized if strange things occur. Use delays if they continue to occur.</li>
</ul>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://research-and-destroy.de/blog/2009/01/21/for-the-sake-of-architecture/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Krieg!</title>
		<link>http://research-and-destroy.de/blog/2008/11/10/krieg/</link>
		<comments>http://research-and-destroy.de/blog/2008/11/10/krieg/#comments</comments>
		<pubDate>Mon, 10 Nov 2008 14:20:23 +0000</pubDate>
		<dc:creator>derlanders</dc:creator>
				<category><![CDATA[Common]]></category>

		<guid isPermaLink="false">http://research-and-destroy.de/blog/2008/11/10/krieg/</guid>
		<description><![CDATA[ [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://research-and-destroy.de/blog/wp-content/uploads/2008/11/l48ac024f74382mit-black-metal-ist-alles-kriegjpg.png" title="l48ac024f74382mit-black-metal-ist-alles-kriegjpg.png"><img src="http://research-and-destroy.de/blog/wp-content/uploads/2008/11/l48ac024f74382mit-black-metal-ist-alles-kriegjpg.png" alt="l48ac024f74382mit-black-metal-ist-alles-kriegjpg.png" /></a></p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://research-and-destroy.de/blog/2008/11/10/krieg/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Too lazy to architecturize your projects?</title>
		<link>http://research-and-destroy.de/blog/2008/10/17/too-lazy-to-architecturize-your-projects/</link>
		<comments>http://research-and-destroy.de/blog/2008/10/17/too-lazy-to-architecturize-your-projects/#comments</comments>
		<pubDate>Fri, 17 Oct 2008 14:15:56 +0000</pubDate>
		<dc:creator>derlanders</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Common]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[funny]]></category>
		<category><![CDATA[do's and dont's]]></category>

		<guid isPermaLink="false">http://research-and-destroy.de/blog/2008/10/17/too-lazy-to-architecturize-your-projects/</guid>
		<description><![CDATA[Here is the solution:

 [...]]]></description>
			<content:encoded><![CDATA[<p>Here is the solution:</p>
<p><a href="http://research-and-destroy.de/blog/wp-content/uploads/2008/10/indirection.jpg" title="IndirectionDesign"><img src="http://research-and-destroy.de/blog/wp-content/uploads/2008/10/indirection.jpg" alt="IndirectionDesign" /></a></p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://research-and-destroy.de/blog/2008/10/17/too-lazy-to-architecturize-your-projects/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How to survive a discussion of principles</title>
		<link>http://research-and-destroy.de/blog/2008/06/11/how-to-survive-a-discussion-of-principles/</link>
		<comments>http://research-and-destroy.de/blog/2008/06/11/how-to-survive-a-discussion-of-principles/#comments</comments>
		<pubDate>Wed, 11 Jun 2008 12:35:05 +0000</pubDate>
		<dc:creator>derlanders</dc:creator>
				<category><![CDATA[Common]]></category>

		<guid isPermaLink="false">http://research-and-destroy.de/blog/2008/06/11/how-to-survive-a-discussion-of-principles/</guid>
		<description><![CDATA[There are so many Books about more or less ingenious de [...]]]></description>
			<content:encoded><![CDATA[<p>There are so many Books about more or less ingenious design patterns, engineering guidelines, modularization, framework usage etc. no one could ever afford the time to actually read one of them. The main point in all of these efforts is widely the same:</p>
<p>I don&#8217;t want to do more work than I have to.</p>
<p>Which is, in fact, the principle of all technology, up to the point where having spent efforts in technology finally frees us from the efforts of the task itself, leaving us just with the efforts of fixing that technology when (if would be nice here, but is inappropriate) it breaks and the effort of finding something meaningful to do. It unfortunately implies &#8220;If I can drive a car with three wheels, why should I bother buying the fourth?&#8221;</p>
<p>So why the heck can&#8217;t I just&#8230;</p>
<p>I mean, you get a task. Say like &#8220;Write an online application&#8221;. What you want to do is get rid of it forever. What your company wants is to get rid of it soon.</p>
<p>So they order you to get it done as soon as possible and you will be spending time on it forever.  Face the fact.<br />
And the first solution that would come to your mind would be: &#8220;OK, if I do this as simple as possible, I won&#8217;t be doing complex errors and be done with it quickly.&#8221; Which is a correct assumption. For one, finite Task.</p>
<p>This is, where multiplicity comes into play. You won&#8217;t be doing one Task in one context. You won&#8217;t be done with it, ever, either. And the first one coming after you will most probably have to do it again in a slightly different fashion. And there is a word for multiplied simplicity: Chaos.</p>
<p>There is a certain amount of complexity that a System will always have, defined at least by the complexity of the tasks it has to perform. There is no way to eliminate this complexity, not even with Object orientation, 4GL and UML. So what happens if you seem to have eliminated complexity is that you actually shifted it somewhere else. Which can be a good thing, once that &#8220;elsewhere&#8221; is in the domain of your customer&#8217;s organization and they can live with it. Or inside some framework voodoo.</p>
<p>Calling things differently or avoiding to name them at all does not eliminate complexity either. It just takes away any possibility to handle them. If your application does not have explicit Tiers (Yay! We have a one-tier application! That is only a quarter of what a 4-Tier application would cost us!) it nonetheless has implicit ones, and usually more than you would imagine. If your application does not employ a model (saved efforts incoming!) it will have an implicit model nonetheless, and even better, it will have several models describing the same thing, once that thing is used in two contexts!</p>
<p>We have a developer here that spent much time painting tables with fields to find implicit models for which no classes exist.</p>
<p>So why bother with architecture, modularization or reuse at all? I mean, even if your system starts with minimum complexity, future evolution will soon drive it into entropy anyway! And yes, this is an effect that can not be avoided by any means we here possess. Any concept of reuse requires overhead, abstraction and configurability which makes the would-be reusable component even more complex. Any concept of modularization requires much work on how these modules interact, are composed, packaged, defined and you have to do much work just finding out where to put your stuff.</p>
<p>Fun, isn&#8217;t it? We actually add more complexity to an already complex system, to be able to view it in a more simple way. Isn&#8217;t that ridiculous? No.</p>
<p>What we can do, is shift complexity away from the evolving spots. We can move it out of the multiplying part of the system, which is usually defined by the features. Since complexity is there, and cannot be done away with, we have to face it somewhere and make sure that it is faced only once. So there are complex components, difficult to understand, cryptic, like many components of software tend to become when left alone for a couple of years, but we have them in their own biotope of complexity, and most important of all, we have their complexities separated, able to be handled one at a time by different people.</p>
<p>It is not the aim of modules to enable old, smelly code of old to work forever, but to have clear places to cut once parts of that code fall to the teeth of time and have to be replaced. Furthermore, we have Modules to enable composition of more than one product (or variation thereof, like a staging installation) while using the same, tested implementation with a different configuration. Featuresets and other terms known to multiply are allowed their own module to keep the multiplying stuff out of their dependencies. This ist costly, but it costs less than multiplying everything in every code.</p>
<p>We do not produce future code that handles all possibilities of future extendsions, but we provide valid rules for extending the system, at defined places, with defined terms and common basic functionality. So then the future code may multiply and change as much as it wants, as long as we are able to handle these multiplying components at all, our basic system remains stable, in fact, it gets even more stable with each new component that uses it, and it actually stays&#8230; simple.</p>
<p>So everytime I drop a design abstraction for the sake of simplicity,  I should take a clear look where it actually went, because I can be sure it will bite me some time.</p>
<p>When I read a book about object orientation, the first argument for OO is &#8220;Encourages reuse of code&#8221;. No. It doesn&#8217;t. It enables you to do reusable components, but these do not besome reusable by just writing &#8220;Class&#8221; somewhere atop your old code.</p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://research-and-destroy.de/blog/2008/06/11/how-to-survive-a-discussion-of-principles/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>My oh my what have we here&#8230;</title>
		<link>http://research-and-destroy.de/blog/2008/04/22/my-oh-my-what-have-we-here/</link>
		<comments>http://research-and-destroy.de/blog/2008/04/22/my-oh-my-what-have-we-here/#comments</comments>
		<pubDate>Tue, 22 Apr 2008 10:03:45 +0000</pubDate>
		<dc:creator>derlanders</dc:creator>
				<category><![CDATA[Common]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://research-and-destroy.de/blog/2008/04/22/my-oh-my-what-have-we-here/</guid>
		<description><![CDATA[Did you ever get scared about modern Software being all [...]]]></description>
			<content:encoded><![CDATA[<p>Did you ever get scared about modern Software being all too intelligent, that it would finally take control and such? Don&#8217;t be.</p>
<p><img src="http://research-and-destroy.de/blog/wp-content/uploads/2008/04/brainless.JPG" alt="brainless" /></p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://research-and-destroy.de/blog/2008/04/22/my-oh-my-what-have-we-here/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A THING emerges&#8230;</title>
		<link>http://research-and-destroy.de/blog/2008/04/11/a-thing-emerges/</link>
		<comments>http://research-and-destroy.de/blog/2008/04/11/a-thing-emerges/#comments</comments>
		<pubDate>Fri, 11 Apr 2008 18:26:29 +0000</pubDate>
		<dc:creator>derlanders</dc:creator>
				<category><![CDATA[Common]]></category>

		<guid isPermaLink="false">http://research-and-destroy.de/blog/2008/04/11/a-thing-emerges/</guid>
		<description><![CDATA[Really... after all that architecture nonsense and frui [...]]]></description>
			<content:encoded><![CDATA[<p>Really&#8230; after all that architecture nonsense and fruitless &#8220;platform&#8221; development (like in &#8220;fill the svn with a crapload of thingies which are ignored and reimplemented anyway&#8221;), the old question: &#8220;Yeah! But is it ART???&#8221;. How could web application development possibly benefit froum our efforts?</p>
<p>Today, I came across my first new component that did, for a change, require no big deal of &#8220;platform&#8221; implementation. In the unyielding hope, that this at one far day might become the rule and not the exception, I&#8217;d like to shed some light on the details.</p>
<ul>
<li>I started with the query. That is a good way to start, one gets a good hold on what to expect and what to pay for. Since we are doing a rewrite of existing software, I held my breath and dove deep into the existing PHP. To find a previous implementation in the action code that pretty much resembled a query along with some decision code and a &#8220;routine&#8221; (Piece of code set apart with blank lines and actually sporting a comment) to determine bar width for some kind of bar diagram &#8211; fine.</li>
<li>The query wasn&#8217;t too complicated, basically a PageableListQuery, for which a base implementation exists. In my concrete query, I put in interfaces for Cacheability and the data provider datasource where it should be executed.</li>
<li>Once the query was there and I had determined the query parameters needed, I realized that the return type of that query actually missed in our Object model. Since our BOs do not have any Dependencies, I unscroupulously added a new class asking questions later.</li>
<li>The class stayed small, the table actually looks full of data but in reality it only has a few colums plus it is sortable.</li>
<li>Suppressing the urge to do something entirely different first, I introduced a pretty stark junit test case that asserts at least the query string that goes to our data provider and checks if it is possible to get a result at all. Of course, the result list had zero elements and some Exception hit the wall next to my head.</li>
<li>There was a new BO Type, so I had to write a Mapping for it. Since I am the first and only person to request this BO type, my Mapping goes to the class annotation as default mapping, go me! And since it is an unspectacular list mapping, I even get to retain the GenericListMapping for the iteration part and only have to implement the single object part, which is nice because this is very unlikely to produce strange errors. Mappings could be far more generic and self-contained, but our data provider has a rather odd object design and it is better understandeable to have some repeated code than some cryptic extension code to a generic mapping where no one knows how it works.</li>
<li>With the generic list mapping annotated to the query class and the item mapping to the BOM class, the platform knows enough to get me datah! One day soon I&#8217;ll make GenericListMapping default for all ListQueries, but that&#8217;s not so easy.</li>
<li>Tried the test case again. Yay! One field was not mapped correctly, but the result graph was o.k. It is good to know that a query executes correctly without having to deploy the application to JBoss to find out.</li>
<li>Added some meat to the test case, but it is not wise to make the data content tests too sharp, it is not our Job to ensure data quality of our data provider which more often than enough irritates our tests. A result list with more than one entry and the first entry object with some correctly mapped fields in all graph objects was enough.</li>
<li>Started Struts action implementation. Since the table does not have any complicated decision code and no data rearrangement voodoo either, I didn&#8217;t have to add much to the class. There is a default implementation for actions that display a List of BOs called PageableListAction which I could extend, all I had to do is add the action parameters, a method that creates the query and passes the action parameters to it (if that does not come from the configuration) and a little method to calculate the bar width. Since this one does not produce an array of widths but only one result per BO, it shrank down to one line.</li>
<li>When looking into the navigation.xml config I saw that The Ralph of God had already left His traces. Normally, I would have to add a menu point in the main Navigation and four tab navigation entries there, pwith the possibility to configure default parameters or query implementation.</li>
<li>in the struts.xml, someone had done similar, but I still had to add result entries since the JSP (can&#8217;t blame them, the pages don&#8217;t exist yet, not everyone is adept at precognitive software engineering) since we do no magick in the struts config, I can forget about that file from now on. Actually, I do so from time to time, the PostIt at my monitor labeled &#8220;Remember that there is a struts.xml&#8221; surely helps.</li>
<li>Speaking of JSPs, they were the worst part that time. Usually, there is a premade file from the HTML Ubergurus which dwell on the surface that I can cut and paste, put some &lt;xx:iterator&gt; and &lt;xx:text&gt; here and there and be done with it, but these were a little strained with other, more important stuff so we had to extract from the old system. Which is what I did, the templates of the old system are well separated from the &#8220;action&#8221; code (that is a good thing) and it looked easy enough.</li>
<li>There are 2 JSPs now, one for the page and one for the component. It is the first and presumably only usage of that component, but concrete implementations of entire pages <strong>always </strong>attract later changes that fry the recyclability. The component jsp is called from the page JSP by &lt;xx:action&gt; and that&#8217;s it, since I do not require any additional parameters yet that I would otherwise put in here.</li>
<li>Added standard component JSPs for taglib include, header and footer to the page and and tab navigation along with  a page count/progression control to the component JSP, whatever crash should occur on that page, it will at least look nice from now on.</li>
<li>There should be a test case for that one-line bar-width calc method, I know. I promise, there will be some time in the future.</li>
<li>Smoke test. Bäm. Some THING emerged. From now on, bugfixing.</li>
</ul>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://research-and-destroy.de/blog/2008/04/11/a-thing-emerges/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>We were wrong all the Time!</title>
		<link>http://research-and-destroy.de/blog/2008/04/02/we-were-wrong-all-the-time/</link>
		<comments>http://research-and-destroy.de/blog/2008/04/02/we-were-wrong-all-the-time/#comments</comments>
		<pubDate>Wed, 02 Apr 2008 09:37:05 +0000</pubDate>
		<dc:creator>derlanders</dc:creator>
				<category><![CDATA[Common]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://research-and-destroy.de/blog/2008/04/02/we-were-wrong-all-the-time/</guid>
		<description><![CDATA[If you’re not familiar with FAD, then you’ve been m [...]]]></description>
			<content:encoded><![CDATA[<p>If you’re not familiar with FAD, then you’ve been missing out. Essentially, FAD is a fundamental paradigm shift over the “traditional” and “neo” ways of building software. Not only does it surpass every other software development methodology out there, it solves every problem there is to building software. And then some.</p>
<p><u><strong>The FAD Manifesto</strong></u></p>
<blockquote><p><strong>I. Front Ahead Design<br />
</strong>The essence of FAD is conveyed directly in its name: design your front-end/user-interface first, ahead of everything else. The customer could care less what’s behind the scenes, so long as it looks good and does what it’s supposed to. Deliver a working front-end first and then <em>Do What It Takes</em> to fill in the functionality gaps.</p>
<p><strong>II. Do What It Takes<br />
</strong>Other methodologies are great at delivering excuses. How many times have you heard (or have been told) “we can’t do that here because it could throw off the whole design?”  In FAD, you just <em>do it</em> (that would have been the bullet point, but Nike has it trademarked). To get it done, you <em>Do What It Takes</em>. Your customer will love you.</p>
<p><strong>III. Code Light, Not “Right”<br />
</strong>A traditional methodology calls a complex framework with layer after layer of objects. In those ways, adding a simple value to a form can be a monumental task, requiring it to be added to every single layer. Does that sound right? Proponents of the other methodologies will tell you it is, but what about your customer? With FAD, you just <em>Do What It Takes</em> to add the functionality to your interface. No more.</p>
<p><strong>IV. “Throw Away” Diagrams</strong><br />
Think of all the Visio diagrams you’ve drawn over the years. Sequence diagrams, context diagrams, flow charts, and so on. Was that really productive? Did your customer ever see any of those? Were those diagrams even relevant after the system was finally developed? Didn’t think so.</p>
<p>In FAD, all diagrams are made on a disposable medium. Whiteboards, napkins, even your forearms work. And there is no formal modeling language to battle with: just <em>Do What It Takes</em> to draw and explain your design to other developers.</p>
<p><strong>V. Life Is Short (a.k.a. Patchwork)</strong><br />
The average software system has a life expectancy of seven years. No matter how “properly” the system is designed from the start, within the first year of its life, maintenance programmers unfamiliar with the complex architecture (and having no help from out-of-date documentation) will turn the system into a complete mess with bug fixes and change requests.</p>
<p>In FAD, this isn’t even a concern. We know the short life span of a system and develop every feature (from the interface) as a patch. Maintenance programmers can come in and <em>Do What It Takes</em> to add their patches. In FAD, we don’t even try to stop the aging process. We encourage it.</p>
<p><strong>VI. Learn To Deal<br />
</strong>Many other methodologies focus on delivering “quality” (as in “bug free”) software. And guess what: they fail. Miserably. No matter how hard you try, software will have bugs. In FAD, we just <em>learn to deal</em> with it, and we encourage the client to do the same. So what if the application crashes when you click that button that way? Don’t click the button that way, and <em>learn to deal</em>!</p>
<p><strong>VII. Be Environmentally Conservative<br />
</strong>In the real world, there’s only one environment: it’s called The Real World. So why do some methodologies invent these counter-intuitive, bizarro environments called “QA” and “UAT”? Do architecture firms construct an entire house <em>before</em> building an addition on yours, just so they can “test” their building skills? Of course not, and neither should software developers. In FAD, there’s only one software environment: Production. Anything else is pollution.</p></blockquote>
<p><strong><u>FAD Application Design</u></strong></p>
<blockquote><p>NOTE: First and foremost, understand that the FADAD is merely the <em>preferred </em>method of building applications. Because in FAD, we <em>do what it takes</em>, a lesser or more in depth approach can be used as needed.</p>
<p>Many of the tenets of Front Ahead Design are based on the failings of other methodologies. FADAD is no different, and draws some of its key facets from the archaic Model-View-Controller architecture. In MVC, there are three different components: the Model (the data), the View (the UI), and the Control (everything else).</p>
<p>If you think about it, two of MVC’s components are nothing but dead weight. All anyone – including the client – really cares about when all things are said and done is the View. Therefore, in FADAD, our guiding architecture model is simply called “V”:</p>
<p><img src="http://img.thedailywtf.com/images/200804/v.png" /></p></blockquote>
<p><strong><u>The H/YPE Framework: The FAD Developer’s Best Friend</u></strong></p>
<blockquote><p>If there’s one thing that’s frustrated just about every developer out there, it’s “untouchable” library code that <em>almost</em> does what you need it to, but not quite. For FAD developers who chose to use the H/YPE framework, this is not a problem.</p>
<p>Unlike the stodgy libraries of yesteryear, H/YPE is not a “compiled” library. It’s a set of cross-language codefiles that can be copied to any application, and is designed to “live” with that application for life. Don’t like that 48 plus 92 is <em>not</em> 4892? No problem! Just edit MathHelper. Here’s a small subset of what comes in H/YPE:</p>
<ul>
<li><strong>HYPE.StringHelper</strong> – all sorts of functions like IsEqual, AreEqual, Add, Subtract, Join, DoubleJoin, Encrypt, and Decrypt</li>
<li><strong>HYPE.VHelper.HTML </strong>– the ultimate HTML library including functions like WrapInCENTER, UnHTML, ToHTML, and ScriptBlock</li>
<li><strong>HYPE.Audio </strong>– everything you’d ever want to add audio, including Beep and BeepMore</li>
</ul>
</blockquote>
<p><strong><u>But Wait, There’s More: Certification!</u></strong></p>
<blockquote><p>No, I don’t mean to sound like our good friend Ron Popeil, but before wrapping things up here, I wanted to tell you about the latest excitement in the world of Front-Ahead Design: certification!</p>
<p>Just last week at the International FAD Conference in Azerbaijan, I joined several other FAD leaders to formally announce the first official Front-Ahead Design certification program: the Fadstronaut certificate. Why Fadstronaut? Because we felt that the astronaut was the best analogy for the challenges and difficulties that FAD software developers face each day.</p>
<p>Becoming a Certified Fadstronaut is easy, but not too easy. All you need is one year (1,000 hours) of verifiable FAD development experience, and you’ll be eligible to sit for the Fadstronaut certification exam. Score in the 50th percentile, and you’ve earned the designation <em>Certified Fadstronaut</em>!</p></blockquote>
<p>I hope that gives you all a good idea of what FAD is all about. Believe me, there’s a whole world more of FAD out there. That said, I hope to see some of you soon at the Worldwide FAD Meeting in Buenos Aires next month!</p>
<p>http://thedailywtf.com/Articles/FrontAhead-Design.aspx</p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://research-and-destroy.de/blog/2008/04/02/we-were-wrong-all-the-time/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>About new architectures and old filthy systems&#8230;</title>
		<link>http://research-and-destroy.de/blog/2008/03/07/uber-neue-architekturen-und-alte-siffsysteme/</link>
		<comments>http://research-and-destroy.de/blog/2008/03/07/uber-neue-architekturen-und-alte-siffsysteme/#comments</comments>
		<pubDate>Fri, 07 Mar 2008 16:56:24 +0000</pubDate>
		<dc:creator>derlanders</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://research-and-destroy.de/blog/2008/03/07/uber-neue-architekturen-und-alte-siffsysteme/</guid>
		<description><![CDATA[http://thedailywtf.com/Articles/Jurassic-Programmers-.a [...]]]></description>
			<content:encoded><![CDATA[<p><a HREF="http://thedailywtf.com/Articles/Jurassic-Programmers-.aspx">http://thedailywtf.com/Articles/Jurassic-Programmers-.aspx</a></p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://research-and-destroy.de/blog/2008/03/07/uber-neue-architekturen-und-alte-siffsysteme/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>News from the 16ms frontier</title>
		<link>http://research-and-destroy.de/blog/2008/03/07/neues-von-der-16er-front/</link>
		<comments>http://research-and-destroy.de/blog/2008/03/07/neues-von-der-16er-front/#comments</comments>
		<pubDate>Fri, 07 Mar 2008 16:56:15 +0000</pubDate>
		<dc:creator>derlanders</dc:creator>
				<category><![CDATA[16ms]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://research-and-destroy.de/blog/2008/03/07/neues-von-der-16er-front/</guid>
		<description><![CDATA[Yay! We were finally able to fake some posable statisti [...]]]></description>
			<content:encoded><![CDATA[<p>Yay! We were finally able to fake some posable statistics which show that the cache system we use is uber. Okay, uber against partial caching in the file system, but still superior by factor 24.  (Sorry, should be 23, we are working on it) Below a test result table for a time test:</p>
<p><img src="http://www.nachtswach.de/onvista/images/pwned.GIF" alt="42 ms &gt; 1337 ms" /></p>
<p><em>&#8220;It is all lies! Everything I took for real all these years &#8211; a lie.&#8221;</em></p>
<p>As it seems, firebug only measures the time needed for a http response to load, which means our previous results were somewhat wrong. And the results for the PHP system too. The processing time from click to the start of the response is not included in either system.  Now we used highly sophisticated software tools to overcome this flaw and produced&#8230; interesting results.</p>
<p>Figures spat out by some testing automat have to be regarded with suspicion though, especially if it is a quickly clicked test. However, if these Numbers are right, the Average click time of our JBoss (in transwarp overdrive mode, with solid fuel boosters and native library extensions along with our supportive pedaling) is about 35ms, with an ugly peak of 70 ms. The peak of the php system is 10.</p>
<p>Seconds.</p>
<p>So if you take a look at the graph below, there are the two pointy graphs with the live system (blue)  and the qa instance (green). The red graph (The JBoss system) does not look pointy here because of the 10 second peak from the live system which ruins the scale. (The red and blue graph drop to zero because they finished their 100 clicks before the QA system)</p>
<p><img src="http://www.nachtswach.de/onvista/images/graph4.png" alt="ooover niiinethoousand!!!!" /></p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://research-and-destroy.de/blog/2008/03/07/neues-von-der-16er-front/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

