Unfortunately, there are very often a great many constraints placed on the professional programmer in the course of a commercial project. Very many of those constraints are arbitrary and imposed by those who don’t know better and should not have any influence over the technical details of software production. Typical constraints include programming language, poor development machines, databases, messaging systems, libraries, architecture, design, test infrastructure, and so on.