What Is Software Development?

Simply put, software development is the process of creating software. Everything you do on your computer, your phone, your tablet, and even on your TV, refrigerator, and lights, all went through a software development process. The software development process (often referred to as the Software Development Life Cycle – SDLC) includes inventing the software, deciding on and designing features, implementing and testing, and evolving the product over time. The software development process can involve one person making and doing all the tasks or up to thousands of people working together over several years to make a very complex system.

Why Would I Develop Instead of Buying Software?

There are a lot of software packages on the market for you to buy, or even get for free with open source software programs. But sometimes you need to build it yourself. Here are a few reasons why:

You Do Things Differently Than Others

Often, your company takes advantage of a competitive difference over others. This can take the form of two flavors. One is where you buy a software package and customize it. If the package is close to what you want, then by all means, customize. Just make sure that you have a plan in place for those times when the package is upgraded. You will have to keep up with releases or lose support. In addition, you may have to do all your customizations again depending on how big the release changes are. The other flavor is building it. When you do the business activity differently enough from the package, you probably have a competitive differentiation happening. On a business side note, if you have that kind of differentiation, you should be monetizing that with your customers. When what you do is that different, building is the only way to go. The amount of customization required would be enormous and wouldn’t be worth the time or money invested.

You Do Something Others Do Not

If you are doing things that others are doing, leverage what has been built by them or what they use. You will get much farther much faster this way. However, if you can’t use the software as is and you don’t want to change your business process to match the software, look at #1. Have you considered building a package of your own for people to buy from you? If you have found a way to do something that is better and faster than the standard (and you don’t mind sharing it), build it and sell it to other people.

You Have to Use Multiple Software Packages

If you find yourself cobbling together a number of different systems to get work done, you may want to develop software to have them all talk to each other or replace them with one seamless product.

How Does Software Work?

Software on a phone and software on your computer work very differently, but all software shares some basic constructs. Much like a house and an apartment building have the same components, so does software.  
  The user interface is how we communicate with the software. This is where most of the differences exist. If I am using a phone app, I use one user interface, but if I am using a web browser on my laptop, I am using another user interface. The web browser itself is the user interface program running logic to do the things it is told to do. Each type of device and each “operating system” (e.g. Android vs. Apple’s iOS) needs a different user interface. Like most things in software development, people have invented software and techniques to make this less burdensome, but something, someone, somewhere, is building out each user interface for each device.   The presentation layer is what controls the user interface. For example, all the things your web browser does when you view this blog are controlled by the presentation layer. The presentation layer knows you are on your phone or your computer and sends that browser the appropriate information, so it can show you the right thing. This becomes a LARGE headache since there are so many different user interfaces and each user interface has many versions, all of which have their own little something special to make them different.   The business logic layer is where decisions are made. This is where the “guts” of the application live. Here, the software decides what to do when the user asks for something.   The data logic layer is performing any tasks to retrieve or manipulate data.   The data layer is where the actual information is stored so it may live from one moment to the next. Without it, your computer “forgets” what it was doing and what it was doing it to.

How Do These All Fit Together?

There are a lot of layers, and it can be hard to understand how they all work together to create the software we use every day. Let’s take a look at each layer in action:

User Interface Layer

When you use your mouse, keyboard, or finger to interact with the user interface:
  1. The presentation layer tells the user interface what to do based on the action you performed.
  2. The user interface does what it was told by the presentation layer.
Surface-level actions, like moving a picture around on the screen, may be done completely by the user interface. Other times, the user interface needs more information, so it asks the presentation layer.

Presentation Layer

The presentation layer takes in whatever request is made by the user interface and interprets it. Sometimes it is something the presentation layer can do by itself, but usually it’s not. Resizing the page and some other graphic-related actions may be done by the presentation layer, but it is really there to translate the business logic into what a particular user interface requires to show the result properly. So, most of the time the presentation layer:
  1. Makes a request to the business logic layer.
  2. When it gets the reply, it formats that reply for the appropriate user interface.
