10 February, 2015

What software development is really about or the Source of Happiness

Recently I have been contacted by some recruiters and was mesmerized by their lack of understanding of what a software developer is and what drives him. I also remembered some HR girls at a third party recruiting company complaining about how hard it is to find programmers. And when I notice that what I have in mind and what you have in mind is different - I try to communicate and I come up with a solution; or an explanation for this matter.


First, you have to understand what Computer Science is.



You can watch this beautiful lecture by MIT professors Hal Abelson and Gerald Jay Sussman.

It's about controlling complexity.

So a software developer is a person able to do that. A good software developer is a person yeager to do that and a better one is a person that loves to do that.

Else things like this happen:
Big Ball of Mud
YOUR TEAM LEAD, YOUR TEAM, AND YOUR SOURCE CODE.


But here is the problem: you don't get to the big ball of mud out of an initial error. "Had I thought this better from the start this big ball of mud could have been avoided!", No! the big ball of mud cannot be avoided, it can only be delayed. It is the final destination of all software systems. Because people (clients, managers, developers) change their minds, because you can't know everything about a problem before designing a solution and the most important of all - because the world is alive and so is the problem to be solved - it changes, the people change, the business evolves.

So it takes very experienced, talented and sensible (having a nose for it) architects and developers to delay it better.

Actually I might say this is the goal of a software developer.
And this goal cannot be reached, like Sisyphus who can never get that boulder up hill.



But wait it's more than that - I would dare saying that this is the source of happiness of a good software developer.
Here, have a look at that again:

Controlling complexity is the source of happiness for a (good/real) software developer.

And this source of happiness is always stronger at the beginning of a project and always decreasing beyond the initial point. Like the reverse of entropy.

It's not art! It's far from that feeling an art creator has after he finished his work - that it is complete. And then he moves on to the next one. No! It's the opposite of that - the more you work on it the farther you are from it being complete. And you want a new project. Hopefully one that will not have it's specs buried inside an old code.

This is why you need software developers - to control complexity.
And this is why software developers need refactoring. Or rewriting. Or new projects.

So you see, this "new projects", "refactoring", "rewriting", "unit tests" developers talk
about are not a whim. Is not like a lady suddenly changes when she is pregnant and thinks she needs ice cream badly otherwise the child will perish. It's what developers are there for in the first place - controlling complexity.

Not giving a developer that - it's like telling a soldier to do paper work.
From now on.
He is there for action and killing, not for paper work!
The software developer is there for controlling complexity not for watching it go wild. Look, trust me - you want him to look after complexity, trim down entropy, do useless stuff like unit test, refactoring and rewriting stuff from scratch. Joel Spolsky got it all wrong (not by mistake but rather by agenda). It's not about being a duct tape grim lad that watches the entropy going through the ceiling as he duct tapes more pipes than he can handle. His article is about being too smart compared to how experienced a software developer you are. But the need for refactor/rewrite/get the hell out  remains. What he meant was partly what I say, entropy is unavoidable and partly Brian Kernighan words

By the way, as a corollary to Brian Kernighan words - you don't want your
software developer too smart - that's shocking, isn't it?! Just kidding, you actually need him smart, but beware of inflation - you will need people ever smarter around him. Or rewrite :-)

But you definitely don't want him to be a perfectionist. And it's not perfectionism that's causing all this fuss about new projects/rewriting/refactoring in case you thought of that! Actually perfectionism will make things worse. They will make your software developer more unhappy since he cannot get there and make him give in to the rewrite/refactor path harder while at the same time consuming resources in patching up more than necessary. At early design stages it will lead him into analysis paralysis and unnecessary generalisations and at implementation time it will get him
to optimize prematurely.

Let's have a checkpoint here:
1. You need complexity controlled in a resource limited world, else you won't have viable solutions for your problems and challenges.
2. Software developers are happy to control complexity when emitting and implementing solutions.
3. You cannot prevent the system from becoming more and more complex; and that at quite a fast pace.

So how should we call this complexity control freak that's so excited about it?
Ask Steve Yegge about it. Ask him about the "huge mountain of poop". (search down to that part if the rest is meaningless to you)

And now you know what a software developer is: a Sewer Cleaner. And a Sisyphus.
Well, actually if he is Joel Spolsky's duct tape programmer, then it's a sewer cleaner that only dives regularly into the sewer to clean just the critical parts... or duct tape them.

Letting alone being messy, the job at hand is rather hard.
So you need smart people. This trims the candidates pool somewhat...

With what you are left, you have to kinds:

There are those without a sense of smell.
Those that will do this on and on and on.
They are your "autistic" colleagues that you laugh about, while wondering why
aren't there more developers in the world so that your boss could grow the
business, expand the human capital of the company and give you a better
position in, say, the Human Resources department.
And they are probably the ones Steve Ballmer asks for.
You have to understand that investing most of your time in computer science from the earliest of ages doesn't leave somebody with time to develop empathy, dancing and singing skills, story telling, joking, etc.
They need complexity controlled, they just don't feel so unhappy when they get farther and farther away from that.

And there are those with a sense of smell.
They get unhappy when complexity gets out of hand. That is they get unhappy in time. period.
They also fall under two categories: The mercenaries and the bohemians.
And these are the categories giving HR and managers and bosses the hardest of time.
But it's really about how you picture it.

The mercenaries know that a task done will reek soon. If it was done by them they are the ones with most experience to look into it further and they will be required to do it. So they would change projects and employers very often. To stay close to the Source of Happiness. They also seek working project based and remotely.

The bohemians have quite more skills that programming, but for some reason keep doing it as their main source of income. They use those other skills to refresh their happiness levels. They ask for working remote, fewer work hours per week, attend all sort of weird classes, like dancing, acting, paragliding and need sudden vacation days to fulfill them ("the wind is great today, I really need to go with my friends paragliding. I'll finish tomorrow").

They both give the impression that their job and the flag of their company is not important for them and are frowned at by HR and managers. But the underlying mechanism is the one I described you. You are not looking for a good masseur - you are looking for one that you know won't f**k your wife, aren't you?! Stop being a hypocrite!

I suppose it goes without saying that these black&white categories are more nuanced and mixed up in reality. But it helps us identify the drive.

And make no mistake, all three types have their happiness in controlling complexity. There's no escape. As soon as you go from the "no smell" to the other types the more you need happiness fixes, but all three require them.

So try to look at this from a different perspective. You want to hire and have a
hard time finding the persons you seek, admit it, I know ;-) Why not expanding
the lookout to the other two categories? So that they can stop lying to you with
what you want to hear, and you can stop lying to them about what you think
they want to hear from you. Allow project based collaborations (including no stable employment contract), allow remote, allow flexibility. These guys won't be made happy by their work itself - it's in the nature of their work. Allow them to get closer to the source of happiness from time to time or to refresh it constantly with other means.

Why don't we just... communicate.

There are a lot of people that want to be actors, but don't become such because the demand for actors is not big enough to embrace their level of skill.
And there are a lot of jobs of computer developers that take in programmers of
lesser and lesser level of skill. Or are vacant.
This post is about why.

No comments:

Post a Comment