Archive Page 2

Generic Isn’t Always Better

17Aug09

I saw a tweet recently that read ‘Use of “general” and “flexible” are design meeting smells’.

The truth is, words like “generic”, “general”, and “flexible” are pretty loaded words. Like the words “architect”, and “agile”, these words have different meaning to different people and unfortunately are very often misused.

The word generic is also a very absolute term. So absolute, that it actually never makes sense to use in terms of software, without a relative operator like ‘more’ or ‘less’ to describe the scale of flexibility. To say that a solution is generic is a fallacy because there is no way to assert whether a solution is generic or not. Generic implies a maximum level of abstraction. In absolute terms, this is not achievable. Does the solution cut my grass? Surely it’s not generic then.

I think in many cases the words are used flippantly in work cultures that don’t encourage innovation and evolutionary design. In cultures where software is largely defined up front and defined to satisfy requirements that are not well known or in some cases not known at all, design meetings will be driven by excessive, risk-adverse, use of this language. In work-cultures where software is not largely defined up front, or in worse cases not defined up front at all, the same thing can happen for different reasons. In this case, developers feel like they never have an opportunity to develop great solutions because they are forever putting out fires due to lack of planning. For them, use of these words is almost like a defense mechanism, and they come out of their mouth before they’ve even thought about it. They tend to overcompensate in an effort to manage delivery expectations.

I believe both cases are driven by good intentions. As developers, we like to abstract. Doing so, can remove complexity, and in many cases add heaps of value. In some cases though, it can work against us. If the solution does cut my grass then it’s possible that it isn’t doing what is supposed to do very well. The problem is when we start to look at abstraction as a silver bullet. We must remember that like “architecture” and “agile”, abstraction is a tool. Not unlike the tools we build, it isn’t the only one in the toolbox.

Agilists and Architects: Allies not Adversaries Presentation

26Jun09

Martin Fowler and Rebecca Parsons speak about the challenges of Enterprise Architecture in agile environments:

http://www.infoq.com/presentations/agilists-and-architects

The Ultimate Top 25 Chuck Norris “The Programmer” Jokes

16Jun09

http://www.codesqueeze.com/the-ultimate-top-25-chuck-norris-the-programmer-jokes/

“6. Chuck Norris doesn’t need garbage collection because he doesn’t call .Dispose(), he calls .DropKick().” … ROFL

Mining Industry Slow Down in Western Australia

12Jun09

Downsizing

Labelling Bugs as Features

12Jun09

bug

Dreamhost

10Jun09

logo

I’ve been using Dreamhost services for a few years now and thought I should finally write about my experiences. They’ve all been positive.

Not surprisingly, Dreamhost are a host provider. They’re a Unix shop with a wealth of support for all my favorite open source technologies. They provide shell access to your domain but also have a very rich web panel for doing almost everything.

The web panel allows you to configure account users, email users, ftp users, database users, databases, applications (one-click installs for various open source apps including CMS, forum, gallery, etc type software). By default, domains are stacked with admin tools, like phpmyadmin and squirrelmail, but Dreamhost also integrate with Google Apps if you prefer to host your email, calendars, documents, and even web pages with Google using the Apps product suite (highly reccomended). In both scenarios, standard, common-sense subdomains are automatically set up on your behalf, like mysql.[domain].com, mail.[domain].com, calendars.[domain].com, documents.[domain].com, etc.

Other dreamhost web panel tools include backup/restore, task scheduling (cron), stats reporting, subversion, htaccess / webdav, etc.

All of that, plus unlimited hard disc, plus unlimited bandwidth, plus support for an unlimited number of domains and emails, plus great service – all for $5.95 US / month. Trust me, it is both too good to be true, and true at the same time.

Dreamhost hosts this site, but I’ve also set up 3 other accounts (1 account hosts 18 domains) on Dreamhost, and in each case there was not a business need that couldn’t be satisfied by their offering quickly and easily.

Angry Man

10Jun09

Throw-it-Over-the-Wall-Mentality

