Since the birth of computer science, the world of software development has long been determined by technical limitations and "what is achievable". From today's point of view, the developers in former times had to work with rudimentary tools and to cope with the limited, expensive hardware that was available. Software system requirements were still low and users were very patient. Technical evaluations and programming applications were considered as the biggest expense of a software project. Customers accepted that systems and applications were complex, difficult to use and very expensive to create and operate.
Science fiction is reality
Software development has changed much over the past few years. Things we only knew from science fiction movies a few years ago, are a matter of course today, thanks to technological advances. All software production has been turned on its head by the Internet, mobile devices and greatly increased computing and storage capacity. Smartphones and tablets have placed complex software systems in everybody’s pocket. Developers have fantastic tools at their hands and there are commercial and free components galore, which can be integrated into applications and systems. However, the requirements and expectations on software are also increasing. Applications must be easy to use, efficient and elegant. They must be available everywhere and all of the time. Nowadays, almost everything that can be imagined is possible.
The combination of more powerful tools and greater requirements have resulted in shifts in software development. The technical challenges of software projects are still great and not to be disregarded. However, the relative amount of these issues has declined when viewed over the entire life cycle of a system. This is particularly noticeable in the development of custom solutions. With these types of projects, much more time is being invested in factors that are only indirectly related to actual software programming.
New job profiles in software development
Before developers can start programming, the requirements and wishes for the software must first be pinned down, structured and understood. For this reason, there are business analysts and requirement engineers. Then user experience experts, interaction designers, business process engineers, system and software architects have to design, define and specify solutions. Only then will the programmers be included and write the software. Subsequently, quality assurance and testing are following, and finally the operation of the software.
Have today’s software developers an easy life?
At first glance, it may appear that this new type of software development makes the work of developers easier. Many experts are involved in the process and the developers can focus on what they do best: programming. However, this does not reflect the reality. Although the process looks good in a straight line on paper, there is a lot of interaction required between the various process steps and the experts in all possible directions. Technical limitations that still exist today have an impact on the requirements and priorities; testing issues must be taken into account in architecture decisions; operational issues have an impact on the user experience. Therefore, software developers are in the middle. Often they are the key individuals who translate and mediate between the different parties. Even if they are not the experts on many issues, they still need basic understanding and knowledge on these issues.
Therefore, software development is not just pure programming and technical implementation of requirements and specifications. Developers need technical knowledge and experience. However, that alone is no longer sufficient today. Software projects are too complex and the dependencies between the parties involved are so closely interlinked that a developer cannot simply focus on programming.
Software engineers bring order to chaos
Software engineers are needed today who not only bring in technical know-how but additional qualities as analytical and structural thinking. A software project can be incredibly chaotic and unstructured when many parties with different experiences, needs, priorities, goals and more or less technical understanding are involved. Software engineers are expected to deal with all of these parties and bring order to chaos. Their task is to bring together the needs, requirements, architectures and designs that appear to contain all kinds of levels of detail, formally or informally and in a variety of classifications. This is done in order to create a compact, consistent, efficient, transparent and technically feasible form. It is the only possible way for all parties involved to make decisions that require different expertise and to find solutions that are technically feasible to meet the requirements and needs. Therefore, a software engineer today must recognize correlations, generalize and simplify issues, take marginal cases into account, identify complexity, etc.
Of course, software engineers are supported by many experts. However, they need to understand a software system on a much more detailed level than the other parties. Imagine that a software engineer has to make an application and everything associated with it so that the most simple-minded employee in a company can also understand it. Someone who knows nothing; to whom you have to explain everything; who has no common sense and furtively uses every loophole and ambiguity. We're talking about the computer. Although computers are incredibly hardworking and persevering employees, they are ultimately very stupid. Their intelligence is only implanted by the software engineers.
Another important competence that software engineers today need is good communication skills. Software engineers have to deal with parties who speak different languages. They have to know how to communicate on the deepest, most detailed technical level, i.e. program or analyze technical errors. They must also be able to explain technical aspects to people who are experts in other fields and have little knowledge of computer science but certainly have their wishes for a software. A high level of social competence is required in addition to good communications skills. The outdated stereotype of the software developer being a nerdy man with an unkempt beard, thick glasses, long hair and low ability for social interaction is long gone.
Being closer to the customer
Within the software industry, the myth of the "10x developer" goes around time and again. This is a developer who is 10 times more efficient and effective than his or her colleagues. Of course, it is possible that this person reaches this level of productivity through ingenious use of their technical skills. Much more likely is that a software engineer is much more efficient and effective in various ways because he or she can communicate better, cooperates well with experts from other fields, better structures complex and chaotic relationships, generalizes and simplifies better, and programs more elegantly and sustainably. Good software engineers need good and deep technical knowledge, but also broad-based skills in non-technical areas.
At this point, it should be mentioned that the difference between software developers and engineers has nothing to do with qualifications. The previously mentioned skills are not necessarily learned in a university or college. Good software engineers also develop through an apprenticeship or internship.
The previously mentioned characteristics are necessary in order to be successful in the software industry today. They will be even more important in the future, especially for software engineers in Switzerland. The competition from countries with lower salary levels is high and their training and technical skills are steadily improving. Consequently, pure programming can be outsourced to any location in the world, whether it is simple or complex. As software engineers in Switzerland, we must conversely continue to offer great advantages. From a general viewpoint we are not just better than the competition. But geographically, culturally and socially we are much closer to the customers and users. By being closer you get a better understanding. This makes the big difference, especially for non-technical issues.
About the author
Corsin Decurtins is the Chief Technology Officer with the Zurich-based software company Netcetera. He is responsible for technology strategy and development methodologies, advising clients and internal teams and he works as a software architect and engineer, and technical project manager. With over 15 years of experience, he has mainly developed in the field of Java EE-based information and transaction systems for secure and business-critical environments. Corsin Decurtins studied computer science at ETH Zurich and worked for several years as a research assistant.