In my point of view, both are quite bad, though as we don’t live in a perfect world, usually we have to pick one, and make it as good as we can.
Nowadays it’s quite common imposed leaders with quite few knowledge in IT, or when have any knowledge in IT its quite out dated.
As Architect/Developer and had been owner of one Consultant company for 10years, from my experience I can say that have a good view from both, and everything will depend on what side you are. For example, if you are in charge of one project, and that has a short time to delivery, you will not give too much importance to code quality, what you want and need it’s delivery it in time, because after that you will be working without monetary incoming, apart that it will make you look at front of others less competent now if you are a developer in this project (and not a very experienced , just average one), such probably your code will not be so good, due the pressure and the short time and logic issues with the code, like poor cohesion and few component reutilization, many strings duplicating values inside the code, magic numbers, bad use of collections if a Java developer, tough the code hopefully will be working well and once you delivery the code will feel relieved.
In my view the code shows too much of you are, clean code and very structured are the best to understand and maintain, though sometimes due that rush, make the right choice it’s hard to implementing, because means re-write several classes, deleting others, updating references and so on… if you are in one pure java project it’s reasonable easy to do, though if not, will be very time consuming.
I think that the best option is keep with the standard from the system, of course if it’s too bad, you will change a few things to make it slightly better, but changing many things, will make things worst, may be not for you, because you remember what you have done, though for any other that will start ‘reading” the code, will be worst.
If you don’t agree with me, it’s just remember when you get that system that had several duplicate APIs doing the same thing, have you stoped to think the why of that? It’s because someone came and thought something like that… this is bad, I can make it better, and then create a new component, but as the old one it’s been used for several other system that such probably work with exported jars that you simply can’t change. Now look of what you have done… made your life easier and of everybody else harder, because when someone start looking in the system will look for that old component because most of the code will point to that, and will take sometime to realize that there is a new component, that it’s only your code that it’s using it.
If you have to create something new, or have time and control over all project, then it’s an excellent idea make things right from start.
Good code today doesn’t mean that it will keep being good tomorrow, because people change, versions change and even the way to implement it change over the time, though if you keep in mind always that performance it’s the holy grail, than such probably your code will keep good for longer than just a nice and easy to read code.
Now changing the direction a little bit…
Bad project management it’s the worst thing ever in IT, due that even a bad coder can make a well structured project work, though a bad designed project, will suffer with issues forever, doesn’t matter if there is a awesome team behind, if specs where bad, everything else will be bad or useless, also doesn’t matter if the code it’s awesome or really bad, the project has failed, the boat sunk and you were there together.
One other big problem today with IT, it’s that people that doesn’t have a good logic are writing code, or even worst, people that simply doesn’t like of IT, they are in the profession just to make money because it has many jobs available, those ones are that one that make the bad name of IT with the management sector.
Other issue it’s with those “Architects” that just know one language and in most of time one framework. If you are one of them please stop and rethink what you are doing… such probably it’s throwing your career through the window, because your chances to succeed are quite smaller if you do your homework, other else it’s none .
Agile projects… It’s GOOD, very good, though will in fact work well if you are or have a experienced team, if most of team mates are Jr’s forget it, because it will not work also if you have worked for whole career in waterfall methodology your chances in succeed in an agile project are tiny, in 21 years in the area never saw one that had tried achieve success, this take time, and for you get there it’s good first pass through some agile team that it’s doing it for a while, to see and try acquire the most of knowledge from it to avoid pitfalls later.
Defining success : It’s when you make things work well in time, in other words delivery the project working as expected in time, doesn’t exist half success, what exists it’s in the best of cases, self improvement, but not success.
To finalize here being short, due that this topic we can write a book and wouldn’t be enough, it’s better have a better project management, specs, requirements, a closed and well defined domain than just good code, if you have both it’s perfect.
Just try make things right, not thinking just in yourself, because usually what’s good for the developer or developer team isn’t so good in production, though it’s talk to an other post.