Good article man. We need to be focused on that.. and as the definition mention.. Architecture is hard to change later.. I totally agree with that!<br><br><div class="gmail_quote">On Tue, Oct 25, 2011 at 8:40 AM, Marco Rietveld <span dir="ltr">&lt;<a href="mailto:mrietvel@redhat.com">mrietvel@redhat.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
  

    
  
  <div bgcolor="#FFFFFF" text="#000000">
    <br>
    Hi guys, <br>
    <br>
    It&#39;s a little wordy -- and to some extent just a logical extension
    of &quot;<a href="http://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959" target="_blank">The
      Mythical Man-Month</a>&quot;[1] (which I also strongly recommend), but
    there&#39;s a decent article about design/architecture here: <br>
    <br>
    <a href="http://www.ibm.com/developerworks/java/library/j-eaed1/index.html" target="_blank">http://www.ibm.com/developerworks/java/library/j-eaed1/index.html</a><br>
    <br>
    In particular, the following: <br>
    <blockquote>Which leaves my favorite definition for architecture:
      <blockquote>
        &quot;Stuff that&#39;s hard to change later.&quot;
      </blockquote>
    </blockquote>
    ...<br>
    <blockquote>The third enabler of accidental complexity is <i>irreversibility</i>.
      Any decision you make that cannot be reversed will eventually lead
      to some level of accidental complexity. Irreversibility affects
      both architecture and design, although its effects are both more
      common and more damaging at the architectural level. Try to avoid
      decisions impossible or cumbersome to reverse. One of the mantras
      I&#39;ve heard some of my colleagues use is to wait until the <i>last
        responsible moment</i>. This doesn&#39;t mean that you should put
      off decisions too long, but just long enough. What is the last
      responsible moment you can make a decision about some
      architectural concern? The longer you can avoid the decision, the
      more possibilities you leave open for yourself. Ask yourself: &quot;Do
      I need to make that decision now?&quot; and &quot;What can I do to allow me
      to defer that decision?&quot; You&#39;ll be surprised at the things you can
      defer until later if you just apply some ingenuity to your
      decision-making process.
      <br>
    </blockquote>
    and lastly: <br>
    <blockquote>
      <p>
        The last of the overarching concerns for architecture and design
        is a phrase I&#39;ve made up
        called <i>rampant genericness</i>. We seem to have a disease in
        the Java world: overengineering solutions by trying to make them
        as generic as possible. The motivation for this is clear: If we
        build in lots of layers for extension, we can more easily build
        more onto it later. However, this is a dangerous trap. Because
        genericness adds entropy, you damage your ability to evolve the
        design in interesting ways early in the project. Adding too much
        flexibility makes every change to the code base more complex.
      </p>
      <p>
        Of course, you can&#39;t ignore extensibility. The agile movement
        has a great phrase that sums
        up the decision process for implementing features: YAGNI (You
        Ain&#39;t Gonna Need It). This
        is the mantra to try to avoid overengineering simple features.
        Just implement exactly what
        you need now, and if you need more stuff later, you can add it
        then. I&#39;ve seen some Java projects so bloated with compromises
        in both architecture and design made at the altar of genericness
        and extensibility that the projects failed. This is of course
        ironic because planning for the project to live as long as
        possible truncated its life. Learning how to navigate the fine
        line between extensibility and overengineering is tough, and
        it&#39;s a subject I&#39;ll come back to frequently.
      </p>
    </blockquote>
    <br>
    Thanks,<br>
    Marco<br><font color="#888888">
    <br>
    <pre cols="72">-- 
jBPM/Drools developer
Utrecht, the Netherlands</pre>
  </font></div>

<br>_______________________________________________<br>
jbpm-dev mailing list<br>
<a href="mailto:jbpm-dev@lists.jboss.org">jbpm-dev@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/jbpm-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/jbpm-dev</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br> - CTO @ <a href="http://www.plugtree.com" target="_blank">http://www.plugtree.com</a>  <br> - MyJourney @ <a href="http://salaboy.wordpress.com" target="_blank">http://salaboy.wordpress.com</a><div>
- Co-Founder @ <a href="http://www.jugargentina.org" target="_blank">http://www.jugargentina.org</a><br> - Co-Founder @ <a href="http://www.jbug.com.ar" target="_blank">http://www.jbug.com.ar</a><br> <br> - Salatino &quot;Salaboy&quot; Mauricio -</div>
<br>