Ok, so every company wants to improve operational excellence in software development, i.e. develop more functionality in a shorter amount with less people. Unfortunately, a number of myths persevere about this subject.
The most common myths are:
- Everyone should use the same tools: This is quite an absurd statement. In practice this implies that it becomes difficult to upgrade tools or motivate/try out new tools, as everyone needs to make these changes (because everyone uses the same tools). Typically, some body of 'wise' people must be put in place to govern these tools (yes governance) leading to overhead and barriers for the introduction of new tools. In fact, using the same tools is an absolute innovation killer. For development tools for instance, it doesn't really matter for instance what IDE or XML editor you use.
- Code generation is more efficient than writing code: At first sight indeed, generating code suggests that less work is needed since less code is written. In practice however, it doesn't reduce work since special tools must be programmed to generate this code. Worse still, the tools are mostly not mature and require developers to still understand the generated code. Also, for commercial tools, vendor lockin is almost immediate. Looking at history, almost every technology that started out with code generation has now eliminated it. Just consider EJB 3 vs. EJB 2 and consider web services where contract-first design (document-literal, i.e. starting from XML instead of generating XML from code) is the dominant approach.
- Using a standard improves efficiency: Of course standards are a good thing and there are successful standards (e.g. servlet spec), but in many cases the standard approaches result in lower development efficiency and in reduced portability. Consider for instance Java Persistence API where a feature such as second-level caching is important for many applications but where the behavior of different JPA providers can be completely different. Another interesting phenomenon is that standards also do not provide efficiency in the long run as some standards are simply dead ends and replaced by other standards (e.g. JAX-RPC by JAX-WS, EJB 2 by EJB 3, JSP by JSF).