As you can start to see here, the development process cycles up and down through the different layers.

Business Logic Layer

The business logic layer is where all the “thinking” is happening. If you click a button that says you want to turn on a light, the business logic layer determines what that means and asks the appropriate business logic or data logic component. It is also common for a business logic component to call another business logic component to ask it to perform a task. Think of business logic components as people that are there to perform a specific task. You ask and they perform. These business logic components may also be owned by someone outside your system. We refer to these as APIs (Application Programming Interfaces). If the business logic component needs information (data), it asks a data logic component. Just like the presentation layer components, the business logic component:
  1. Asks other business logic components, APIs, or data logic components (often in combination) to do things.
  2. When the answer is received, the business logic component interprets that result and sends the appropriate answer to the presentation layer component that called it.
The layers in software development continuously rely on one another to perform tasks.

Data Logic Layer

The data logic layer is a group of components that work on data / information. For instance, if you are looking for an average daily balance in your checking account, a data logic component is going to know how to do that. It will:
  1. Ask for data from the data layer.
  2. Fashion an answer to return to the business logic component that called it.
In short, the data logic layer retrieves and manipulates data as needed and then sends it to the layer that asked for it.

Data Layer

The data layer is the bottom of the pile. It stores whatever information we need to keep from one moment to the next. This is where your transactions, addresses, customers, etc. are actually stored. The data layer:
  1. Takes requests for data from the data logic layer.
  2. Retrieves data or takes actions on data.
  3. Returns the result to the data logic component making the request.
Again, like everything in software development, people invent new software and new techniques to make these things easier and more streamlined, but these layers must always exist – even if they get combined together.

How Is Software Made?

Every new software product is made by joining business stakeholders with a software development team. Typically, the idea takes shape when a business encounters a specific problem. However, a software system is not always easy to implement without the right help. Software application development requires a specialized team familiar with developing software and the steps of the software development process. This software development team is often stacked with technical software engineers and other related talent to create the end software system.

Software Development Life Cycle

All these major players follow a software development process, known as the software development life cycle, to create the end software program or application for the company to use.

Invent and Design

This software development team works closely with company stakeholders on problem solving to design the software model that best fits the business model. This design phase gives the analyst the information they need to create requirements documents that tell the software programmers what to code in a specific language they understand.

Build and Test

The next part of the process is where the programming happens. Software engineering experts write code in the programming language that best supports the application software and systems requirements. They consistently review the code to ensure that it is clear, concise, and won’t be the source of any issues in testing. During this engineering process, your quality assurance analysts will test the code and make sure it meets requirements. Stakeholders may also get a chance to check out new product features and see how they work when used as intended.

Launch

Once the design team has verified that the business requirements are met, systems deployment can begin. Now it’s time to use your software product after all the hard work your team put in during its software development life cycle!

Is Software Development Hard?

That’s where your software engineers come in. Armed with knowledge of computer science, code best practices, programming languages, application design, development methodologies, and other development tools, they are necessary in bringing a high-quality software project to life. Your development team will also need members with the skills to handle project management, software design, business requirements, quality assurance, and more. This team of professionals will help your business choose the right approach, create code, follow standard software development processes, and navigate the software development life cycle.

What Do Software Developers Do?

Software developers write the code that runs the software systems on your computer, mobile phone, and more. They write this code in various programming languages that your computer understands. This tells the computer what to do to get the desired result. Before software developers can start coding the functionality, they need to begin the process of setting up the right environment. Maybe you need a cloud-based application, mobile software you can use on the go, or systems your employees will access primarily on their work computers. To know the desired result of the software systems in question, software developers need to read requirements documents. These requirements are critical in telling software developers what to build, but the developers’ key skill set is in knowing how to write legible code that makes the necessary functions happen. Once the requirements are satisfied, software developers will use tools to deploy your end product to the necessary operating systems. For instance, if you have designed mobile application software, you will want it to be compatible with both Android and Apple operating systems.

