I think that all tech-guys have certain issues when it comes to system architecture. Being all the time in the last part of the chain when you all the requirements already given is one thing. Another thing is when you are that guy, who takes part in the formation of requirements.
I think that it is pretty hard to be abstract and not to think about implementation details. If you are thinking about those you are
- biasing towards specific solution
- not considering complex solutions
- missing the right path with high probability
I find it vital to make IT-guys think more abstract on such "top-view" meetings. Otherwise it does not make any sense to call them to such meetings since they will always be pushing towards IT side, not to the solution side. Instead, they should think from business and user perspective what can be wrong with particular solution.
I love nice and clean solutions. But also, I love workarounds and tricky hacks which just make things work. In my world there is plenty of legacy code and urgent jobs which need to be done this minute. Sometimes it is obvious to see, that solution is one-time or temporary (although sometimes it is turns out, that it works for muuuch longer time ) ), but time is pressing and there is only an option of no solution or dirty solution..
And here comes the power of shell scripts! Some old nasty application runs out of memory every second day? Then what about just restarting it every night? Some third party software results in PermGen errors on high inputs? What about passing data in chunks? There are plenty of things you can do with them! But never use it for long-term solutions!
Everyone should do less additional and duplicate work. Developers too. Developers should spend effort on producing efficient code. And they must report about success and status mostly through comments on commits through version control system.
Development process should work in such a way, that comment on committed code would be automatically forwarded to other systems such as closing bugs in bugtracking system or making a product release.