Pages

14 September 2006

Interesting software vs Plumbing

What makes interesting software? What makes hard software? What makes fun software?

Customer affinity

It all started with Martin Fowler post: CustomerAffinity. In this blog entry, Martin makes the point that "enterprise software" can be much more than "boring" and "shuffling data around". If you have enough interest for your customer (CustomerLove?), you can be pretty much delighted by finding the best ways to solve his business challenges.

So, as a programmer, even if you should be interested in frameworks (he calls that "plumbing"), you should be even more interested in the business that's supported.

Well, this has been more or less my opinion for years. I love to formalize, structure the fuzzy concepts that business people are toying with.

It is fascinating to see how human creativity can elaborate very complex things from very simple ideas. For instance, Thales is seemingly credited with the idea of buying the option to use olive presses during the next harvest. He bought the right to use something from sometime in the future. Now, play with the words in italics and you will get all the subtle ways to define options.

Is it boring?

Fine, fine, but Ravi Mohan disagrees with force (But Martin, entreprise software IS boring). He advocates that the talentest programmers would rather code a compiler than a loan-disbursing process.

So, "Computer science" and mathematics could be much more interesting than "enterprise software"? Reginald Braithwaite entry about business programming provides some answers.

Not only, getting the concepts right can be interesting (how do you define a "fraud suspicion"?), but this can raise really interesting computing issues. He takes the example of a system for routing concrete trucks: what are the optimal paths if you take the traffic into consideration? What if an accident occurs?

And Reginald raises the bar higher: can you do it in real-time? For thousands of trucks?

