A thought, in response to comments and discussion in various places, sparked by TDD for teams:
In a large software application that is worked on by many (> 2) people, which is more important: “good” design or consistency?
A thought, in response to comments and discussion in various places, sparked by TDD for teams:
In a large software application that is worked on by many (> 2) people, which is more important: “good” design or consistency?
Someone thinks consistency is orthogonal to “good” design (a reference to the official version of “good” would be nice as well)?
I once had a developer decide not to work on the codebase that the rest of the team had created because it wasn’t up to his standard, so he created his own separate codebase for his bit of the system.
Then again, I’ve also worked on consistently difficult codebases. Someone has to non-conform if you want improvement.
Usual caveats about “it depends” etc. but i’ll plump for “good” design.
Consistency only really adds value in terms of adding clarity. Quality of design has more implications and is probably harder to fix after the fact.
I would have to say consistency. If you get skew then you start to get parts of the code that only certain people will touch and you lose collective code ownership. If you want to change the style of doing things then you do so by persuasion and negotiation, not just change it on a whim.
I’m not sure this is a good question.
“Good” design is often in the eye of the beholder, it is often a question of the level of experience of the reader. For example, I know C++ programmers who regard template meta-programming as good design but I consider it unmaintainable (by the average C++ programmer). (I cite C++ because this is my old language but the point applies elsewhere too.)
As for consistency, if “consistency” leads you into repeated poor design decisions (Singleton anyone?) Or prevents experimentation to find better solutions then what is the net value?
Of course this does leave me open to criticism, I’m not really sure what I would look for in a code base!
What I meant to say was: If you have neither habitable code nor consistent code, which would you strive for first? And how does the make-up of skills in your team affect that?
Definitely a good design would be more important. A good design will save not only time but also more stable system. Good design will minimize defect escapes to producttion, which helps with cost and maintainability. There are benefits with consistency in being able to maintain the system for long term but detailed design is more important.