What Software Developers Do Besides Code

Contrary to what you might think, developers do more than just code during software development, including:

Architect Systems

Before developers even write a line of code, they need to define the systems architecture. Senior-level developers use development software to determine the data model for how the system software should work, giving them a blueprint to work with during software development.

Manage Teams

All software development projects will involve a team made of developers, project managers, designers, etc. Senior-level developers must have great leadership and communication skills, as they’re often responsible for managing their teams and keeping them on track.

Solve Problems

Every software development project inevitably runs into a problem or two; it’s part of the job description. That’s why developers are often problem solving and finding creative solutions to new challenges in the system software. With a mix of past experience and innovation, they’re able to successfully navigate roadblocks to keep the software development process running smoothly.

Why Do So Many Software Development Projects Fail?

There have certainly been many studies done on this subject (including our own that you may read here), and many methodologies have been invented to increase the likelihood of software development project success. When push comes to shove, software development projects usually fail because of people, not because of software or technology. Here are a few things to look for in a software development project team:

Ability to Articulate the Scope

Can they tell you all the things you are going to get and in a way that makes sense? Development teams used to make software development confusing, so nobody knew what they were really going to do. As a result, the development team got more flexibility. Now, the emphasis needs to be on transparency and visibility. Remember that the person that knows the most can articulate the best and simplest.

Ability to Break Down a Task

If the software developer cannot break an item down into its components, how are they going to build it? They may say they are going to figure it out later because they are “agile,” but really they should already have patterns for how they do things. Even if the thing they are going to build has to be completely invented, they should have an approach to how they invent something that includes giving you many opportunities to see what they think the future holds and to pull the plug.

Ability to Track the Tasks

If a task or capability can be broken down, it can be tracked and, therefore, projected whether it is happening the way it was intended. If you break down the greater than one-day tasks into one day or even smaller pieces, you know every day if you are on-track, running behind, or running ahead. Making the tasks any smaller really doesn’t help since you don’t want to be watching that closely. If the tasks are smaller, articulate a day’s worth of them.

Check in Every Day

This is to make sure the day’s worth of tasks were completed. Projects do not magically jump from being on-time to being a month or a year late. There is slippage all over the place that people aren’t recognizing.

Assume Everything Is a Pattern

If a one-day task takes three days to complete at the beginning of the project, you should probably assume all tasks are going to take three times as long as you expected. Why wouldn’t they? Most people assume they will “make it up” later and don’t change anything. Isn’t that the definition of insanity (Albert Einstein)? If your very first day’s worth of tasks take more than that first day, you need to start looking at why it took longer and what you can do to make sure the rest of the tasks don’t take longer as well.

Make Sure You See the Result

Not that software developers would lie, but often their vision of what you wanted them to build and yours are not the same, and sometimes they are “developer done” rather than done enough for you to actually use it. This “developer done” is phrased as, “I finished it except for x.”  
  Notice that these characteristics are not referring to the software development methodology but rather what the developers need to be able to do during the development process. All of this put together is what software engineering looks like. Filled with wonder and glory, pain and suffering. Remember that a software development project is wrong every time until the one time it is right.

Why Is Software Development Important?

Software development is important because it’s impactful and powerful. It’s one of few processes with the potential to create lasting change in businesses, industries, and the world. A lot of us have grown accustomed to using software in some way every day, whether we realize it or not. And in the context of history, this change has happened over a pretty short time! In fact, just over the course of the last year, we have seen firsthand the role of digital transformation in keeping us safe and connected despite considerable global upheaval. Application development lets people use tools to bring big ideas to life. The development life cycle provides a blueprint for how to build a successful software product. No matter the approach, the end product can shape expectations of human life in extraordinary ways. Looking to start your own software project? Geneca has development teams based right here in the United States that are ready to create applications your users will love. Start the conversation with one of our senior leaders today!