So, what's interesting in software? We can get some hints from those blogs:
  • customer business (Martin's interest)
  • mathematical / algorithmic challenges (from Reginald's blog)
  • scalability / performance issues (Reginald again)
  • computer-related stuff : languages, compilers, protocols, graphics-intensive software,... (Ravi )
I would also add one source of interest that is rarely given much interest as such: maintainance. Bleech! bad word, how can it be desirable? Well, when you code and design software day after day, you can also meet pretty tough challenges around maintainance. Is your code readable enough? How is conveyed your design? Can the software be plugged, unplugged gracefully? All these questions sometimes require specific talents that may be not found in the "hardcore programers" set. So, let's add one more point to the list of what makes software interesting:
  • software maintainance 'art'
Fun happens

So far, so good. There's even a good news: you may have to deal with all of these in your next software project! The chances are very thin but software is such a continuity that you may have to implement a software for hospital management:
  • what's the content and life of a medical file?
  • how do you allocate efficiently resources such as rooms, surgery equipment? (what if a big -think 'terrorist'- accident occurs?)
  • how do you do that for thousands of patients, in real time?
  • how do you get x-rays pictures from the equipement to a secured medical file?
  • how do you support a domain-specific language for an expert database?
Anyway, you will be bored somehow

Fun stuff, no doubt. So, what's REALLY boring? I'll tell you. This is what -I- call "plumbing":
  • software compatibility: "oh, version X.Y.Z is needed for this dll!"
  • environment variables: "BLOB_DIR was not set. How was I supposed to know that?!"
  • defining paths, installing stuff: "a new Windows update is there, you should restart your computer"
  • interoperability: "this very useful piece of java code is supposed to communicate with this VB crap,..."
  • fighting with your programming language to express simple ideas: "look! 6 lines of java vs 1 ruby line of code"
  • lousy operating systems: "what?! cmd.exe can not display ansi codes? What year are we?"
  • fiddling with your UI framework to get what you want: "why on earth is this not resized?"
  • and yes: business software that's repeating itself, either in the concepts or in the implementation,...
In the end, I feel it is very important to track the "boring" parts of software. Either make them disappear or become very good at dealing with them efficiently or hire someone to do that for you (why would "boring" be an universal definition?)!

And,... allow yourself to play from time to time.

So relax and enjoy

This is why I appreciate the RubyQuiz. This week's quiz is about a compression algorithm. I had a chance to learn a completly new field for me, without pressure nor any of the 'boring' constraints. I had everything at hand with a ruby interpreter (ok, not entirely true: I installed Radrails,...).

Another grid of evaluation for recruitement

Concluding thought. All those points can be considered when hiring someone:
  • comfortable with concepts?
  • has knowledge of the mathematics, algorithmics involved in programming?
  • knows how to deal with scalability/performance issues (both in software and hardware?)
  • is confident with parsing, ASTs, GUI, disk accesses?
  • can produce maintainable code?
  • can minimize the effects of boring activities? (knows how to install a full production system without spending hours on the web?)
Wow, this looks like a whole program that I can apply to myself! And I didn't even talked about project management and people,...

5 comments:

teki said...

> So, as a programmer, even if you should be interested in
> frameworks (he calls that "plumbing"), you should be
> even more interested in the business that's supported.

What if the company has got a Product Development group and
most of the programmers aren't involved in application design?
They just have to implement what the PDG and the Clients want.

> * software maintainance 'art'

If you can change things. But what if you have to use a framework
and adapt a programming style.

Our company has got ~60 programmers and ~20 of them are working
on the framework/core whatever. The rest of the programmers are
crafting applications, and it is very far from being interesting.

Eric said...

Hi teki,

Yes, if the Product Development group is throwing specifications "over the wall", work can be boring. But also quite frustrating and/or inefficient because sometimes programmers suggestions can be very sound.

To give you a concrete example, in my current company the "Product Development group" is mostly led by our product consultants. They came up with a quite intricate way of managing "projects" in our software. Developers had eventually a chance to propose a new approach for projects management that was in many ways better than the first. The reason for this is that programmers are in fact heavy software users! So if they take time to think about their daily practise they can be pretty good (whatever has been said on the subject,...) on specifying software products.

So I agree with you, some companies are organizing work in a boring, Taylorist way. Yet, I think this often hides the complexity/interesting side of the business and leads to lots of inefficiencies. Especially, when it tends to bore programmers,...

Regarding the maintenance part, I am intrigued by what you say. In most frameworks I saw, there were plenty ways to develop abstraction layers on top of them to help maintain the specific application. You can consider for instance people having developped a CMS on top of Rails.

Again, I am not saying that some situations are not boring. I just happen to have a stubborn mind that wants to fight against boreness!

teki said...

Yep I am in a sort of bad situation right now.

I moved from Hungary to Australia (that's why my English is far from being excellent) and here I had to undertake a position which is not exactly what I normally would like to do. I have more than 7 years of experience but I am working in a kind of junior position.

It's really hard to get a job here without any previous local experience, so this is my entry fee (it's acceptable for now, because there aren't too big load and I can learn in my spare time)

By the way, I generally have problems with programming right now. To me it seems that if I will do my best and will be a top programmer, my salary is not going to sky rocket. I could achieve the same income level if I would be a good manager (and not a top one). This bothers me. I don't know what to do. I am a creative person, I like to do programming, so don't really would like to change, but on the other end, is it worse to have a manager position than doing boring programming if I can do enough creative things in my spare time ?

The ideal solution is simple: start an own company...

Eric said...

Hi Teki,

Your last point about programming vs managing is a very interesting question, I think, that occurs to many experienced programmers at one point or another.

I've also asked myself this question, in terms of interest (personal and financial) and I've practised both activities.

If I get to have a bit of time in the upcoming month (I'm relocating to Tokyo for work, so closer to you!), I would like to dedicate a post on that subject and take time to express my thoughts and personal experience on this. So stay tuned!

> Start an own company
My current job is in a startup company of 30 people. It was 4 people (including 2 interns) 3 years ago. So yes, maybe a way to solve this dilemna is "start your own company" or,... "get involved in a starting one". Your programming/creativity/managing skills will get a chance to be challenged all at once.

teki said...

> Your last point about programming vs managing is
> a very interesting question, I think, that occurs
> to many experienced programmers at one point or another.

On my previous workplace I had 2 or 3 colleagues whom already
had got a running business and they were doing programming not
exactly as a hobby but to do something interesting and make some
money. The interesting thing in this is just because they weren't
depend on their salary, they were in a much more better position in
the company (our company had to satisfy them more than regular
employees).

> I've also asked myself this question, in terms of interest
> (personal and financial) and I've practiced both activities.

Yeh, it is great to do programming and the salary is not bad,
but hey, if I am learning to do management and forget about my
x years of math and programming lessons I will get more money ?
This is nonsense, but this how business works nowadays.

I think this can change. Currently the innovation is happening
in little companies and big companies tend to buy solutions and
people, so maybe their first step is not destroying an effective
team. (If they are doing this currently, it will change, just because
if you kill creativity and productivity, a new startup can beat you.)


> If I get to have a bit of time in the upcoming month (I'm relocating
> to Tokyo for work, so closer to you!),

:)
Relocating is not an easy thing, but there are people who like the
challenge and it is definitely worth it (the world is just so big with so
many kind of people).

> I would like to dedicate a post on that subject and take time
> to express my thoughts and personal experience on this. So
> stay tuned!

cool

> My current job is in a startup company of 30 people. It was 4 people
> (including 2 interns) 3 years ago. So yes, maybe a way to solve this
> dilemna is "start your own company" or,... "get involved in a starting one".
> Your programming/creativity/managing skills will get a chance to be
> challenged all at once.

My previous company was a startup (but we newer called the company
a startup :). I really enjoyed working there, but things changed after a
big company bought us. Some people were hurt, so it definitely changed
the mood in the company. Stability became more important than productivity,
etc... And in the end it seems that the big company realized that it is
time to change and adopt new ideas (the big company is doing heavy
reorganizations right now).
And yes, I made very good money in 3 years, what is impossible at a bigger
company.

But then the next question is how startups and people with intention
to work in them meet ?