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"><<a href="mailto:mrietvel@redhat.com">mrietvel@redhat.com</a>></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's a little wordy -- and to some extent just a logical extension
of "<a href="http://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959" target="_blank">The
Mythical Man-Month</a>"[1] (which I also strongly recommend), but
there'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>
"Stuff that's hard to change later."
</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've heard some of my colleagues use is to wait until the <i>last
responsible moment</i>. This doesn'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: "Do
I need to make that decision now?" and "What can I do to allow me
to defer that decision?" You'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'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't ignore extensibility. The agile movement
has a great phrase that sums
up the decision process for implementing features: YAGNI (You
Ain'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'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's a subject I'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 "Salaboy" Mauricio -</div>
<br>