fredag 27. februar 2009

A Fluffy Pearl

Once in a while whilst opening oysters, one stuble upon a pearl. I just recently did, as I was cracking what I thought was another one of those enterprisy, high-level, just-fluff-no-stuff article oysters. The probability of discovering a a pearl in one of these, from my subjective view at least, is not really great. So, I thought I'd share it:

Evolutionary architecture and emergent design: Investigating architecture and design

Considering the respectable author, don't let the title scare your away. In this first (of a series of articles) Neal Ford does a great job at defining and describe central concepts and notions such as "architecture", "architect", "design", SOA, and more. Being over-used words it is easy to be ignorant about what they really represent. However, my impression is that being ignorant about them actually says a lot about how well one understand the social process that software development is. Also, Ford pinpoints some important truths regarding software architecture, that made me go: "Exactly, that's what I always meant to say!"

I'll sum up (my perceived) highlights from the article:
  • "We should stop referring to Java programming as an object-oriented language and should call it a framework-oriented language."

    Yep, that's right. Being a java developer is much about knowing what's around. To prevent re-inventing (or create square) wheels. Knowing how to combine open source building blocks, and do so in ways that conform with established best-practices and patterns that will provide foundations that minimize technical debt (see below) and complexity.

  • Architecture: "Stuff that's hard to change later."

    One of the core ideas behind evolutionary architecture is to defer decisions as late as you can. But it is all balancing on an avalanche. I liked, and recognised myself as an occational sinner of, Ford's futher notion of "Rampant genericness". "We seem to have a disease in the Java world: overengineering solutions by trying to make them as generic as possible." Being generic can be a means to defer an architectural decision or making it easy to substitute something later. But the cost of genericness is increased complexity. I think it is a good practice to keep reminding yourself of the YAGNI principle (You ain't gonna need it) :-)

  • Architectus Reloadus vs Architectus Oryzus

    Architectus Reloadus: Powerpoint architects that last wrote code about a decade ago, and now they're making the important decisions.

    Architectus Oryzus: Architects that actively contribute code to the project, pairing with other developers on the hardest parts. Their responsibilities also include interacting with other project stakeholders to make sure that everyone speaks the same language.

  • And for the icing of the cake: Words of wisdom about technical debt

    "Compromises in your design for the sake of some external force, such as schedule pressure. Technical debt resembles credit card debt: you don't have enough funds at the moment, so you borrow against the future. Similarly, your project doesn't have enough time to do something right, so you hack a just-in-time solution and hope to use some future time to come back and retrofit it."

    Compared to credit card debt, you have to repay it - quickly. Else it will accumulate - quickly. Eventually, and to take it to an extreme, it might throw you out of your home. The same thing applies to software development. One needs to be aware the importance of doing things correct as early as possible. Don't postpone refactoring. Mess is viral. If you don't get rid of it, it will spread. From my experience, suprisingly few project managers and team leads recognise the importance of handling this. The failure to do so might be disastrous for a project. My personal experience is that managers that do recognize this best, however, tend to be (former) developers/grease-monkeys themselves.

So, consider my warm recommendations and read the article yourself at: http://www.ibm.com/developerworks/java/library/j-eaed1/index.html

tirsdag 21. oktober 2008

Enter planet Frustration

I just spent 10 minutes writing the first entry for this blog using an iGoogle-gadget... I was just about to post the entry to my blog when suddenly iGoogle did an unprovoced refresh - and *all* of my text was suddenly blanked out. Talk about kickstart!

This blog is just about this kind of stuff, documenting some of the frustrations that I encounter in my everyday life. But don't get me wrong, although there will be a lot of whining, I also hope that I can shed some light on quirks and more or less hard-won nice-to-know stuff. The fact that I spend an disproportionate amount of time writing Java applications and playing with Duke in general, I expect that most of the following posts will be Java-related. However, there is no guarantee that this blog will make it through a second post. It should be noted that this is probably my 3rd or 4th attempt at a blog ;-)

And a final disclaimer: This blog is mostly just for me, documenting and reflecting upon stuff that I have experienced, loading off some thoughts and ideas. Of course, if the blog was intended exclusively for me, it would probably not have been written in Ola-english, but rather in some archaic lingo such as Rigsmaal, my daily preferred language.

To sum up... be aware that posting to blog via this iGoogle gadget is a game of chance!