Software development is any application of computer science (computer programming) in the creation, deployment and maintenance of software components.
There are many different types of software development projects, some well-established and some only emerging to embrace new kinds of technology (such as wearables or the cloud). Even the most well-established types of software development change as methodologies, frameworks, programming languages, software development tools and practices emerge or are refined.
In this guide, we will outline nine specific types of software development, including:
- Web application development
- Mobile application development
- Data science
- Video game development
- Desktop software development
- Wearables software development
- Cloud computing
- Embedded systems development
Let’s take a look at each of these types of software engineering in turn.
1. Web Application Development
Web applications (web apps) are any kind of app accessed via an Internet browser on a smartphone, laptop, tablet, desktop or any other kind of Internet-enabled device. Web apps require a browser and Internet connection, but do not need to be downloaded or updated in order to be accessed by the user. Unlike a relatively static and simple website, a web app is dynamic, changing the display based on user inputs or actions.
In mobile app architecture, there is both a front end and back end (also referred to as frontend and backend or front-end and back-end), each requiring a different kind of software development.
Outside of coding, there are two specialized areas of back-end development:
The process of developing a database – the system for storing and accessing electronic data, which can include your web app code as well as collected data. A database developer should have knowledge of building and managing data in popular systems such as MySQL, MongoDB, Microsoft SQL Server, Oracle, or Redis.
APIs (Application Programming Interface) is software which allows two applications to speak together, usually creating a two way connection between web services and web servers that allows for data to be transferred, interpreted, and displayed in a readable way. An API developer creates a bridge between two systems (how it works, what it accesses) and leverages programming languages of the platform, device, service, or site in question.
Effective use of APIs can support innovation and growth, allowing organizations to tap into and connect systems to provide internal and external value.
As the connective tissue linking ecosystems of technologies and organizations, APIs allow businesses to monetize data, forge profitable partnerships, and open new pathways for innovation and growth. – K. Iyengar, et. al., McKinsey Digital
When a developer is “full-stack,” this refers to the ability to work on all aspects of the product. A full-stack developer is adept at both front-end development and back-end development rather than specializing knowledge in one aspect of development over the other. To be a full-stack developer, one must have knowledge of many different languages, frameworks, and system designs.
A full-stack development approach can be highly beneficial, providing end-to-end oversight and continuity over development, which can save time and money. However, if an organization places too much on one or two developers, work can pile up and lead to delays or risk points if that employee leaves or has time away.
Progressive Web Apps
A progressive web app (PWA) is a website that resembles and behaves like a mobile app, embedded within an application shell. A PWA is universal across devices and operating systems and requires little in the way of storage, with some offline functionality available with the help of caching. While a PWA may lack some features that are possible on native apps, they boast a load time as much as 15x faster than native apps.
2. Mobile Application Development
Mobile application development (mobile app development) is the design and creation of software applications that must be downloaded to a user’s device to be used. Typically these mobile apps rely on an Internet connection to access remote resources (e.g. Instagram requires a connection to load new content), although many apps offer offline capabilities (e.g. many games can be played offline).
Given the plethora of devices and operating systems available, this creates decisions about whether the application should focus on a single device or platform (such as iOS or Android) or if the application should be created to work across any target platform. There are pros and cons to each approach, as outlined below:
Native App Development
When a mobile app is “native,” it is designed specific to each platform such as iOS, Android, Windows, Symbian, or any of the more obscure platforms. Native app development uses programming languages, tools / frameworks that are specific to each platform; Objective-C or Swift for iOS, Java or Kotlin for Android, for example.
A native app will tap into platform-specific features, often providing an experience that is tailored to what a user comes to expect from their device, both in terms of performance as well as visuals. On the other hand, native development can come at a much higher cost if an app needs to target more than one platform as this will require a development team for each platform. Over time, this can create discontinuities between apps and user experiences, which is a consideration as consumers grow to expect multi-channel / omnichannel experiences.
Cross-platform development seeks to generate an app that reaches out to as many brand followers as possible by covering a wide number of end devices during the programming and creation process. Cross platform apps have a lower cost to development, but may not access all device APIs or meet the UI expectations of each device. Some lags in performance are expected.
Cross-platform apps are ideally suited to meet the emerging demands of consumers for multi-channel / omnichannel experiences that provide a fluid experience across devices and channels.
Popular frameworks for developing cross-platform mobile apps are Flutter, React Native and Xamarin.
Read a full framework comparison of React Native vs Flutter vs Xamarin.
Hybrid development is the development of an app that attempts to marry the benefits of native apps with the flexibility of cross-platform apps. In technical terms, a hybrid app is a web application put into a native shell that must be downloaded to the user’s device. A hybrid app can tap into native elements for improved user experience.
Hybrid apps are easier and faster to develop than native apps, but the combination of cross-platform development (for the bulk of the codebase) and native development does add more time and can lead to performance issues.
3. Data Science
Data science is a broad term used to refer to the use of scientific methods to extract knowledge from structured and unstructured data. Data science combines computer science with math and business acumen, often leveraging artificial intelligence or machine learning. Today, the data science field is expected to grow annually at a rate of 28%, one of the fastest growing areas of software development.
Artificial intelligence (AI) is an umbrella term for any software that can understand, reason, and learn through experience. The artificial intelligence market is currently valued at over $62.35 billion, growing at a 40.2% CAGR with examples across manufacturing (robots), automotive, healthcare, social media, consumer technology – and beyond. Common examples are the iRobot vacuum, Tesla’s self-driving capabilities, web searches, or even the autocorrect on your phone.
Machine Learning is a form of AI whose focus is on the improvement of computer algorithms over time, through experience and the use of data. Machine learning is a highly mathematical field.
Supervised learning is used for predictive models, pre-defining the pairing between inputs and desired outputs. This training data combined with a learning algorithm can help predict outputs with new inputs. Examples include classification and regression.
Unsupervised learning is used for pattern and structure recognition, starting with a set of data that contains only inputs and whose goal is to find a structure (grouping, cluster) in the data points, then reacting to the presence or absence of those commonalities in future data.
Deep learning is a subset of both machine learning and AI, one that leverages neural networks to provide a non-linear transformation of data. Deep learning is ideally suited for more complex challenges. Deep learning requires more training to “feed and build” this kind of system.
4. Video Game Development
Video game development is no longer restricted to large studios thanks to readily available game engines – frameworks that support the development of video games.
Developed by Amazon, Lumberyard is a free cross-platform game engine based upon CryEngine, still in beta since its March 2018 launch. Lumberyard can be used to build games for Windows, PlayStation 4, XBox One, and with limited support for iOS and Android. Lumberyard is written in C++ and Lua.
Since it is developed by Amazon, Lumberyard works seamlessly with Amazon’s Web Services (AWS).
Developed by Epic Games, Unreal Engine was first used for the 1998 game of the same moniker. Since then, Unreal has branched beyond first-person shooter games to offering a variety of 3D games, specifically for PC and console games. Unreal is written in C++ and is downloaded for free with commercial use supported in a royalty model. Unreal has been used for popular games such as Fortnite.
Developed in 2004 by Unity Technologies, Unity is a comprehensive game engine that supports 2D, 3D and VR (virtual reality) games for Mac OS, Microsoft Windows, console, and web browsers. Unity is written in C++ and C# and has been used for popular games such as Pokemon Go and Call of Duty.
5. Desktop Software Development
Desktop software development focuses on software that installs and runs locally on a desktop (or laptop) with or without Internet connectivity. While mobile and web apps may dominate today’s development landscape, desktop software still plays an important role.
Development of system software, applications, or frameworks for Windows development requires a knowledge of C#.
macOS and iOS apps are developed using Swift (Apple), Python, or Java. Swift first appeared in 2014, replacing the earlier language of Objective C.
Linus desktop market share hovers between 1.74 and 2.18%, so it is not common to develop for Linux where market share is a goal. That said, Android is based upon the Linux kernel and this popularity is spiking growth in the Linux desktop market. Most programming languages can support Linux development.
6. Wearables Software Development
Wearable technology (wearables) is any kind of software device (hardware + software) that can be worn on the body. There is a huge boom in the wearables market, currently growing at 22.5% CAGR, expanding into wristwear, headwear, jewelry, shoes and even textiles. The most common are:
Smart glasses run the gamut of experiences, from basic Bluetooth connections for audio to integrated cameras and even integration of artificial reality (AR) and virtual reality (VR) such as the Google Glass and Oculus Quest. Development is widely variable depending on the device and its level of sophistication.
7. Cloud Computing
Cloud computing moves data outside of local storage and into remote servers for storage and computing (backend services). Cloud software development involves creating these cloud storage applications such as Amazon Web Services (AWS), Microsoft OneDrive, IDrive, or DropBox. In these instances, server space is rented by number of servers or bandwidth.
Developers interested in cloud computing should know Java, JS (NodeJS), Python, Erlang, and Go (among others).
Serverless computing provides backend services only as needed, without the need to pay for a specific amount of bandwidth or number of services. This option is growing in popularity, with offerings available from AWS, Google Cloud and more.
DevOps is a philosophy that integrates automated security processes into Agile IT, baking security into the fast, iterative development processes followed by many organizations today. DevOps requires that software developers have a knowledge base of programming, integration, and testing, both on a theoretical standpoint as well as practical tools and frameworks.
Continuous Integration (CI)
Continuous integration implies that new user stories in Agile are built, tested, and integrated into the existing system multiple times (at least daily) to support the integrity of the software. Automated testing is a process that helps manage continuous integration, ensuring that the test results are authentic and that there is no room for human error.
Continuous Deployment (CD)
Continuous deployment builds on the above, with the development team working through errors or bugs or new user stories and automating deployment to ensure that the DevOps team is constantly working on the latest, quality code and that new features are always available to end-users. Paired with continuous integration, this process is referred to as the CI/CD pipeline:
9. Embedded Systems Development
Embedded systems is a computer system (hardware and software) that is designed for a specific function as part of a complete device. A microprocessor is an example of an embedded system. Today, embedded systems are smaller and more inexpensive than ever before with applications in consumer electronics, telecommunications, aviation, home automation, electric vehicles, medical devices, and the entire “Internet of Things.” Most embedded systems will rely on embedded Linux, VXWorks and Windows CE and rely on knowledge of Embedded C, Assembler, Python, Adruino, or Java.
It is estimated that there are over 23.9 million software developers worldwide, a number that is set to grow to 28.7 million by 2024. Despite leading the world with over 4.3 million software developers, the United States had over 1.4 million unfulfilled computer science jobs in 2020, an IT skills gap which is only growing.
At Net Solutions, we deliver end-to-end agile development processes for a wide variety of platforms and software development projects. If you know what you want but don’t have the team – or if you have an idea and need some guidance on where to take it – we’re here to help.