Trying to get it right first time off leads to second system syndrome or overly complicated and meta fundamentals (if you are doing it first time).
In my experience, this holds true ESPECIALLY when working on existing systems whose behavior you don't understand completely. If you or someone else is the author is irrelevant here.
To get it right you have to screw it up first. The hacked up version may or may not get into production (depends on the scope). What one should do is gain intimate knowledge of a particular system/module and keep up to date with it. When you start implementing something big, you have no idea what it really takes, thus abstractions make no sense. Just use the goddamn duct tape and zipties. Then fix it as you figure out how it ought to be - and don't fret over it, you WILL change it again tomorrow.
But one should always strive to do it as right as possible, given the current circumstance. One should also
Good software is grown and it takes time, knowledge and patience. I liken it to drawing Silicon mono crystal for semiconductor waffers.
In my experience, this holds true ESPECIALLY when working on existing systems whose behavior you don't understand completely. If you or someone else is the author is irrelevant here.
To get it right you have to screw it up first. The hacked up version may or may not get into production (depends on the scope). What one should do is gain intimate knowledge of a particular system/module and keep up to date with it. When you start implementing something big, you have no idea what it really takes, thus abstractions make no sense. Just use the goddamn duct tape and zipties. Then fix it as you figure out how it ought to be - and don't fret over it, you WILL change it again tomorrow.
But one should always strive to do it as right as possible, given the current circumstance. One should also
Good software is grown and it takes time, knowledge and patience. I liken it to drawing Silicon mono crystal for semiconductor waffers.