In 2024, software development is at a crossroads, with several transformative trends reshaping the industry. This article highlights the key developments driving change, from the growing influence of AI and machine learning to the rise of low-code/no-code platforms. We’ll explore how these trends are redefining the way software is created, deployed, and consumed, setting the stage for the future of software development.
1. Artificial Intelligence in Software Development
AI is a branch of computer science that deals with creating systems that perform tasks requiring human intelligence.
AI is a rapidly growing field which is now entering software development. There are a variety of AI methods that can be used for automating the software development cycle. Among the various development stages, initial program coding is the most resource intensive.
High quality code also has a significant impact on the cost and maintenance effort. Hence, automated code generation is considered as an efficient way to accelerate the software development process and improve its quality.
AI planning and learning approaches that could be used to capture a developer’s knowledge and design intent and to automate the production of system code and other software artifacts. Although there have been many interesting AI research prototypes, to date, AI-based code generation still has little practical impact on development. This is mainly due to the wide variety of application domains, development platforms, and programming languages used in practice, which makes it difficult for a code generator to be generally applicable and to surpass the productivity of a skilled human programmer.
Software debugging is the process of finding and correcting errors in a program. This is a particularly difficult and time-consuming task since program bugs can manifest at any program statement and often have far-reaching effects. Studies have shown that up to 50% of total development time can be spent on testing and debugging. Hence, there have been researches into automated debugging tools and recently there has been interest in applying AI to this problem. AI is particularly suitable for debugging tasks since it can exploit knowledge-based systems to represent expertise about program bugs and to manipulate symbolic program data.
AI methods can also be used to automate the generation of test cases and to verify program correctness. This is contrary to the traditional use of random, brute force, and manual methods in testing. Despite the potential advantages of AI in this area, intelligent debugging tools have yet to make a breakthrough in commercial software development and much research is still needed to make them fast, effective, and practical to use.
AI can potentially benefit from this through the application of intelligent reasoning and machine learning methods to build automated test case generation and test oracle tools that eliminate the need for manual script development.
1.1. Automated code generation
Mark Roberts from the University of McGill have also started conducting research in using machine learning to automate API (Application Programming Interface) usage, which has become an essential and time-consuming task for modern software development. This ultimately has led to the construction of a machine learning model that, given a natural language query about functionality related to an API, returns the sequence of calls one would make to that API. Though this is only a very specialized instance of code generation, automating API usage is a commonly cited problem by developers when working with large code bases that utilize many different libraries. The availability of an intelligent agent to automate this task could potentially improve productivity for both new development and maintenance of such projects.
One recent publication from Rice University utilized a machine learning technique called grounded language learning, where an agent learns to associate language to actions within an environment to produce a model that can program a simple Lisp-like language. The agent is provided with task descriptions and machine code as input, and outputs code such that the model, when executed, accomplishes the given task. The model is trained and tested on several different tasks to evaluate its functionality. The approach is quite flexible and the same training and testing data could be used to produce models for programming in other languages.
Using AI for computer programming is an exciting idea within the software development community. Indeed, a big part of modern software development involves generating code that is often quite repetitive. Programs such as SQL data manipulation, for example, often take up a huge amount of developer time and effort for basic tasks. With the rise of AI and machine learning techniques, there has been promising progress with the idea of training intelligent agents to take on these coding tasks, effectively allowing human developers to automate the coding process.
1.2. Intelligent debugging tools
The ever demanding and ever advancing IT industry gets more and more complex, requiring more intricate and complex software solutions. Programmers today are forced to deal with huge code bases both new and legacy, and often suffer immense difficulties in trying to understand and fix the software that doesn’t work as intended.
Debugging is a time consuming task that often can take more time than writing the code itself. Various automated tools have been created with the intent of finding the bugs in code or profiling it to find where inefficiencies may lie. Now these tools are to take a massive leap forward with the application of artificial intelligence.
Intel and MIT university are currently working to develop an intelligent debugging system for the Linux-based operating systems.
Current Linux debugging tools use simple pattern matching to attempt to understand a problem but this often fails due to the fact that they use a too shallow knowledge of the code. This system will use a program known as a symbolic executor to reason about how inputs to the program affect what the program does. It does this by reasoning about the program in terms of the inputs and then having a compact formula saying what the program should do. This will be combined with an AI component to search for the causes of errors in the compact representation of the code. This is expected to greatly increase the ability to find and fix bugs in software and will help to ensure correctness in programs.
1.3. AI-powered software testing
AI-powered software testing is one of the upcoming trends in artificial intelligence. Testing is a crucial phase in software development. The absence of comprehensive testing may result in releasing a faulty product in the market, which can be a very costly affair in terms of money as well as the product’s reputation. There are already some tools available to perform automated software testing.
But AI-powered software testing promises more than that. Traditional automated testing requires a detailed test plan to be developed before coding begins and often, more time and effort is spent on testing it. But AI-powered testing can find the right balance of what to test and how much testing is enough.
This is because AI has the ability to understand the function and intended behavior of the software-under-test, and to dynamically create tests which maximize test coverage while minimizing the number of test cases. AI-powered software testing learns from the software’s behavior and helps improve the quality of the product. In a way, it improves itself while the software is developed. This can be a breakthrough in software testing.
2. Quantum Computing and Software Development
Quantum computing is based on quantum mechanics, the science that explains how matter and energy behave on a molecular and subatomic level. Quantum mechanics creates a new paradigm in computing where the basic unit of computation, the binary bit, is replaced by a quantum bit or qubit.
A qubit represents a linear combination of binary bits, which means that a string of ‘n’ qubits can represent every possible combination of ‘n’ binary bits using much fewer computational steps. This is due to the ability of qubits to exist in a superposition of states. For example, where a binary system must do a computation for each possible input one at a time, a quantum system can do many computations at once.
Superposition gives rise to an exponential increase in processing power.
Another property of qubits derived from quantum mechanics is entanglement. Entanglement allows the state of one qubit to depend on the state of another in a particular way. By making a change to one qubit, the effect will be seen on entangled qubits, potentially located some distance away, without needing to do any computation to get the information from one place to another.
Entanglement and the ability of qubits to process vast amounts of data will enable quantum algorithms to far exceed the power of classical algorithms in certain problem domains.
Typical problems where quantum algorithms will outperform classical algorithms are ones involving the processing of large amounts of data, such as searching unsorted databases. This is due to the fact that a quantum algorithm can process all the data at once, whereas a classical algorithm must do so in a sequential fashion.
There are many other problem domains that can be tackled with quantum algorithms, such as optimization problems, simulation of quantum systems, and certain types of factorization and cryptography.
2.1. Quantum algorithms and their applications
Since we already have touched on quantum computing, let’s extend our discussion to the type of software that will be designed for quantum computers. The design of conventional software is based on classical mechanics and electrons.
With the introduction of quantum computing, designs will exist even on the quantum level. Simulation of quantum systems, for example, would be best done on another quantum system. This suggests that quantum software will primarily be used to study and simulate other quantum systems. Other potential uses for quantum software include code breaking, optimization of functions, and simulation of protein synthesis to aid drug design.
These algorithms are all very specific in their application and as a result, there is a possibility that quantum software will be highly tailored to individual problems. This is very different from the classical software of today, which is often designed for general purpose.
The field of quantum software is still speculative, but the tools created will certainly be of profound importance in the development of quantum computers and the applications the computers will support.
2.2. Developing software for quantum computers
The software development is more into early stages of exploration and experimentation. Developers today are piecing together solutions. They are currently a mix of high-level tools and low-level languages that, unlike classical computing, have not yet reached a point of convergence.
High-level tools can be used to design quantum algorithms, and the low-level languages are used to optimize implementation on near-term quantum computers. Examples of these high-level tools include:
- Quantum Development Kit (QDK),
- QCL, and Scaffold,
- low-level languages include the Quantum Intermediate Representation (QIR), ProjectQ,
The future of quantum software has the potential to bring forward a range of higher-level tools that would allow programmers to implement quantum algorithms without needing to have a deep understanding of the lower-level mechanics.
Typically, quantum computers are written in languages such as Python which can have modules or functions that are transpiled into quantum instructions using tools. In the future, it is possible that high-level quantum programming languages will emerge as technology develops.
With the improvement of quantum error correction and reduction of logical qubits overhead, it is expected that quantum software will, in the future, more closely resemble classical software without the need for heavy optimization to reduce qubit requirements.
3. Augmented Reality and Virtual Reality in Software Development
Dovetailing on this concept, AR and VR devices will need to be able to know and understand a user’s intention in what they want to interact with in a given environment. This is a step above what current computing devices can understand about user intention. AR and VR technologies will have to understand more intuitive commands from a user about what it should do in a given context.
Augmented Reality (AR) is a technology which layers computer-generated enhancements atop an existing reality in order to make it more meaningful through the ability to interact with it.
Contrast this with Virtual Reality (VR), which is to completely replace the surrounding reality with an entirely new one. Although VR has some interesting software development implications in its ability to create new 3D world simulators, the harder technical challenge will be in AR as it requires software to understand an environment in high fidelity and then add relevant virtual information to the user.
This high definition of understanding an environment is a non-trivial albeit an ongoing problem in artificial intelligence. However, as companies like Google and Apple invest heavily in technologies like self-driving cars, they will create spill-over technology making environment understanding easier and more accessible to developers.
In the not-so-distant future, AR and VR technologies will change the way software is conceptualized, created, and used. Like mobile and cloud computing before it, AR/VR will be a disruptive technology affecting a large swath of software from video games to UI/UX design.
3.1. AR/VR software development frameworks
The final trend we expect to see is AR/VR-specific development tools being integrated with general-purpose AR/VR engines. Right now, most AR/VR software development is done using plugins for game engines.
However, in the long run, AR/VR development is likely to have its own set of tools, particularly for user interface and data visualization. As AR/VR becomes more established and the importance of UI/UX for AR/VR applications is realized, these tools will become more sophisticated. At some point, likely when the AR/VR market is big enough, it will become feasible to build AR/VR applications purely using AR/VR development tools.
Over the next few years, we expect to see traditional enterprise software development platforms adding support for AR/VR development. This will be a very important step for bringing AR/VR to enterprise, as it will enable in-house enterprise developers to add AR/VR features to existing enterprise software without having to learn a completely new set of development tools.
Several of the AR/VR frameworks have been specifically built for game development. However, with the increasing focus of AR/VR on enterprise applications and the importance of 3D data visualization for some of these enterprise applications, it is likely that more general 3D engines will begin to support AR/VR development. This will be a significant factor for the success of AR/VR in enterprise, as it will enable AR/VR development to leverage existing 3D data assets.
3.2. Creating immersive user experiences
Using AR and VR to enhance user experience is the ultimate goal of AR/VR application development. Augmented reality and virtual reality are all about placing the user in a highly immersive environment.
The goal of any AR/VR application is to transplant the user into a 3D interactive world of believable characters and objects with which to interact. User interaction should feel natural and the artificial environment should respond in a way that suspends the user’s disbelief in the reality and increases their immersion. AR and VR technologies are changing the way UI/UX design is approached. Traditional 2D UI design doesn’t suffice when the user is placed into a 3D world.
New methodologies and best practices are emerging for UI/UX design in 3D environments and a wealth of research is being conducted on the topic. The ultimate goal is to allow seamless interaction with the 3D environment and provide users with an intuitive and natural user interface. A major part of AR/VR UI/UX is letting the user control their experience. In non-immersive applications, a user is generally guided through an experience with predetermined actions and events. In an immersive AR/VR environment, users should be given more control with less intrusive guidance.
Imagine the difference between a point and click adventure game and an open world RPG. The RPG provides a more immersive experience as the user has more control over the experience and his actions have a greater effect on his environment. This level of user control requires more complex systems of user input and event handling to provide seamless interaction with the environment and objects.
4. Internet of Things (IoT) and Software Development
Internet of Things (IoT) is getting popular day by day and so as software development. In earlier days, device and software interaction was limited to a few domains and devices were controlled by software.
Now the trend has changed, with the inception of IoT, devices are controlled by software and every day new devices are coming in the IoT domain. So, man and machines are interacting at a very complex level. This is relatively a new field when compared to conventional desktop or web application development, so there are various things that need to be taken care of before developing IoT applications.
For example, IoT requirements from networking, hardware, devices to software, user interfaces, etc. There are various new devices and platforms coming out in the market and all have different standards and capabilities. So, these things need to be analyzed before starting development.
IoT system spans across a wide range of devices and technologies, from simple data acquisition systems providing low-cost monitoring and data logging to the control system which needs to stimulate real dynamic systems. So, simulation software and platform also vary from device to device and the development or customization of platforms can be expensive.
4.1. Developing IoT applications and platforms
There are 2 key approaches to IoT application development. Firstly, IoT platforms such as EVRYTHNG or Xively provide a set of pre-built tools and services that aim to abstract away the low level details so that developers can focus on creating applications that generate value from connected devices.
Platforms do have their benefits. They provide a set of tools to do the more complex and resource heavy tasks such as data management, which reduces the amount of development time and maintenance required. In addition, an all-in-one platform may be all that is required for simpler IoT applications, and the more recent platforms aim to provide vertical integration, supporting connected devices in a single industry or application.
However, the use of a platform can be limiting and there is the risk of vendor lock-in. This may be acceptable for short-term projects but in the expected turbulent and fragmented IoT market, developers will want flexibility. Open source platforms such as ThingSpeak and Thingsboard are also emerging, which provide an alternative for those who are not so keen on proprietary platforms.
Developing IoT applications is a hot topic these days. According to a recent Gartner study, there will be more than 25 billion connected devices by 2020, so there will be a demand for IoT apps. Software development is the key to realizing the full potential of IoT and it is first and foremost a software developer who can turn the vast amounts of raw data generated by IoT into valuable information. This can be done.
4.2. Security challenges in IoT software development
IoT software is the most integral part of the devices as it enables them to communicate and to be controlled by the user. The software too has its own set of challenges in terms of programming languages, hardware and support for common protocols.
Custom languages and the use of open source languages can result in diverse code environments. This increases the complexity of finding programming resources with the right competencies to upskill and multiskill resources to meet the demands of an IoT project.
Often developers will use the MQTT as a preferred protocol where IoT is concerned to achieve reliable and cost-effective messaging between devices, the support for this on the host programming language could be limited. Then languages more common in enterprise systems such as Java may not be ideal for smaller devices with limited resources so language choice is an important consideration in IoT software.
This diversity of languages and the usage of older or cheaper devices can also cause problems with the compatibility of software later down the line. Testing is critical for finding and fixing problems early; the use of off-air captures to monitor messaging between devices can be useful to ensure that messages being sent are correct and devices are responding as expected.
However, these captures will only be useful if there is suitable tooling and when considering devices with constrained resources, emulations may have to be the alternative option. Low-power devices are restricted by the amount of NVM they can use to store firmware and software updates may be a common occurrence.
The availability of cheap and reliable storage in the form of SD cards can still prove to be a pitfall as they are prone to failure and the mechanics of the device may not be easily accessible. Lastly, the security of IoT software cannot be overlooked and devices are often fielded with little or no security measure in an effort to save cost and time.
Today, many IoT devices run into problems with the likes of data theft or device control by a third party and security attacks are only set to become more of a problem with the abundance of vulnerable IoT devices. With these considerations in mind, the software development process for IoT and its surrounding ecosystem may be a long and bumpy road. But it is a road that many are willing to take with the notion that IoT has the potential to make a huge impact on everyday life and to shape the future of technology.
5. Blockchain Technology and Software Development
In the last couple of years, blockchain is becoming one of the most record-breaking innovations providing unrivaled security features to numerous business domains, including banking, healthcare, finance, and cryptocurrency. It has come out of the shadow of cryptocurrency as the versatility of the technology is quite impressive.
A blockchain is a digitized, decentralized, open ledger of all the transactions we have made across the network. The purpose is effective not only because of its transparent and incorruptible nature, but also because it removes the need for any middleman.
There is a high cost of trust in IT today because many independent entities need to repudiate and verify the data. The effectiveness of costs, time, and security cannot be overlooked. In addition, the evolution of smart contracts and their effect on backend developers can be quite huge.
The utilization of blockchain for secure data management is quite intriguing to software developers. Medicalchain is pioneering to provide a better and secure method for data sharing among patients and doctors. It’s no news that data hacking is a frequent occurrence and the storage of data in centralized servers is vulnerable. With encryption algorithms and smart contract access control, the patients have more authority over who can access their records and rewards received by doctors can be tracked.
Content discussion at the RISE tech conference in Hong Kong demonstrates how a decentralized application (DApp) can be integrated with blockchain to warrant improved transparency with production systems and supply chain quality control. With each DApp node able to cross-check the status of quality approval or change of process, the evidence is recorded on the blockchain and the data is not controlled or deleted by anyone, hence it is the best method to prove integrity.
Changes of ownership related to public ledger data are also revoked in most legal cases, and there are products in the supply chain that rely on this method. This has precipitated the need for blockchain-savvy software developers in reverse supply chain logistics in an attempt to create tools and test simulated environments.
5.1. Decentralized applications (DApps)
Decentralized application or Dapp is an application which is run by many users on a decentralized network with trustless protocols. They are designed to avoid any single point of failure. They are secured and can be user-controlled.
Ethereum is one of the platforms to build decentralized applications. The number of decentralized applications increased after Ethereum launched its platform. IPFS (Inter Planetary File System) is often taken as one of the complementary protocols for Dapps. IPFS provides a high-throughput, content-addressed block storage model, with content-addressed hyperlinks. In the scope of blockchain and P2P technologies, it is a best match for serving the blockchain data to a user who is using a Dapp. It will have smart software and can serve the decentralized web. By pinning and using IPNS for addressing, it can provide the up-to-dateness of the blockchain data. This can be used to make a Dapp that will serve directly to blockchain data, like an Ethereum wallet. With blockchain technology and IPFS, it can provide an end to internet blackout by government restrictions on internet services. Because simply, the services are served to a user and not coming from a server.
5.2. Smart contracts and their implementation
Smart contracts are basically contracts, but in computer code. They can be used to automatically execute the functions of a contract under certain conditions. The way this is relevant to traditional contracts is with the automation of an ‘if this happens then the services will be executed’. This is groundbreaking for IT service management, as smart contracts can be used to automate and self-manage service level agreements.
For example, an IT service provider can agree to provide network uptime of 99% at any given time. Using smart contracts, the provider can issue a data feed from the monitored network stating the uptime at the end of each day, and if the uptime is below 99% the contract automatically terminates and funds are sent back to the customer.
This presents an entirely new ecosystem for service management, in which services are outsourced to software and fall under the management of autonomous agents. Another key point to mention about smart contracts is the interoperability between systems. In comparison to a legal agreement between two parties, smart contracts can be written to interact with other smart contracts.
This is tracking to become a high-demand skill for software developers of the near future who will work on the global decentralized systems and DApps mentioned previously. The ability to simulate and automate an entire economy between various agents with a high level of precision and accountability is highly appealing for economic and sociological simulations.
Lastly, with the entirety of the contract and its execution being traceable in the form of blockchain, there is a vast amount of potential for analysis of contract behavior and the development of further systems based on the outcomes of past contracts.
With present day Ethereum being the Hail-mary for smart contract implementation, the potential use of smart contracts is vast and a variety of open and closed blockchains can be utilized depending on the desired security, scalability, performance and integratability with other systems.
In the future we may see smart contract technology being used alongside IoT at a microtransaction level for automated buying and selling between machines and the prediction and prevention of machine failure by way of the automated finance of services contingent on the state of other contracts. The success of initiatives such as the Ethereum computer and its various test networks are also a positive sign for developers who seek to develop further decentralized systems in the future, as using this technology can mitigate the risk of platform by allowing developers to create system between smart contracts and DApps that are isolated from the future changes to the Ethereum platform.
6. Low-Code and No-Code Development Platforms
Rapid development is relative. In the evolution of IT, the term rapid application development (RAD) has applied to various development methodologies promoting quick development such as agile. But low-code takes the word rapid to an entirely new level.
With many platforms promising to take apps from idea to production in as little as a few days, expectations for what RAD defines are significantly increased. This is a derived benefit for existing developers in enterprises using low-code platforms. These developers are often strapped for time and resources with a backlog of projects spanning months to years. Low-code platforms enable them to deliver applications quickly, often freeing up resources in the long run by automating tasks done manually in legacy systems.
In low-code platforms, software is developed graphically with little to no manual coding. These tools enable lay developers to create apps, often resulting in a 10-fold increase in app development compared to traditional methods. The crucial fact here is the step in productivity. Application development has never been a fast process, but the demand for new business apps is going up faster than IT departments’ ability to deliver. In a recent survey, the top cited reason for selecting low-code solutions was to accelerate app delivery. There are many reasons to choose low-code, but the key driver is the promise of faster delivery.
6.1. Rapid application development with low-code tools
When low-code tools first appeared on the scene, developers were skeptical. Coding is our thing, they thought. The idea of using a GUI-based tool to visually design an application seemed a poor excuse for the hours of painstaking work with a text editor. All too often, visual tools generated spaghetti code, difficult to maintain and with unpredictable run-time behavior. As the technology has matured, so opinion has changed.
Visual tools have proved to be very effective for certain development tasks and by 2024 it is predicted that around a quarter of all application development will be done using low-code tools. High level business logic and data management applications are particularly well suited to visual development and the results are often indistinguishable from hand written code.
With an ever-increasing shortage of professional developers, businesses are also attracted by the prospect of citizen developers using low-code tools to build custom applications, thus freeing up professionals to work on more complex and interesting problems.
An important trend that is predicted to take place by 2024 is the convergence of low-code development with model driven development (MDD). MDD is an approach to software development where extensive visual models are created, which are then transformed into running code. There are various forms of MDD ranging from high level tools for business analysts, to domain specific languages for expert developers. Despite much research and significant benefits, MDD has never achieved widespread adoption and in some cases has been an outright failure.
This is because the visual models were not implemented as proper executables, but instead used as design documentation with the real coding being done by other methods. It is quite a common experience in the MDD community to demonstrate a powerful code generation tool to other developers, only to hear “this is great, but I’d rather just write the code”.
Low-code is the answer to that, providing automatic code generation from visual models, but as a more familiar and incremental transition for developers. MDD tools and low-code tools are in many cases the same thing, so it is only natural that as low-code becomes more prevalent, it will drag the MDD community along with it and in the end provide a better way to do MDD.
6.2. Empowering non-technical users with no-code platforms
The original and most successful example of a no code platform is probably Microsoft Access. Access provides a GUI-based design surface for building databases and tools for automated generation of user interface elements. With these, they can rapidly design and build a data-driven application without needing to write a single line of SQL or code. While the abstractions offered by Access can be leaky and often result in developers having to ‘break out’ into VBA or coding of SQL statements, the high level of productivity and the ability to build a ‘working’ application with no previous development experience is a key selling point of no code platforms.
No-code platforms are a natural evolution from low code tools. Just as low code aimed to empower business users to build applications without relying on IT, no code has a similar aim with a different starting point. No code platforms are specifically designed to be used by those without any previous programming experience. This might be a professional in another field who is looking to build an application to help automate a manual process, or even an enthusiast who wants to try their hand at building a game or an app. In general, no code platforms are focused on making the development experience as quick and easy as possible. This is achieved through the provision of GUI-based tools that aim to abstract and automate as much of the development process as possible.
7. DevOps and Continuous Integration/Continuous Delivery (CI/CD)
The method for combining the increasing use of agile methodologies with a higher level of automation was originally called “agile operations” or “agile infrastructure”. It sprang from another comparison with lean manufacturing, and Jez Humble and Andrew Shafer’s 2009 book on extending agile principles to operations work.
They were inspired by the long-term trends in agile towards greater collaboration and cross-functional teams. In 2016, many practitioners in the software industry advocated for combining the disparate terms into a single DevOps concept, which solidified the ideas from the original agile operations and extended them to the entire IT organization.
This is a clear example of a modern trend where the original building on agile and lean ideas will have a lasting impact as the future evolves. The DevOps goal is to change and improve the relationship between the two. With a rapidly changing digital world, this is important. Consumers expect rapid changes of functionality in a SaaS product. They are no longer willing to wait 3-6 month release cycles in the software industry. Hagevik’s talk on agile infrastructure and operations in 2011, and many more leaders.
7.1. Streamlining software development processes
Streamlining is all about taking a look at something we’re making and thinking about how we might do it better. A process is a series of repeatable steps that we’d like to do in order to achieve a result. Streamlining a software development process is all about taking a look at the repeatable steps we take to do something and thinking about how we might do those steps better. This allows us to produce the same result, but with less effort. Streamlining might result in saving time, saving resources or perhaps even producing a better result. There are many ways you might streamline a software development process. Here are some examples of how you might do this:
Automating the process: if you have a manual process that you’ve done many times then there’s a good chance you can automate. A common example of this is migrating a database. Consider the amount of time that is taken to manually create a new database, create the tables, then the indexes and then migrate the data.
This takes a lot of time to do and you’ll probably doing it many times over the course of a project. Now look at writing some SQL scripts to do all of that and then store them in a version control system. This is a good way of automating that process so it can be done with less effort. Alternate examples of this are creating a shell script to build a project, or using a build tool such as Maven, Ant or Rake to do various tasks.
7.2. Automating software deployment and testing
Another practice that should gain stronger endorsement in the near future is the automation of the entire testing pipeline. As test-driven development (TDD) becomes more and more the norm in the software industry, developers rely more heavily on fast and consistent feedback from test results. Building, configuring, and deploying test environments and datasets can be a time-consuming and error-prone process.
This is especially true for large systems or systems that rely on distributed or cloud computing resources. Automating these processes can make test results more predictable, but the real key is providing a feedback loop to developers that is fast enough to keep the pace of TDD.
Results from failed tests should be traceable to specific code changes, and developers should be able to run a suite of relevant tests locally without having to extensively configure their development environment. Tools and practices for automating the testing feedback loop in this manner are still in their infancy, but by 2024 it should be the gold standard for any professional software team.
8. Edge Computing and Software Development
Edge computing pushes applications, data, and computing power (services) away from centralized nodes to the logical extremes of a network, which means closer to the sources of data. Edge computing is changing the way data is being handled, processed, and delivered from millions of devices around the world. The primary drivers are emerging Internet of Things (IoT) and the rapidly progressing artificial intelligence (AI).
Consumer technology is becoming dependent on near-instantaneous access to data. The exemplar is autonomous vehicles that consume and generate vast amounts of data to drive effective decision making. Today, time-sensitive data processing is done in an IT data center which is remote from the data source. The basic idea behind edge computing is to have an autonomous device that is close to the data source capable of near real-time data processing.
An edge computing application is a hosted decentralized computing topology that places the compute resources at the network edge in close proximity to the sources of data. There is no perfect definition of what an edge computing device is. It could be a consumer smartphone. It could be an IoT gateway in a factory. It could be a near-autonomous high-speed rail system. Edge computing encompasses a wide range of technologies such as wireless sensor networks, mobile data acquisition, mobile computer, and mobile internet, which enable a diverse set of applications aimed at improving productivity and efficiency.
8.1. Developing edge computing applications
This section says that the most modern general software is not produced to be run on an edge device. An edge device is a small electronic sensor or effector that would compute data at the edge of a network. For instance, smart grid, industrial internet, and wearable and mobile health are all considered edge implementations because they all employ networks to connect data capture devices to a backend server for some type of processing or analysis. But because the edge computing environment is so alien to most developers, it’s useful to discuss the development of applications specifically designed to run and compute data at the edge.
They will likely use the Java, Python, or R scripts from their analysis in symbolic form, and would want a simple way to invoke those functions remotely on the data, and auto-generate the necessary code that moves the data back and forth between their application and backend servers. The ability to simply create a remote procedure call (RPC) interface for a function, and automatically generate client and server-side stubs and serialization code is a powerful tool for the data scientist doing analysis where the compute environment is tightly coupled with the data storage.
These are the kinds of software development capabilities that are generally alien to data analysts and scientists but are an essential part of building an application to run at the edge. As more developers from traditional enterprise IT backgrounds look to build edge applications, there will be increasing pressure to provide integrated development environments (IDEs) and other tools that unify the development of edge applications with the simpler methods for higher-level programming languages. A GUI builder and other visual tools for rapid application development wouldn’t hurt either.
8.2. Optimizing software performance for edge devices
Software performance optimization is a very wide field, since software itself is already nebulous and loose to define, as it could refer to anything from a full standalone application to software libraries, through to code running on a processor. Lengthy tomes have been written on the subject, and this section will not attempt to dig into every facet of software optimization, but instead will examine how the nature of software optimization is altered when considering software which is to run on edge devices.
Software performance optimization is a very wide. If you are not interested in software development trends and making sure it runs efficiently on edge, you can ignore the trend of edge computing. It relatively won’t affect you too much. But for the rest of us, trying to make sure our programs run efficiently on resource-constrained devices, edge computing is something we need to keep an eye on, since by its nature it concerns pushing computing power to the very outskirts of its capabilities.
9. Microservices Architecture and Software Development
So with the above advantages and knowing the prediction of a bright future – many organizations will begin using microservices to design new systems. When it comes to deploying and managing those services in production, there is a level of complexity that can’t be ignored. This is certainly a recognition that a smooth transition to microservices is the ideal approach. In another post with the use of SCA and Tuscany for implementing a SOA-based system, there is the start of a journey that will eventually lead to the adoption of microservices. And with the prediction, there will be pain! There are certainly challenges ahead, and Paul Fremantle, in his recent talk on the future of middleware, predicted that we will swing from a monolithic system to overly chatty microservices before we find a happy medium.
Currently, microservices are gaining ground as an architectural style for building distributed systems. And there are reasons for that. By splitting a monolithic application into its service components – the application is easier to understand, develop, and test because it’s built around the concept of single responsibility.
With this advantage, development teams have the freedom to choose a different technology stack for each component, and they can also use the best tool for the job and language that best suits the team’s skill set. It’s also possible for a service to be written by a third party – this can be outsourced in the global economy we’re a part of.
Also, if a service is isolated and has a well-defined contract with other service components – it’s easy to do maintenance and enhancement on that particular service.
And finally, the main motivation for a SOA (Service-oriented architecture) approach – it’s easy to scale out a specific component rather than the entire application.
9.1. Designing modular and scalable software systems
The first protective step is to have a clean separation between the service functionality and the underlying software platform on which it runs. Often, large monolithic enterprise applications are designed to run on one platform to exploit the performance advantages of that platform. However, to fully take advantage of a cloud platform, you need to design for portability from the start.
By separating functionality from the platform, each service is free to choose the platform on which to run. The service should be packaged along with the specific version of the platform (runtime) it requires into a lightweight container such as a Java jar or a Docker container. This is so the functionality can be executed in any environment.
For the software to take full advantage of these platforms, it must be designed as sets of independent, business-focused functions. This is where microservices make sense. A service is a software application function that is well-defined, self-contained, and does not depend on the state of the other functions. Services should also aim to automate business solutions within an acceptable time frame. This approach is the best way to maximize software capabilities.
10. Big Data and Analytics in Software Development
Building data-driven software applications utilize processed data for the consecutive decision making of the application. A simple example of a data-driven application can be software to predict the weather at a certain area. This software uses data obtained from weather stations and processes it to predict weather forecasts for the future.
Step by step, as the volume of data being processed increases, data-driven applications will become more accurate in the field that the data is representing. An effective tool in building data-driven applications is through visual analytics. Involving the automatic analysis of data using various techniques, visual analytics allows the application to learn and understand patterns and insights from data.
This knowledge can then be used to make decisions, predicting the probable outcome of the decision and also providing a course of action to take. With visual analytics, a data-driven application for a certain field will be able to perform the same task that a human expertise in that field would do to make a decision. Progressing into the future, data-driven applications will being a simulation of the decision making, providing an automatic decision that would take place and showing the outcome of the decision.
The using of big data can be seen in many applications today. With large data sets, processing and analysis of data are notably prominent in areas such as healthcare, travel and mobile. Distributed computing frameworks such as Apache Hadoop and cloud-based analytics are extremely useful in processing big data. Data mining, which is the process of analyzing data to find insights, patterns, and anomalies, is fame when working with big data. With no data provided, data mining would not even take place, showing that there is significance for processing and analyzing data. An example could be in healthcare research where scientists can discover certain patterns in symptoms and treatment of different diseases around the world.
With the increasing digitization of work and personal lands, the world has witnessed the enormous creation of data throughout many different forms. It has been observed that each year, the quantity of data created is multiplying. Indeed, one who studies the IDC Digital Universe Study would know that the data created in the world at 2010 is 1.2 zettabytes and is expected to hit 35 zettabytes by 2020. To amend to the quote, “With great data comes greater area of processing and analyzing.”
10.1. Processing and analyzing large datasets
Considering the range of technical environments for data analysis at present, it’s difficult to predict the future of software development in any specific detail. Ideally, as the field progresses and software development in analytic/data science fields becomes more commonplace, there will be a migration towards development of open source and/or proprietary software platforms designed specifically for data analysis and with capabilities for handling large-scale data.
With these advancements, we can expect software development for data analysis to become even more similar to traditional software development, with separate phases for design and implementation, interactive debugging, and testing to ensure software correctness and reliability. In this event, the development of analysis software would adopt many concepts and best practices from traditional software development.
Newer software development models pose a need to preliminary prototype analytic models over actual subsets of the data, a task in itself that is quite unique as it requires utilizing various statistical and visualization techniques to provide an in-depth understanding of the data at an early stage. As software and algorithms to automate the analysis of data become more prevalent, it is imperative that the software being developed is closely integrated with the analysis algorithms, as those algorithms are providing an increasing amount of intelligence and decision support. This ends up blurring the lines between development of analytic tools and actual analysis software, creating a need for software developers to have an understanding of advanced data analysis and to work closely with data analysts.
In big data and analytics projects, to process and analyze large datasets, the traditional software development models are increasingly being replaced by newer, more agile models. The data involved, however, can be in varied states of organization, and a key task is to make the data understandable and useful for the analytic processing.
10.2. Building data-driven software applications
Building data-driven software applications refers to the process of designing various software applications which will interact with data and information from the onset, and persistently thereafter. This can range from a web application to some back-end analytics on a traditional ERP system.
The applications are varied, but the central theme to this concept is leveraging a direct and strong connection to data and using that data to drive the application’s behavior. Today, many software applications that are not specifically for data manipulation begin life as a shell application with no real logic design, and the UI is driven from hard-coded dummy data. With this approach, the last 10% of the project will be to wire up the application to data, but often this is a throwaway phase due to complexities that were not realized in the UI design with no actual data.
Building data-driven software applications is a growing trend and one that is set to increase with more tools to simplify the process. The reason for this is clear: it offers SIs and ISVs a way to trim project lengths by giving reduced time to market and lower the cost of changes. By designing application logic directly from data and taking into account the quirks and anomalies often found in real data sets, it is possible to avoid rework in the application UI. It also offers a tighter alignment of IT with business needs because the application behavior is directly aligned with the information that it acts on.
11. Cybersecurity and Software Development
Secure coding is the practice of writing code in a way that is resistant to attack and the implementation of control and mitigation techniques with the aim to reduce system vulnerability. Writing secure code should be a priority, yet this is often neglected in favor of attaining other requirements such as functionality or deadlines.
Software developers are often poorly trained in secure coding techniques and are not aware of the many security pitfalls that can occur in the development of software. The result is that there is an abundance of insecure software on the market with research showing that a significant proportion of security vulnerabilities are attributable to coding errors such as buffer overflows, null pointer dereferencing, and unchecked array operations. In response to this, there have been global efforts to increase awareness of secure coding practices.
Cybersecurity is poised to remain a major concern for the software industry as the scope of cyber threats continues to expand and the potential for attacks to disrupt or even cause physical harm grows. The importance of software security has resulted in the inclusion of security-focused courses and material in computer science and software engineering curriculums.
The emergence of DevOps as a mainstream software development approach has also given rise to a related concept of DevSecOps, an approach that advocates for a strong collaboration between development and IT operations on security and an approach of ‘shifting security left’ to make security everyone’s responsibility.
11.1. Secure coding practices and vulnerability testing
The writer of this section has shown that they are knowledgeable on the subject matter. They give a broad explanation of what a security bug and a vulnerability is at the beginning of the piece but rightly assume that their audience already has an understanding and so does not weigh down the essay with its definition. The coverage on future prevention methods is somewhat thin. It states that static and dynamic analysis of software will help to find and solve security bugs but does not delve into what they actually are or how they work in an example scenario.
11.2. Protecting software from cyber threats
Finally, self-defensive code can be employed. This code will detect if the software is being debugged or monitored and will take evasive action or terminate. This prevents an attacker from researching the software to identify possible vulnerabilities.
Error checking routines can be added to ensure that the data has not been modified or corrupted.
Data encryption is also important. It renders the data the software is processing useless to an attacker. If the encryption is strong enough, it will be too time-consuming to decrypt. As a result, the data will be safe from theft.
Another preventative method of security is an audit trail. By observing the software and recording all the actions of the user or system, any malicious action will show up on the audit trail. This will either discourage the attacker from continuing or, if the attack is from within the organization, the trail will lead back to the attacker.
There are many security mechanisms that can be built into the software. Some of these mechanisms include access control to the various modules of the software. This is vital because it allows one to stop unauthorized access to the data the software is processing. If an attacker cannot access the data, then there is no point in attacking the software.
To protect software from cyber-attacks, many encryption systems are being designed. However, the most common method is to add security into the software during the development phase. This will provide a security shield around the software and protect it from being exploited or attacked.
12. Cloud Computing and Software Development
The simplest and widely used method of utilizing cloud computing in software development is for deploying off-the-shelf software. For those seeking to avoid any kind of infrastructure, IaaS services are a cost effective solution for purchasing virtualized hardware on an as-needed basis. This can be scaled up if an application becomes popular, making it a solution for applications with uncertain hardware requirements. With the variety of cloud computing services available cost effective software development has never been easier.
Cloud-native applications are specifically designed to operate in the cloud. This means that they’re not just hosted on the cloud, as with traditional software, but they are actually written to be platform-independent. These applications use cloud resources (like storage, computing power, etc.) and SaaS APIs. They’re also designed to take advantage of many cloud native frameworks, including serverless computing, microservices, and managed services.
Expected to rise in popularity, cloud-native app development is already being utilized by companies such as Google, Netflix, and Microsoft. In fact, it is almost guaranteed that any large enterprise will have some portion of their new applications developed as cloud-native. While cloud computing becomes the industry standard, the ROI on cloud-native app development is very appealing. In a one to three year timeframe, a 29% increase in the sales of cloud native development platforms and IT architecture oriented infrastructure are expected.
12.1. Developing cloud-native applications
Similar to cloud services, developing cloud-native applications will take software development to the next level. Cloud-native applications are designed to run on cloud-computing infrastructures and are specifically built to be delivered over the internet. This doesn’t mean that traditional applications cannot be run in the cloud, it just means that cloud-native applications are built with the cloud in mind. They are loosely coupled systems which take advantage of cloud computing patterns including:
- SaaS,
- PaaS,
These systems are resilient, highly scalable and have the ability to evolve. As a result, cloud-native application will need to be built with flexibility in mind; gone are the days of developing software to last for 10 years.
On the contrary, requirements are constantly changing and modern software needs to rapidly adapt. This means that software will evolve multiple times and developers will need to keep iterating on software that has already been released. This will require a shift to new lightweight development methods. Furthermore, development and operations will become more tightly coupled and will also become more automated.
Cloud-native applications should also be built as stateless, and any state required should be stored in a database or on an external file system. This is so that if an instance of the application fails, it can be more easily replaced.
12.2. Leveraging cloud services for software deployment
Cloud services have become a new home for deploying software, as with SaaS age cloud is providing more value-added services which are reducing the cost and complexity of deploying and managing the infrastructure. There are many types of services which can be used for deploying software.
One of which is using Infrastructure as a Service (IaaS) for deployment. In this case, the software provider will have to rent the virtual machine from the provider which will act as a host for his software. He will have to install the OS and other software like a database, middleware, etc.
Once the machine is ready, he can install the software on the machine. This way, the provider will have full control over the environment and he can install/deinstall the software anytime. An alternative to this, he can use Platform as a Service (PaaS). Here, instead of a VM, he will get an environment to develop, test, and host his software. This is best suited for SaaS companies who can develop and test their software in the same place. This will greatly reduce the cost with more flexibility. With PaaS, using software components that are available from the hosted services, consumers can change the functionality of their application.
Another way is to use Managed services provided by Cloud providers. In this case, the provider will provide the complete solution e.g. database hosting, BI solutions, SAP environment, etc. The customer just has to give the software to the provider who will then push the software on these services.
This way, the customer will have to deal with fewer things and can save the headache. He can use the solution for a specific period and can cancel the service once work is done. Software services are another way for deploying the software e.g. Salesforce.com. Here, the customer does not need to install anything. He just has to take the subscription and can start using the service.
All the maintenance and upgrades will be done by the provider. This is the best way to install the SaaS application. The provider can just package his software as a service and can provide the functionality. With the type of services, he can decide the duration and can change/cancel the service anytime. He just needs to make the software compatible with the service.
All these methods are reducing the burden of managing the infrastructure and the customer will have more flexibility.
13. User Experience (UX) Design and Software Development
Designing is the first phase in solving a problem. The user interface (UI) is easy to understand. If the designer can provide good design, the user can easily access the software. The design is closely related to psychology. Different people have different impressions and interpretations when seeing the same thing. It is also related to the background of a person.
A designer must have an understanding of the targeted user. Software designed for children is absolutely different from software for older people. An example is an MMORPG game and e-banking software, which have very different designs and are intended for different age ranges. MMORPG games are identified with young people, while e-banking is for those in their 30s or older. Therefore, in designing the UI, it must be adjusted to the character of the user.
People must be fast movers right now. They don’t want to waste a single second just to learn how to use an application. They need a simple application with maximum features and, of course, easy to understand. The best UI is a simple UI. But simplicity here does not merely mean placing the components on the form, but it should help the user easily understand the content and use the software.
Time is precious. No one wants to waste their time just to learn how to use an application. If it happens, they will look for another application that has the same function but is simpler and easier to understand. This is why the UI is very important, because no one can resist a simple, easy to understand, yet powerful application.
13.1. Designing intuitive and user-friendly interfaces
In the bid to engineer an effective, user-friendly software interface between the user and the complex systems of tomorrow, we must first understand the issues which stand in the way of achieving this.
The challenge lies in the fact that future systems will be much more complex than those of today. Emerging technologies will produce systems of great scale and complexity. These systems will feature dynamic, networked configurations of software and hardware that will sense and respond to changes in the real world. Users will expect the automation of repetitive tasks and guidance in problem solving that is tailored to their unique needs.
The complexity of these systems will increase the probability that users will experience some form of user interface induced error (e.g., selecting the wrong option from a menu), and when this happens, the systems of tomorrow will simply not be forgiving.
User interface induced errors will also extend to adverse effects on the external system, with the potential to trigger sequences of events ending in system failure. Adverse event sequence prevention will become paramount in ensuring the safety of future systems when under the control of a human operator. These issues are what drive the need for intuitive, user-friendly interface design – future systems will simply be too risky to operate if the interface is not optimally designed for the user’s needs.
13.2. Conducting user research and usability testing
Conducting research regarding the potential users of a product is a crucial part of the initial development effort. Although you may think you know what is best for the users, it is highly likely that these assumptions are incorrect. Incorporating user-derived feedback into the design process is known to be extremely cost-effective.
If done iteratively, it drastically reduces the chance of having to scrap large portions of the project due to a direction that the users do not find desirable. Although this is well-documented in other design disciplines, its relevance to software design is only just gaining recognition. This is mainly due to the complexity of software designs and the resulting costs associated with any changes to the system.
Early involvement of users has been stressed in recent years for systems development. It is the cheapest time to get rid of faults and is easier to influence the design in a positive manner. This is supported by the Myers quote at the beginning of this paper: “It is 100 times cheaper to make a change before any code has been written.”
14. Agile and Lean Software Development Methodologies
The Manifesto for Agile Software Development is built on 12 key principles:
- Customer satisfaction through early and continuous software delivery – useful software is delivered every 1-2 weeks, with the aim to satisfy customers and show progression.
- Welcome changing requirements, even late in development – in order to harness the customer’s competitive advantage.
- Deliver working software frequently, from a couple of weeks to a couple of months, with a preference for the shorter timescale.
- Close, daily cooperation between business people and developers.
- Build projects around motivated individuals, providing them with the environment and support they need and trust them to get the job done.
- The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
- Working software is the primary measure of progress.
- Agile processes promote sustainable development – this is a pace that can be maintained indefinitely.
- Maintain continuous attention to technical excellence and good design.
- Simplicity – the art of maximizing the amount of work not done – is essential.
- The best architectures, requirements, and designs emerge from self-organizing teams.
- At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.
Software development marches to the beat of an iterative and incremental drum, in line with the principles of Agile software development. This methodology is a sashay away from the rigors of traditional models, and it places a strong focus on customer satisfaction, flexibility, and the delivery of maintainable products, in direct contrast to the classically linear and inflexible ‘waterfall’ progression.
14.1. Agile software development principles and practices
In February 2001, at a ski resort in Utah, seventeen people met to talk, ski, relax, and try to find common ground for various methods of developing software. What emerged from that meeting was the Agile “Software Development” Manifesto. This is a formal declaration of 12 principles to guide an iterative and people-centric approach to software development. There is also a simple but thought-provoking statement of the 4 key values to which the “signatories” ascribe.
Agile methods are modeled on a back-to-basics, practice-centered understanding of how people best work together to achieve common goals. The Agile Software Development principles and practices are described by these values and principles, and they are designed to exploit the ways in which people actually interact to solve problems.
It is not surprising that when more effective project management techniques emerged in manufacturing and physical industries, it became fashionable to try to adopt these methods in software development – people are often motivated to get into software development because they are excited about exploiting the potential of technology to solve problems in a more effective and elegant way, and it is easy to see that developments in these “traditional” technical fields have real and tangible effects. Unfortunately, traditional project management techniques tend to be unsuitable for the low visibility, high change nature of software development.
Agile methods are an attempt to find a way to harmonize the real nature of software development with effective project management.
14.2. Implementing lean methodologies for efficient software delivery
Encourage a culture of problem solving. Lean development methods are not a collection of recipes to follow, but rather a set of principles for solving real world problems. Identification and A3 analysis of problems is the most fundamental step, but may be one of the hardest changes for an organization to make. Recruiting both managers and developers into root cause analysis and mentoring them through the A3 process is a very direct way to develop capability.
When development organizations ask for help to overcome problems, they want, as the Buddhists say, the appropriate method for the problem at hand. Root cause analysis, the scientific method, is at the heart of lean thinking.
When the causal mechanisms relating methods, actions, choices, and their effects on development and quality are not well understood, the result is alchemy: trying one method after another with little improvement taking place. Lean coaching aims to develop the skills to conduct experiments in the form of changes to the way work is done, to see the effects, and compare them to the intended results. Lean coaching should not be directive but rather help people to discover better forms of practice and the reasons for them.
Software development attempted to apply lean thinking in the past with mixed results. The primary causes of failure of lean implementation in software are twofold. First, the implementation was from the top down and push driven. It was not driven from the development organizations asking for better methods but rather from senior management seeing an opportunity for large scale improvement through standardization and top down control.
Huge amounts of change were forced upon development organizations without addressing their underlying problems. In many cases, these methods were abandoned after a short period of time. And second, the methods often conflicted with the complex and variable nature of software development. Lean methods were originally designed for largely repetitive product.
15. Ethical Considerations in Software Development
Software operates on data, much of it personal, and data handling is subject to privacy law, while privacy itself is a human right. The general trend is for systems to become more distributed involving mobile code, sensors and devices which all collect and store personal data. It will be all too easy for systems to be developed that slurp up personal data wherever it finds it and stores it in the cloud for processing by powerful analytics software, much of it escaping the notice of its subjects.
A possible straw to break the camel’s back would be the widespread use of AI techniques such as learning classifier systems which make decisions based on large amounts of data. If the data they use and the rules they induce from it are not open to scrutiny, the decisions of the AI system may be impossible to contest by any human authority that is subject to public appeal. An often cited scenario is that of a future surveillance system following a person of interest around a city, where the AI system controlling it decides that the person should be detained based on preconceptions and questionable data, with neither the decision nor the data ever being open to scrutiny.
15.1. Ensuring privacy and data protection
During the past few decades, ease of access to the internet has led to a rise in the collection and storage of user data by a plethora of organizations with various intents. Artificial intelligence, particularly machine learning, relies on analysis of large data sets to generate patterns. This is functionally identical to data analytics and is subject to an equivalent risk of harmful data exposure. AI systems are likely to operate on sensitive data in an attempt to draw meaningful conclusions, and any data leaks that may occur often have serious implications on the confidence people have in AI systems as a whole. For these reasons, it is important that AI systems adhere to equivalent or higher data protection standards expected of modern software systems. To facilitate this, it may be necessary to apply GDPR and similar privacy laws to AI systems as a special case. This would require significant legal framework development but would provide assurance that AI systems are kept in check with modern privacy standards. Beyond this, AI-specific data protection technology and practices will need to be developed. An example may be future neural network models having the ability to train and operate on subsets of encrypted data without ever exposing raw data. The most comprehensive method to ensure data safety may be to use other AI systems, such as expert systems, to monitor and assess data handling of learning AI with respect to defined safety standards.
15.2. Addressing bias and ethical implications in AI-powered software
AI Now also aims to promote awareness of issues such as the data double, whereby algorithmic results affect the opportunities an individual may receive based on the characteristics predicted by their data profile. The disconnect between high-level discussions and direct implementation into software systems requires a will from developers to actively seek out information on the ethical implications of AI technology and a desire to build systems with social considerations in mind.
The complex and varying notions of what makes a decision biased make defining and identifying bias a difficult task. High-level discussions on the ethics of bias in AI decisions are becoming increasingly important and relevant. AI Now, a research institute studying the social implications of AI, has proposed a broader moratorium on the use of facial recognition software by governmental agencies and has suggested guidelines discouraging private companies from using the software on customers. This represents an attempt to stall the rapid development and deployment of facial recognition software in order to first fully assess the repercussions it may have on human rights and freedoms.
Considering a loan granting system trained on data from wealthy individuals. This system may well assign lower risk scores to low-income individuals. Other things being equal, this is a biased decision in probability theory. Yet, from a business perspective, the goal of the loan system is to make as much money as possible from interest on loans – to maximize the difference between the probability of default and the interest income (to maximize expected utility). If wealth is a good indicator of the probability of paying back a loan, then the system is making a rational decision to charge higher interest rates on lower-income individuals, even though it results in different decisions for different wealth groups. The bias here may be undesirable from a societal standpoint, but it is a rational business decision given the context of the system.
AI applications are rarely deterministic and decisions are often based on probabilities. As such, defining a threshold to determine when a decision is biased is a complex and often subjective task. This problem is pervasive in AI and has been highlighted in a variety of differing domains.
As we look ahead to 2024, it’s clear that the landscape of software development is evolving rapidly. Embracing AI, machine learning, and innovative development platforms will be crucial for staying competitive in this dynamic environment. By keeping an eye on these emerging trends and adapting to new technologies, businesses can position themselves for success in the future of software development.