Our clients usually come to us with some sort of a problem. A problem is simply a difference in their current reality versus their expected reality. Sometimes the problem is that their application is broken, or sometimes their application doesn’t have a useful feature. Either way, we’ve seen our clients come to us with all sorts of unique problems for us to solve.

We’ve had a lot of success creating custom software development solutions to solve our client’s business problems. To do this well, we need to understand the problem, design the right solutions, and build the right software as a solution. Let’s take a dive into how Emergent Software translates complex problems into software:

Step 1: Understand the Problem

Listen, Listen, Listen

Building a great software solution starts with listening to our clients to understand their business, the problem, and what impact it has. We listen, ask questions, and listen more because our client is an expert on their problem. It can be tempting to jump to a solution as soon as this problem begins to sound like a problem we have solved in the past, but we’re not ready for a solution yet. Don’t let this temptation cut your listening short.

Define Success

Our clients also have an idea of what success looks like. Sometimes, their idea of success is very different than we assume. Building a solution that solves their problem without meeting their success criteria is still a failure. Meeting their success criteria is how we know we’ve solved the problem.

At this point, we’ll understand the problem and know what success looks like, but everything in between will be undefined.

Discover Requirements and Constraints

As we listen and ask questions, we’ll pick up on two additional things: requirements and constraints. Requirements are things our solution needs to do (ex. Must be able to support 1,000 users, must integrate with Salesforce, or must meet HIPPA). Constraints are things our solutions must fit into (ex. Must be live in 6 months or must fit within a specific budget).

Requirements and constraints make a landscape that our solution must fit around and within. These will narrow down what solutions are possible and how we’ll need to customize the solution.

Einstein once said, “If I had an hour to solve a problem, I’d spend 55 minutes thinking about the problem and five minutes thinking about solutions.” Our job is to fully understand the problem, success, constraints, and requirements -- then we can design a solution.

Step 2: Design the Right Solution

On paper, this is the easy part: design a custom software development solution that solves the problem, meets the success criteria, and stays within the requirements and constraints.

In reality, this is a complicated process because there is never just one solution. Our job is to have a toolbelt of ways to solve problems. The more experienced we are, the more solutions we have available to us. Now the problem is narrowing it down to just one solution.

Value: The Solution Filter

Given many valid solutions, choose the most valuable. Value is a simple equation, impact divided by cost.

Impact is how well the solution improves the client’s situation. Even if all the solutions you’re considering solve the client’s problem, some solutions may have unintended side effects that are better (or worse) for their overall business. Be sure to analyze the holistic impacts of your solution before presenting to a client. .

Cost is the total dollar amount of our time, licenses, subscriptions, or any other expense. When it comes to cost, we look for the most efficient way to solve the problem. Even if we’re able to create a custom software solution, we always need to consider if off-the-shelf tools might provide the value a client needs.

Impact and value can be ambiguous terms. In the end, value can only truly be determined by the client. When more than one solution appears to have similar value, we present them all to the client to choose the most valuable solution.

Step 3: Build the Right Thing

The final step to solving the problem is turning the conceptual solution into a concrete deliverable we can give our client.

Understand the Solution

The person who builds the solution needs to understand the problem, success criteria, constraints, and requirements. We will make a multitude of micro decisions as we build out the solution, and those decisions need to be grounded in an understanding of the big picture.

Implement the Solution

Our problem-solving method works like a fractal. We start with a project-level solution and break it into Epics, which are each their own solution to a problem. Epics break down to feature level solutions, which break down to stories, which are our smallest solutions. No matter the size, we use the same process. A User Story is a small difference in the current reality versus the expected reality. Stories have requirements, constraints, and success criteria. Our job is to find a valuable solution to implement the story.

Validate

As we build out the software as a solution, we need to validate that we’re meeting the requirements, constraints, and success criteria at every level along the way. Within Software Development, we do this with automated unit tests, manual and automated quality assurance, and by client users acceptance testing.

So, there you have it – turning complex problems into software is solved through three steps: understanding the problem, designing the solution, and building the right thing.

Interested in learning more about the impact custom software can have on your business? Read this blog post on the 9 reasons your business needs custom software!