This will probably be one of the few posts where I talk less about code and more about people (and their behaviour).
Upon reading Jon Skeet’s blog post on Stack Overflow, I remembered having a similar experience when I asked a question on The Workplace, a sister site of Stack Overflow, also a Q&A site for matters relating to the workplace, instead of programming.
Up to this date, I still have not decided to accept any of the answers provided to my original question:
Now to be fair, I did find few answers useful to me. But most of them? Most of the comments/answers simply focused on how I should not be overusing patterns and my boss was right.
So why I don’t I heed those suggestions from answers/comments?
Because they lack the perspective from the OP, me. They:
- Did not take into account the number or quality of in-person interactions between me and my manager.
- Have not worked with me, thus cannot fully judge whether I was using design patterns in a given context/problem correctly and pragmatically
- Do not know me nor my manager personally
And yet most answers went along the lines of ‘You were using design patterns wrong’, ‘You were overengineering’, ‘Your boss was right’, etc.
Heck, I was so frustrated I even added an update to the original post:
Since I am getting a lot of comments mentioning about my dogmatic, even over-zealous attitude to follow software engineering principles, I think I should clarify:
I am not trying to be dogmatic nor overzealous. I do care about people reading and understanding my code, whether they use/understand design patterns or not. I asked for feedback from my colleagues during code reviews if they understand my code or not. They said they do and they understand why I design a component in such a way. In one occasion, my use of design patterns helped centralize the configuration lookup logic in one location versus having it spread out in dozen of locations, which has to be changed often.
To be honest, I am quite disappointed to see so many responses with a strong stereotype “Why you engineers can’t think like managers”. At the end of the day, every thing can be said to be over-engineering: Why mark fields as
privateinstead of exposing everything, why unit test if no user is going to execute just a single unit, etc.
My motivation in use of design pattern or in fact any software engineering is to minimize risk and bring value to the company (for example by reducing the unnecessary spread of logic in the code base, so that they can be managed at one single location).
Sorry if this sounds like a rant. I am looking for answers along the lines of ‘how can we find a middle ground’ instead of some condescending answers like ‘engineers think they are smart by applying design patterns which no one understands’.
Is there a problem on how SO and its sister sites operate?
Don’t get me wrong, Stack Overflow is a great site. I learnt most of my C#/F#/Haskell there. Its ease of use and user-voted answering system are one of the best systems I have ever seen.
But there lies a deeper, cultural issue, especially on questions which are not so clear-cut and do not have absolute right or wrong answers. Unfortunately, mine falls into one of those categories.
Now I truly believe most of the commenters/answerers are genuinely convinced that I should exercise better judgement and not argue with my manager. However, this does not mean they should give an answer based on face value. In fact, based on my colleagues’ opinions, they all agreed my use of design patterns is justified and definitely improved the codebase’s quality. Did the answers/comments take those into account? I don’t think so.
Is there a chance that the answers are right and I was wrong about my use of design patterns?
Certainly yes. But I would not know. I cannot share my proprietary codebase to all of people who responded and let then judge.
My point is, I was asking for concrete suggestions on improving work relationships and convincing someone, not asking for technical opinion on whether my design is superior or not.
Is this a Stack Overflow problem?
Stack Overflow is designed to be a Q&A site for specific programming questions. If questions are formed well, they tend to have very specific, objective answers; Workplace questions, especially those related to work replationships, are by their very nature, very subjective.
Without proper moderation, I cannot see how can I get a good answer out of my question.
Dear readers, if you have a good suggestion, feel free to shed some light and comment.