Gardening and Software Development Processes.

FlowerOn the way to lunch yesterday, a friend of mine was talking about how object oriented design works with the example of vehicles. It was a pretty good analogy. I've been considering processes a lot lately, and gardening works for that.

Of course, a lot of people won't understand the gardening aspect, but if they understand software development they may get some ideas on how gardening works. That's not a bad thing.

As it happens, after my father passed away I ended up doing some agriculture for a while - working on some land that he had passed down. Surrounding farmers advised me and I listened, but what I was really doing was applying software development principles to something else that has a life cycle, that needed to be managed and ultimately had value.

Let's start off with this simple principle: Everything has a life cycle, from seed (idea) to fruit, vegetable or flower.

In between there's an implementation, and that implementation - if planned well - can grow you rows of corn. The planning requires understanding the plant itself: How much light it will need, how much water, what soil nutrients are necessary and how much attention the land in between will need to keep out weeds and unwanted insects - where the analogy almost fails is with bugs, but some bugs are good (and those we call undocumented features in software development). 

So if we plan everything well, we have well spaced plants that have room to grow around them, and where they don't compete for light or nutrients. Planned better, they are as close together as possible but not close enough to rob each other of nutrients. Planned even better, like the Three Sisters, they nurture each other and help sustain one another. Just like a well planned and executed software project.

Without planning, you will likely end up with clumps of plants that aren't doing very well. They rob each other of the resources that they need; they may even grow so tangled that it's impossible to separate them - they occupy valuable space, but they do not actually produce anything. Just like a poorly planned or executed software project - something that seems endemic to startup companies as they rush to get income and develop code amazingly fast but without a plan for sustainability. If you've been in software development long enough, you've untangled things as companies mature, and you should grok that. In gardening, you might have to start from scratch - in software development, you typically cannot, and in this regard gardening can be much less frustrating. As a software engineer, you might want to consider gardening as a hobby. Very relaxing and rewarding.

Like software development, there are processes. There's irrigation, fertilization, pest elimination (maintenance - bug removal without tickets), maybe some pruning (bonsai) or maybe some removal of sick plants. There's quality assurance, where a discerning eye assures that all processes are resulting in what they should. There's configuration management, assuring that different plants are treated differently. Ultimately, there's a plan. There's the start of a life cycle, and there is the end - the planned obsolescence.

Both can have markets. Sure, if you're doing a personal garden your profit may be pride, but maybe you're doing this for money and expecting a fiscal return. The market, though, is where software deviates from agricultural produce.

Maybe I'll write about that sometime.

The Unofficial Story Of My Bathtub.

08/11/09If this story reminds you of anything, I apologize. I'm only here to tell the unofficial story of my bathtub; any parallels you draw are your own.

Maybe it was allergies. Maybe it is some form of exotic malady I'm fighting off. For whatever reason, I felt the need to soak in warm water for a period of time and relax, then shower.

I filled the tub to an acceptable level. That's about roughly 4 inches below the top of the tub - I'm aware of Archimedes Principle.

As I hopped in the first sign of idiocy hit me. The overflow drain kicked in as soon as I got in. Now, before you think I'm some Goliath of a human being - I admit, I have pounds that I'd gladly send to a hungry family somewhere - I'm 5'3" and weigh in the high 160s. Maybe mid 170s, but this is fiction, so what do you care. I have big bones. Get over it. The point is, I'm not huge. In a device designed to allow people of average height and size (read: larger than myself), I should not get in and have the overflow drain kick in. So I decided to see how else it didn't fit my dimensions, much to the amusement of the supervising dog.

I sat up straight, and my feet touched the other end of the tub. Clearly, this tub was designed for people smaller than myself to luxuriate in. I flipped over, verifying - bending my knees and stretching my length out so I could get my face in the water. I barely got to do that. By this time, the overflow drain plug had stopped, so I flipped back over and pressed my size 8 1/2 feet to the other end where my toes were completely out of the water.

This bathtub was not designed for humans. It was designed for something else. And thus, I pen the unofficial story.

Invention Level/Engineering.

Our story starts with someone who wanted to kill kittens - by drowning. So they created this device, but were worried about children drowning when using the device. Her attorney (what, it can't be a her?) told her that she might get sued if a child drown while drowning kittens, so she put in an overflow drain as a safety device.

She patented it through her attorney, then had a few built to show off. She showed it to a person in marketing, and the marketing lady said, "Hey. This is a great solution for apartment and hotel bathtubs!"

The inventor grimaces. "That's not what it's made for. It's for drowning kittens!"

The marketing person grimaces, but goes out and does marketing studies with focus groups and comes back with results that the inventor/engineer cannot dispute. People like kittens. In fact, they like kittens so much they built an Internet around them. Bathing, on the other hand, was a luxurious idea that everyone wanted available though few would actually use. "We'll throw a shower on top", she said, "And you'll make money hand over fist!"

The inventor/engineer unhappily agreed. The marketer went out and wrote a brilliant ad, telling people how nice it would be to soak in water after a hard day. Women were clamoring for a nice way to sit while shaving legs (I think. I don't know much about it). Men were clamoring because women were clamoring because, for some reason, shaved legs were great but stubbly legs were evil.

And that's the story of the bathtub. Designed for drowning kittens, sold as a device to immerse yourself in while getting clean in dirty water, it did nothing but... make money for an engineer that wouldn't stick to her guns and a marketer who didn't really care if you could fit in the bathtub with more than a thimble full of water.

As I said, if this sounds like anything else, that's on you. This is the unofficial story of my bathtub.

The Trouble With Content Management Systems <RANT>

Technology is stuff that doesn't work yetBy the way, Douglas Adams quoted Bran Ferren in that image. No kidding.

Drupal. Wordpress. Joomla. Etc. These are content management systems - some even calling themselves frameworks now - that have two things in common: They have become exceedingly powerful at dealing with complicated jobs while becoming a severe pain in the ass for simple things.

Developers will tell you all sorts of things about how they're trying to solve the world's problems - because everyone, everywhere, likes to think that they are contributing to the world in a meaningful way. Some do.

But nowhere under any definition of making things better is making things a pain in the ass. It seems every time I want to write something, I have to update something on the site(s) I write on because a group of developers trying to be everything to everyone are out there making things more complex so that their jobs become more simple. Recently, before the job I have now, someone showed me this large dataset that they wanted to import into Drupal 7.

It's a nightmare of database abstraction to do an import now (yes, even with the modules) because they put training wheels on everything so the less skilled can have someone else's code do the heavy lifting. Years ago, I imported about a terabyte of data into Drupal 5 with some PHP scripts that took me half a day to write - data that, by the way, is still being used by British Petroleum to this day. It was simple enough to do if you knew how to write code and understood how to interact with a database instead of someone's stab at an abstracted framework to try to do everything for everyone... in the enterprise. And really, it sucks the byte fantastic. You can try to sell me on the hooks, the framework, etc., but the average person just wants stuff to work. They don't want to be impressed with your framework.

Drupal doesn't have the monopoly on this. I've seen it with other CMS's over the years. The KISS principle went out the window some time ago, and really, it's become exhausting. Sure, I write code; it does not mean that I want to update a bunch of stuff every time I want to write something. It does not mean that I want to have to figure out how to do things that were rather simple years ago.

There is a need for keeping things simple. Sure, we all know that the money in any projects are at the enterprise level, and we know that world domination requires money. I just don't think users, and even developers who don't want to develop when using (me) should have to suffer for it.

Yeah, it's a rant with weak points that some geeks can spend time refuting. Sure, I could spend time refuting the refutes. Sure, we can make it into a religious war akin to eMacs vs. VIM.

But it's just technology. I work with tech, have worked with tech longer than the internet has been around. I've seen entire languages come and go, hardware platforms come and go. I've seen more versions of Windows than you can find at Home Depot (and really, GEM Desktop was better back in the day). I've played with Microsoft's Speech SDK in this millenia and can report it's not much better than the Amiga's speech synthesizer in the late 80s.

The one thing outdated frameworks, languages and other tech have in common is lack of adoption or complete abandonment. I kind of see present content management systems going that way because in trying to go enterprise, they abandon their base while depending on developers to be their evangelists in an increasing economy of distaste with the products available.

KISS. Add modules for the enterprise. Some of us don't want to spend our weekends cleaning up after an overly abstracted kluge of features. If your UX doesn't involve updates and configurability, you'll spend a lot of time learning the lessons Linux is still learning. More options = bad.