Software Engineering

Software Engineering is a very important field of study regarding software development since the beginning of modern computing and the rise of software complexity.

If you consider that to achieve a deliverable software component you may need to understand more than just bits and bytes, moreover, for software to be successful in the piece of the problem it may solve, there are much more than just electrical circuits behind that.

Based on that affirmation you should consider that software development requires more than machines and code, but also, the idea of the business behind it to be understood, the abstraction while designing based on its requirements, the right methodologies and procedures which will make the code with quality enough to support maintenance, the testing environment which will confirm that the software is reliable enough to run and automate some human task.

In the enumeration below I list my personal view of the greatest challenges regarding software engineering in the next 20 years.

#1 Testing multiple software components with integration with other software components

I personally believe one of the most critical software development phases is the integration testing. If we consider that today we have more and more integrated applications running in a space where many applications depend on each other, how to guarantee our software will work integrated with other software components we do not know much about its infrastructure and availability?

Moreover, according to StackOverflow, 2017, there’s the issue of data that changes in back-end systems over time. Sometimes you don’t really have any influence over these changes, and they can render detailed integration tests useless. Often this results in making “smoke test” like integration tests that really don’t assert too much of the content of the back-end systems.

I believe in a twenty year period, more applications will be connected and more will be integrated and dependent of each other, so how to make integration testing with all these applications and how to guarantee all them will work in a 24/7 scheme?

#2 Accuracy in Software Development Cost Estimates

According to Fowler, 2003: “One of my biggest irritations are studies of productivity based on lines of code. For a start, there’s all the stuff about differences between languages, different counting styles, and differences due to formatting conventions. But even if you use a consistent counting standard on programs in the same language, all auto-formatted to a single style – lines of code still doesn’t measure output properly.”

As long as more modern software development tools are created and developed, one thing I personally believe is that it will be possible to be more accurate in terms of cost and productivity estimates, which with my experience in the software development area it is strictly difficult to measure cost and productivity estimates with accuracy, and the way more specific development tools are available in order to provide more ways to be accurate with estimates and to measure productivity, but this is a constant challenge the science of software engineering is facing and will continue to face during the next years.


Martin Fowler. 2003. CannotMeasureProductivity. [ONLINE] Available at: [Accessed 1 June 2017].

Stackoverflow. 2017. What are the challenges you have faced in writing integration tests?. [ONLINE] Available at: [Accessed 1 June 2017].


A system can be defined as a collection of components working together to achieve a common objective (Sommerville, 2013). People as well interact with technology in order to achieve some goal in organizations bringing up the concept of socio-technical systems, which is basically technological resources which help people to interact themselves and organizations to achieve their goals.

According to the Interaction Design Foundation, 2017, these below are examples of socio-technical (STS) systems:

  • E-mail;

  • Twitter;

  • Facebook;

  • YouTube;

  • Chat;

The technology we have today allows us to have more friendly contact with our family, friends, coworkers, and people involved in our lives. If we consider today we can chat live with many people in different localizations and in a high-resolution online meeting via Skype, for instance, we can see the impact of technology in the people interaction.

The way we work today in multi-cultural companies, especially in multinational companies are much more dynamic and the impact of the socio-technical systems, allows this kind of not only communication improvements but also of collaborative work to flow better, the way tools helps a lot this kind of activity.


System failure may occur in any system because of hardware or even software issues. If we consider that systems should be tolerant to failure because of the software engineering methods to do not be developed enough to produce systems with no-failure.

In the past, when systems used to be written in C and C++, the probability of a system to produce failure was far beyond higher than the technology it is written today in the Java and .NET, which are more modern platforms. The introduction of the high-level programming languages allowed developers to focus more on the software to be developed based on the business solution they want to achieve and focus less on the low-level machine instructions and memory management issues in which may lead to system failures.


Software products are usually developed as projects in software house companies, which may have a start and an end. Software Engineers in order to produce software systems, are based on the development of the software engineering and project management studies, which are understood and allowed by the research distributed and shared all over the world based on the experience acquired by all the individuals which may share it in masters or doctoral studies like this one we have at the University of Liverpool Online.

The impact on socio-technical systems comes out when software needs changes and upgrades because considering we have changes in the business operations and changes caused by technological advances, for instance, it all comes to planning in which is responsible to continuously improve the software based on its needs.


Ian Sommerville. (2013). Introducing sociotechnical systems. [Online Video]. 23 November 2013. Available from: [Accessed: 14 June 2017].

Interaction Design Foundation. 2017. The Encyclopedia of Human-Computer Interaction, 2nd Ed.. [ONLINE] Available at: [Accessed 15 June 2017].