Heterogeneity
Software is required to run on multiple different systems.
Software needs to run as distributed systems accross networks that include desktop and mobile devices
Business and social change
Business and society change very quickly.
They need to be able to change and adapt their software as new economies and technologies develop.
Security and trust
People need to be able to trust the software they use as it is intertwined with many aspects of their lives
Scale
Software needs to be developed in a wide range of scales. E.g. small embedded systems on wearable devices to internet-scale cloud based systems that server users around the globe