A former co-worker of mine sent me a link to Things to Say When You’re Losing a Technical Argument. I think my personal favorite is “Yes, but can this be embedded in a toaster, for example?“, but there are plenty of arguments which I’ve encountered in there which were being passed as valid for sure.
A good example of a frequent argument I think that everyone experiences– “But doing X adds Y milliseconds to each request.” Typically this is an argument floated by people who are against using frameworks or think a given technology sucks because it makes things too easy– aka, being productive and getting stuff done rather than focusing on being l33t and re-inventing the wheel.
An example of a tool that people scoff at that I use sometimes because it works well is WDDX. If I need to store a complicated data structure to be used again later that isn’t horribly large, doesn’t need to be searchable, etc., it’s a very quick and easy way to accomplish it. It does seem a bit antiquated and generally not used that much beyond the ColdFusion world, but it’s helped me in several situations in which it would of been very unproductive to develop my own XML schema.
There is certainly a balance in developing good software using best practices and developing something which will handle anything you can throw at it, but in general my opinion is your initial goal should be to get it working to meet business requirements. Once it’s working, refactor for performance and scalability. If it still seems unreasonably slow after refactoring and you’re reaching a point of diminishing returns, you can always implement it in another tool/language/platform much easier and quicker because you have a working prototype which in theory was written in a way which made it easy to port since you’ve had a chance to refactor it. It also gives you the chance to improve upon the original version in the process.