I work as a software consultant. What we do is that we develop software for other companies. Sometimes we do it as a team of our own and sometimes embedded in an in-house development team. Sometimes the clients come to us for our special expertise and sometimes they just need butts in the seats churning out code.
Our job is to implement standard solutions for standard problems. The clients are not in the high-tech business – or if they are, their in-house developers work on the innovative secret sauce and we come in to build the scaffolding needed for making the secret sauce in a complete product.
The main challenges are rarely technical. Instead, we need to understand the business domain and figure out which of the usual problems need solving. Then we need to figure out how to navigate the client organization to allow us to build the usual solutions efficiently.
Our key deliverable is the software itself. Another deliverable is the process that produced the software. If the software is to live on after we move on, the process has to continue and evolve.
After all, software is done only once its last user stops using it.