03Jun09

I’ve struggled with this throughout my career, but it’s never made sense to me until recently.

A colleague said something about operating in isolated environments so that one skill-set does not influence another skill-set. He was referring specifically to analysts not having access to development resources so that the requirements gathered from the client are true and pure and not tainted by technology. It may explain why I’ve come across so much resistance in past experiences to open and collaborative environments, although I’m sure there were also those who were just reluctant to the general concept of transparency (for other obvious reasons).

While this particular point was interesting, and I must agree that it is always a challenge gathering requirements without proposing solutions, I still think there is too much to be lost by adopting a throw-it-over-the-wall-mentality.

I’ve spoke before about the importance of transparency and I don’t think working in silos is conducive to successfully delivering quality software. First of all we end up with specialists instead of generalists. Specialists are great for some tasks (typically for review and training (especially in niche areas like UX)), but generalists are what we need in software development teams. Analysts need to understand and appreciate the complexities of the software they are using as do the business/consultants/clients. The scale will vary from one end of the spectrum to the other, but the closer we can always keep everyone together, the much better the outcome. Developers must also be close to the business to appreciate and understand their pains. The only way that all of this can take place is if we stop throwing things over the wall and start talking, start working collaboratively, start sharing ideas and visions.

One of the first things you will notice if you are in a throw-it-over-the-wall type of environment is an emphasis on contracts or agreements. When the team A lead is telling the team B lead that the most important part of the design is the interface between team A’s component and team B’s component you are in trouble. The fact that team A wants to know nothing about the design of team B’s component is a sign of silos forming.

More subtly, the contract or agreement will be between a development team and another team. The outputs of one team serve as inputs for the other team. It makes sense that developed source code goes through a quality assurance cycle performed by another team for example. But, when the tester starts to require that the software be packaged in such a way that they would never need to ask a developer a question, things have gotten out of hand. Ideally, the tester would be working along side the developer, developing the test cases at the same time or before the developer.

The other problem with throwing things over the wall is that it just takes too long. People start to hold on to things because they are scared to throw it over and have it thrown back (especially if it’s not thrown back soon enough to do anything about it). This is a bad spot to be in, and will take some time to fix. People in these environments are generally very defensive and self-serving. People need to get used of working together as a team with collective ownership of all software artifacts.

It does seem like pretty basic stuff, but the truth is it requires a lot of discipline to support this type of transparency and teamwork. We all have tendencies to just do the work ourselves and not collaborate because we think it will be easier, but there are a wealth of tools / ideas for making collaboration easier and, in some cases, making it something we can’t hide from. Things like open work spaces, on-site development, scrum walls, etc are all good examples.

Melbourne, Australia

03Jun09

p1010620
p1010615
p1010600

Went to Melbourne a while back for a long weekend. Kelly was on training for a week, but she decided to go up on the Thursday beforehand, and I decided to tag along for the weekend.

I have to say, it became my second favorite city in Australia next to Perth. I’ve since then learned that the weather is quite a lot to deal with and may recall my vote, but that weekend it was perfect!

p1010580
p1010567
p1010537

We covered quite a lot of ground as well. We stayed in Williamstown right on the bay with a pretty sweet view of the city (a photo my wife wants to make art). We traveled to Ballarat to visit a wildlife park where we played Canadian tourists and were allowed to pet the kangaroos and koalas (and snakes). We traveled to Phillip Island where, whilst we don’t have any pictures, witnessed a flock of hundreds of penguins waddle in from sea to their homes scattered across the island. And, we circled the bay pretty much from one tip to the other stopping at random beaches and look outs. We spent one evening in the city where we had a nice dinner and watched the film ‘Australia’ on it’s opening night.

Definitely, a place I want to visit again. In fact the drive from Adelaide to Sydney with a decent chuck of time in/around Melbourne is what I have in mind. Will just have to time things for more good weather…

I’ve posted more photos here and here.

Australian Seismic Survey

03Jun09

Soooo funny…




Follow shaunmacrae on Twitter