When it comes to software, Simpler is better
var goalOne = "Make customers ridiculously happy."

Is not just a statement or a belief, but rather it is the responsibility each employee of Zapproved has placed on them from day one. This is the goal that defines the backbone of our culture, and therefore defines the first acceptance criteria when developing our products. It is one of the most important things we want to teach new associate engineers coming into our Engineering Foundations Program.

My role as a software engineer at Zapproved is to create the simplest piece of software that fulfills the needs of our users. In our case, users are part of corporate legal teams who manage much of their ediscovery workflow internally. From our point of view, customers should be ecstatic to use the software we develop. We’ve failed if it gets in their way or doesn’t enhance their productivity. Our guiding principle is that the software we develop should make their lives easier by using our solutions, not harder. It may sound rather plain, but the concept of “simpler” defines our approach to creating software that empowers customers and makes their work easier to accomplish and more valuable to their organizations.

So how do we draw the line between simple software and complex software? The importance of understanding our users cannot be stressed enough. Incomplete understanding of the problems a user faces leads to overly complex and bloated software. Software that tries to solve too many problems negatively impacts the user experience because the complexity is visible in the user interface. Furthermore, overly complex and bloated software is also difficult for the engineer, who must understand how it works and in turn maintain the software and make improvements over an extended period of time.

By understanding the problems customers face we can identify similar problems across the customer base. We look at the hot spot problem areas across customers and where multiple customers are facing a similar problem we derive a solution that benefits the majority. Understanding the many different ways customers talk about the same problem allows the team to group and narrow the focus on the challenges to address so that the work can be prioritized

At Zapproved we write software for corporate legal teams. We are helping in-house teams deal with litigation response more efficiently, effectively and defensibly. In the ediscovery software industry many of the challenges corporate legal teams face have not been solved adequately for these corporate users. When we speak of simple software we are not speaking to the ease of writing the software but rather the simplicity for any customer to use. Another driving principle for us when developing software is that it should be simple to reason about, meaning the development team fully understands the solution and we are confident that it solves the customer challenges. Finally, the software should be simple to extend and maintain going forward, so that we can provide a solution to any future customer challenge. Notice these three pillars of simple are customer focused, not surprising given goalOne.

The goal is to make customers happy and therefore the pillars on which we develop our products must be customer driven. However, over the course of time we have discovered that maintaining this customer focus has tended to result in the simplest solutions from an implementation perspective. This to say, listen to your customers first and understand the problems they are facing so that you can build solutions for them that are easy to use and fit their needs. The simplest solution to a well understood problem is going to create easier to understand code bases that are maintainable in the future. But most importantly the simplest solutions yield the most customer success because the solutions are directed at the problems the customer is facing which empowers them to complete their tasks more effectively and efficiently. When you give your customers this type of satisfaction then you have created a product that is simple to use, solves problems for your customer, and is maintainable and extensible to future problems your customers will face.