Tuesday, July 29, 2008

Top 44

Here comes my list. It’s a tough job to find an album for each year of my life. I was inspired by the list Werner Vogels posted on his blog. The toughest task was to leave bands or albums out in order to adhere to the rule “no repeat for artists”. I know, bands and artists like ZZ-Top, Jefferson Airplane, Grateful Dead, David Bowie, Henry Rollins or Slayer are not on the list - my apologies. Furthermore, bands and interprets as the Beatles or Frank Zappa could fill half of my list easily. Finally, Elvis is not on the list either. Well, the King should have is own list because he is the King of Rock ’n’ Roll.

1964: The Kinks, The Kinks
1965: Byrds, Mr Tambourine Man
1966: Beach Boys, Pet Sounds
1967: The Doors, The Doors
1968: Beatles, The White Album
1969: The Band, The Band (Brown Album)
1970: Black Sabbath, Black Sabbath
1971: Led Zeppelin, Led Zeppelin IV
1972: Deep Purple, Made in Japan
1973: Pink Floyd, Dark Side of the Moon
1974: Lynyrd Skynyrd, Second Helping
1975: Patti Smith, Horses
1976: Eagles, Hotel California
1977: Sex Pistols, Never Mind the Bollocks, …
1978: Bob Seger, Stranger in Town
1979: Frank Zappa, Joe’s Garage
1980: AC/DC, Back in Black
1981: Gun Club, Fire of Love
1982: Scorpions, Blackout
1983: Tom Waits: Swordfishtrombones
1984: Judas Priest, Defenders of the Faith
1985: Dire Straits, Brothers in Arms
1986: Metallica, Master of Puppets
1987: U2, Joshua Tree
1988: Lou Reed, New York
1989: Faith No More, The Real Thing
1990: Midnight Oil, Blue Sky Mining
1991: Nirvana, Nervermind
1992: Alice in Chains, Dirt
1993: Melvins, Houdini
1994: Oasis, Definitely Maybe
1995: Neil Young (with Pearl Jam), Mirror Ball
1996: Soundgarden, Down on the Upside
1997: Bob Dylan, Time out of Mind
1998: Queens Of The Stone Age, Queens Of The Stone Age
2000: Johnny Cash, American III: Solitary Man
2001: REM, Reveal
2002: Bruce Springsteen, The Rising
2003: Calexico, Feast of Wire
2004: Wilco, A Ghost is born
2005: Audioslave, Out of Exile
2006: Tool, 10.000 Days
2007: Foo Fighters, Echoes, Silence, Patience & Grace

Monday, July 14, 2008

Key Success Criterions in Software Development

Software Development is still a heuristic process affected by many internal and external parameters. Many books are written in order to make this sort of craftsmanship more deterministic. The outcome may vary. I really like to define 4 (four) key objectives at the beginning of a project, either software or system development. Our brains are filled up with too much information; so four (4) might be feasible to keep in mind:

  • Tame complexity: complexity kills any system; over-engineering leads to a system that is not maintainable any more and just extensible by wrappers and such nasty type of things
  • Requirement Management: make sure that a proper requirement management is in place; either by using the well-known (and rarely used thoroughly) principles [complete, traceable, testable, …] or by newer, agile processes
  • Software & System Architecture: a well defined and described architecture must be in place and communicated to the whole team
  • Plan for change and failure: we live in a world of constant change, and the same is true for a software projects; this must be addressed in our way of creating software; in addition, failure is an option, complex system are hard to comprehend and error-prone; we must accept this and should strive to develop a strategy to deal with this fact in an open manner

Sunday, July 13, 2008

Awesome Crater Lake

Crater Lake, June 2008 - webduke pics

Friday, July 11, 2008

Domain Specific Languages and Software Factories

I put some thoughts about Domain Specific Languages (DSL) and UML in a post recently. But there is a broader scope to address DSL - it’s the promising and ongoing approach of Software Factories. The utilization of Software Factories is the wonderful dream to produce software systems like cars or industrial goods (which is a pretty simplified example). Anyway, in order to describe and specify the problem, it needs a language with semantics and syntax. There are examples for existing Domain Specific Languages, needed to solve these problems: SQL, Regular Expressions or HTML for instance. Based on a DSL, a standard development environment (like Eclipse) could be used to build a software factory. Sure, the tool must be customized, and it needs other components to have a Software Factory in place - templates, processes, patterns, frameworks, models (just to list a few of them). From the functional perspective, prototypes or main components of the domain encapsulating key mechanism and basic design elements are other essential parts. I don’t want to list all pro and cons of a Software Factory. Just as a final remark - software development is still a heuristic process containing a few deterministic steps. The utilization of Software Factories would increase the deterministic proportion (but would not make the heuristic part vanish completely which is good news for all folks writing code).

Friday, July 04, 2008

Handling Non-Functional Requirements with Utility Trees

I would like to pick up the topic Non-Functional Requirements (aka Quality Attributes) briefly. The topic is understood and accepted widely but the handling lacks clear methodology, structure and tools. Utility Trees are a good approach to overcome this. A Utility Tree contains Utility as the root node. The second level nodes are the quality attributes which are identified for the software system; in my tiny example: security, performance and availability. Btw, the example is about an e-commerce solution where payment is involved. Sure, extensibility/modifiability should be added as another quality attribute. We-based applications are subject for continuous change. Each of the quality attributes has specific concerns, in this example two per quality attribute. In the next level (just sketched in my example), scenarios are the leaves of the utility tree. They are typical prioritized along two dimensions – importance to the success of the system and identified risk in achieving the objective. Prioritization is based on a ranking using Low [L], Medium [M] and High [H]. I have just added two scenarios to my example; both are about performance. How to move forward with the utility tree? This will be covered in one of my upcoming post. Have great weekend!