Tuesday, February 13, 2007

Thinkers and Designers


I was chatting with a potential recruit to my company. He was thought to show promise by HR; he was confident, expressed himself clearly. Around 5 years of experience.
I asked him what his role was in his company. He said he was a designer. (Ofcourse, he meant software design). I asked him if I could ask him coding questions.
He gave me a condescending look and said he had not coded for the last 9 months. He purely "designed".
I asked him how he "designed" without reference to technology; he dismissed that question. He just decided how things should work. It was upto lesser "programmers" to implement his design.
He also informed me that his company had a special design team; that people were promoted to it for "outstanding" performance. They apparently stopped the lowly job of coding on reaching that team; they just designed.
I asked him specific questions on a couple of simple technologies and he had no clue. He had no knowledge about design methodologies; software development processes or any knowledge of design as a discipline.
I have always been surprised by this - how can technical people, in the beginning of their career, reject coding as menial labor and style themselves as designers? Isn't that career suicide? I would never hire a person to a technical position if they did not know hands-on coding. It is my belief that you can never really design a good software system without knowing the technologies used to some degree. Technology-agnostic design does not exist.
Does this mean a .NET architect can never design a good Java based enterprise system? It does not mean that. But it is essential to have a good grasp of atleast one suite of application technology.
As an example, let us say you are asked to create a data warehouse that aggregates data from different systems. It does help to know the concepts of Extraction, Tranformation and Loading; it helps to know multi dimensional querying; it helps to know dimensions and measures and aggregate queries. If you did not take into account specific technologies; if you have not even tried your hand at MDX; I would claim you cannot come up with a useful design.
All that you can do is draw a few blocks and say this little box talks to that big box and sound knowledgeable. CTOs can do that - not system designers. Design is more than that. It is actually creating an integrated system taking into account functional and non-functional requirements. If someone says "I sit and design a web application without being skilled in any programming language", then that person is a worthless hire.
I had the same experience with a guy in my neighborhood. He was 3 years out of college and he said his job was to "think". I am serious - he said his company pays him to think. I pictured him sitting in his cubicle contemplating the monitor. He thinks and he thinks and then he said he comes up with a solution. He then kindly shares it with the dumb programmers and they go and just do the simple job of coding. He said he did not do coding. I was surprised by this and he explained to me that he does code - sometimes - because he takes it upon himself to do a module. He was careful to clarify that nobody actually makes him code the module; he does it out of the goodness of his heart.
Actually that is what this attitude comes down to - these guys are ashamed to say they code because then that means they take orders from someone. They bow to no one. And they want to be tech leads.
That is the other aspect of interviewing - I have noticed that some people love to be questioned on "concepts". To them, a set of coding questions is insulting - one guy I interviewed in Philadelphia said it was like a quiz. I think this is just a sham attitude. If you did hands-on coding, it is the duty of the interviewer to find out. I can keep on asking vague questions about your last project, your attitude to team work, your strengths and weaknesses and crap like that - it does not help in judging your value as a technical person. A technical perosn must know coding and must answer specific coding questions, period.

No comments: