Simple Isn’t Easy | The Hidden Complexities of App Development
By Stuart Smith | May 28, 2020 |
Let us dispel a couple of misconceptions related to software development that seem to be fairly common. These concepts are:
If something has been done before, it must be easy to do again.
The idea is very simple, so it must be easy to build.
An example of this thinking is; “My idea is simple: I want to build something just like Zillow or Uber”. After all, Zillow already exists and works great! Building something similar must be low effort and inexpensive because you can just copy what Zillow built.
Same with Uber, right?
They already figured out how to build the app. They did the heavy lifting for you! Now that it’s been done, it should be easy to do again.
To put this in perspective, let us try a different analogy:
We put a man on the moon already, so doing that again should be easy right?
Putting a man on the moon is not easy, no matter how many times we try. Building a successful and complex application like Zillow or Uber is never easy. It does not matter if they have been done before.
When we say something is easy to build, then we are probably also assuming it will be inexpensive. Several factors determine the cost to develop a software application. The most important is the amount of time it will take to code the application. You also must consider the designers, project managers, technical architects, and QA engineers involved. Their time is money as well. You will incur licensing fees for APIs, Libraries, and hosting costs for your production hosting environment. If we think something is easy to build, then we assume that the entire team will not spend a lot of time on it. Therefore, the project should be inexpensive.
What If I Use A Clone to Build My App?
Clones of popular applications, like Uber, exist. Clones are basically templates of an app that you can add your branding and logos to. You can license or purchase the source code for these applications inexpensively.
A word of caution though, you need to look closely at the source code BEFORE you make a purchase decision. It would be a good idea to set up a test environment and do some testing of the clone before deciding. This caution comes from experience. There are horror stories of projects that attempted to go this route and ended badly. If the source code is poorly written, cleaning up and fixing the app may take more time than building it from scratch.
Some companies offer clones as while-labeled solutions that you license. A white-labeled solution is an inexpensive means to deploy an application quickly. However, you will not own the code for the application. Instead, you will be at the mercy of the provider for support and enhancements. If the company is reputable and offers good support for the app, this may be a good alternative to developing your own version. But only if the solution meets your requirements out of the box. This is not often the case. Most white-labeled solutions are not very customizable. This makes it difficult for them to work if you need specific workflows.
Building Your App From Scratch
If a clone won’t really work for you, you will need to develop the application yourself. Or hire a development company to develop it for you. Software development costs come from several components of a project:
To develop an application you first need to design the screens. This starts with sketching things out (wireframing) and then making the sketches look nice (design). This is a very important step in producing a quality application that is both intuitive and attractive. Companies like Uber and Zillow have spent years fine-tuning their User Interface (UI) to get to where they are today. If you would like your app to have an attractive design and be easy to use, you will need to invest time as well. There will be some time-savings though, as you can learn from what other companies have done.
There are no shortcuts here. If you want to build an application with similar functionality to something like Uber or Zillow, it will take a large development effort. Although these applications look simple, there is a lot going on behind the scenes. More on this later. You can benefit from the use of existing APIs to provide services your application might need. For example, Zillow offers an API to provide home listings on a website. This is a good solution instead of building this functionality yourself. However, these API will often incur licensing costs and may have restrictions on how they can be used.
Again, no shortcuts here. If you want a quality, bug-free application, you will need to spend a lot of time testing it. You should test it internally (QA staff) and then release a beta version of the application for end-user testing. You will find bugs. It will take time and effort to fix the issues found.
Any software development process will require management and oversite. Technical Architects, Technical Managers/Development Leads, Project Managers, Product Managers are all necessary for a successful project. The need for these resources does not go away just because someone has already built a similar application.
In short, if you would like to develop an application like one that already exists, there will be some savings. However, the savings may not be as much as you think.
The Secret Behind “Simple” Applications
Developing an intuitive, attractive software application that is so easy to use it seems simple is actually very difficult. Companies like Apple, Google, Uber, and Facebook have applications that are so intuitive they seem simple. Most of these applications are incredibly complex behind the scenes. A lot of time and effort has gone into making them appear simple.
Take Uber as an example. When you use the application, you enter a destination, and Uber will send a car to your location, simple. You probably overlook that Uber must maintain the locations of all the cars in service. They show you what cars are available on a map and update their location in real-time. Each driver has their own version of the app. The drivers need to accept requests and get directions from place to place. The applications track the progress of the car to your pickup location. They calculate the fair based on a complex algorithm that has been continuously tweaked overtime. They developed a complex accounting and reporting system to support the infrastructure of the company.
The user interface itself has been fine-tuned over the years to make it simple and intuitive. You probably would not even recognize the UI for the first version of Uber! They have spent a lot of time and effort to improve it over the years.
The Devil is in the Details
Making an application appear simple, takes a lot of effort. You must spend a lot of time thinking through how users will want to use the application. What functions will they be using the most? These use cases need to be identified. Then the user experience (UX) designers design a user interface that enables the user to complete these use cases most efficiently.
Adding intelligence so that the app can make some choices for the end-user based on logic and usage patterns can make it much more intuitive. Identifying these opportunities and developing that intelligence is not low effort. It takes a lot of fine-tuning and iteration to develop a UI that appears simple.
Some ideas for an application concept can seem very simple, but building it is not. For example, a mobile application that will enable users to find a barbershop or hair/nails salon near them and book an appointment. It might seem simple. If you look at what would be involved in building such an application, it is not something that would be low effort from a software development perspective.
You will need to consider how the providers define their availability, so that if a user tries to book an appointment, they would be able to see available times. This functionality needs to integrate with the scheduling system in use by the shop or salon. You would probably need to integrate with several different scheduling systems because not all salons use the same one. This does not even take into account all the features that will probably be wanted to build an attractive application.
You probably want people to be able to review the shop/salon after they have used the service. That way others can see those reviews when browsing shops. A 5-star rating system with a text comment is probably the best solution. Well, now you will have to have a way to moderate the text comments. People may leave rude remarks in their comments. The application administrator will need to be able to remove offensive comments.
This list of all these features goes on and on. As you start to define an application like this, even though the idea is simple, the devil is in the details. You will need to consider these details to determine the level of effort to build the application.
Consider An MVP
In the end, building an application that seems simple or has been done before does not ensure that it is low effort or inexpensive to build. If you want to build an application and keep it low effort, first build the Minimum Viable Product. You can read my full article about what, exactly, an MVP is and some tips on defining yours here.
Apps like Uber did not start with all the cool functionality they have today. Even simple concepts can expand when you start to consider all the features that people might want or what you think the application should include. Just remember the more features and functions in the application, the more effort required to develop it. So, if your idea for an app really is simple, don’t complicate it. Only build what you need.
Stuart has been working as a technology professional for about 30 years. He got his start working in systems operations/systems management and then moved on to software development. He has a diverse history with technology working with software applications and systems ranging from avionics, web applications, disaster recovery, license plate recognition, content management, and systems monitoring.