But... what am I doing exactly? To better understand my job it is helpful to have some general idea on how software is being developed.
Software Development = Constructing Buildings
A popular metaphor for developing software is the construction process of a building. This is a process, that usually involves a lot of different people with different professional backgrounds, who are responsible for fulfilling certain tasks. The person creating the architecture for the building is probably not the same person that will construct the actual walls and the person that roofs the house is not the person laying all the electric lines. All of those jobs require expertise, that is seldom combined in one single person. While some skilled craftsman could probably build a small shed on his own, you would not trust him to build a skyscraper without any further help.
In software development this is very similar. While smaller computer programs can (and often are) created by single developers, more complex systems require the expertise of different people to make the software reliable for its intended purpose. Some people will for example create the architecture design for the software, which specifies the different components and their interfaces. This will produce a blueprint, that all developers need to follow, just like when a building is constructed.
The construction workers in software are usually called software developers and they might me specialized in certain aspect of software. Some focus on those parts visible to the user, while others make sure, that information can be stored in a persistent way.
Just imagine your living room at home. There was a lot of work necessary to build it just the way it is and not everything is visible on the surface. In software development we also do a lot of different things, that most users will never realize.
So… what exactly am I doing?
While you need a lot of expertise to fulfill certain roles in software development, you also need people capable of understanding the whole process and identifying the current and future steps necessary to reach defined goals. As a IT consultant I am usually not on the same level of expertise of a software developer specialized in performing certain tasks or working with very specific technologies. Instead I need to be familiar with as many different roles, tasks and technologies as possible, in order to understand problems encountered by other developers and communicate with and also between different individuals and teams. This role is similar to a construction manager governing the construction process of a building.
So a lot of the time I talk to my colleagues and my client to discuss current challenges and progress made in order to further drive the development process. I also write a lot of code by myself and review and test code written by other developers. The exact composition of my tasks is very dynamic and depends on a number of different factors. So every new project and client might introduce new challenges or point me in a completely new and unforeseen direction, which is usually very exciting to me.
In the end of the day my job is to make my client happy, which often involves a lot of active listening and observation to identify those problems, that really need to be addressed. So I might paint the walls of their software in a new color or discuss the newest ventilation technologies with domain experts.