Software "Engineering" vs. "Craftsmanship"

The Software Engineering Body of Knowledge (SWEBOK) adopts an "engineering" approach to software development, obviously.  This stands, at least somewhat, in contrast to Software Craftsmanship.

The word "engineer" implies a cold, scientific, procedural approach to creating something. This is the components, the nuts and bolts, of a project. To talk about engineering software is to talk about developing and putting together the specific lines of code so the software can do the task required - when completed software that has been engineered is perfectly servicable to do what it was designed to do.

'Crafting' implies a certain level of skill and finess - there is an art to crafting something. Crafting software suggests that it provides a good, intuitive user experience. That the software is pleasant to look at, and pleasant to use. When software is crafted the things a user wants to accomplish are easily accessible and require the minimum number of steps or amount of effort. From the perspective of a user, software that is crafted just feels right.

Software must be both crafted and engineered, especially for more complex software developed by larger teams. The head of development may be a craftsman, someone who has a vision for the project and wants to make sure the final product is everything they hoped it would be. They oversee the engineers who are responsible for putting together specific aspects of the project - these individuals may not care that rounded corners are more asethetic, but only know that their responsibility is to engineer rounded corners. Think of the relationship between Steve Jobs, Jony Ive and Foxconn - Jobs had a vision and wanted to craft each product in a very specific way, Ive had to figure out how to design and build these products as both a craftsman and engineer, while Foxconn has to put the pieces together as they are told to make them work (engineer).

Crafting something takes a lot more time and energy and may not necessarily add substantial benefits over engineering something depending on the project. Crafting often results in some aspect to be handled in a certain, specific way that may not always be feasible from the technical side. Engineering is often about finding a solution, any solution, to a problem, while crafting may be more focused on a specific solution. If this specific solution is more difficult to engineer this can cause conflict between the ideas of engineering and crafting.