Have you read the Joel Spolsky’s blog post about the 12 steps for better code ?
If you didn’t, you should, it’s great, as almost all Joel’s blog posts.
So go on, read it, I’ll wait.
http://www.joelonsoftware.com/articles/fog0000000043.html
Welcome back, I hope you liked it.
So, what I want to talk about is the first question: “Do you use source control ?”.
All companies I’ve worked for would respond to that question:
“Yes. Yes.”
“Yes, of course! Yes.”
“Yes, we have 3!”
“Yes. Yes. Yes.”
Did you get it ? There are many source controlĀ repositories, at least 1 per project.
“So what?” you would say, “Too much of a good thing can be wonderful” said somebody famous.
But it means a lot : you, as a developer, have to remember multiple account names and passwords, because each SCM (http://en.wikipedia.org/wiki/Source_control) has its own authentication, usually not integrated with the company’s one, it means multiple project layouts, although some projects are similar, it means multiple kinds of branching and tagging.
BUT, first and foremost, this proliferation of SCM’s within a company promotes NO code reuse, NO code refactoring, NO peer code review.
So you are condemned to write that StringUtils class/login page/users’ rights scheme in all projects, or at least copy it from project to project, to manually propagate bug fixes between projects (if you remember and have time and willingness), and there’s no knowlegde sharing among the developers of the company.
All in all, everybody is in his little cell, speaking only with his inmates. So what happens when you are moved in another cellblock (i.e. project) ? You have start to learn from scratch the project layout, how it’s built, what are the used patterns and classes.
And all this leads to poor productivity as you are busy learning the mechanics of the project instead its business, poor educated developers because they don’t have the time to learn and share best practices among them, and wasted company resources in duplication of effort.
And the root cause of all this is, in my opinion, the value that the company attributes to the code : NONE. A company that values and understands that the code is THE COMPANY GOODS, the bread and butter and the alpha and omega will take care of it, will choose and/or educate its developers to care about the code and will do the kind of stuff that Google does about its code base (single code base, tested, no ownership, code reuse, code refactorings, etc.).
Or maybe I’m just very bad at choosing the companies I work for
But what means D.I.D. ? It’s the acronym of “Dissociative identity disorder”, which is a psychiatric diagnosis that describes a condition in which a person displays multiple distinct identities or personalities (known as alter egos or alters), each with its own pattern of perceiving and interacting with the environment.
Here’s the full explanation http://en.wikipedia.org/wiki/Multiple_personality_disorder