Over the last 11 years, we have seen the good, the bad, and the ugly. We have helped startups, enterprises, and nonprofits with numerous projects – building websites, scaling apps, optimizing cloud infrastructure, and much more.
The Tragic Media team has an interesting perspective on the software development industry due to our focus on supporting and scaling projects after launch. Moreover, many of the projects that we support, we did not build.
Let's be honest: We have seen a LOT of code. Some of it is truly duct taped together.
We constantly have tough conversations with clients – helping them weigh value and consequence to decide whether to patch, rework, or completely refactor. Many of these conversations could be avoided, and this article outlines how.
Software Development is Construction
If you have had the joy of remodeling a house AND building a software product, you may have already drawn this conclusion yourself.
The delays, hidden costs, miscommunication, wasted money...
But seriously, there are many underlying commonalities between software and construction.
The best way to avoid rework is to do it right the first time around and then expand the project scope over time.
The Investment
Time, money, energy. There is a lot that goes into building a new house. Projects can range from tens of thousands for smaller renovations to millions for building a dream house.
No matter the scope or budget, cutting corners will have long-term implications for the owners. The same is true for software. Certain enterprise applications are built over years, by teams of hundreds of engineers, and the total cost is literally tens of millions of dollars.
It Takes a Team
Both disciplines require a team of specialists working collaboratively to build something bigger than any one person could manageably build themselves. The more experienced and better managed teams will generally produce consistently higher quality work.
For a home, you need architects, structural engineers, plumbers, electricians, interior designers, landscape architects, and more.
In software, you need software architects, frontend developers, backend developers, designers, user experience specialists, and more.
Yes, one person can have multiple roles but it's best to have people play to their strengths.
Planning and Tracking is Paramount
Construction projects, like software, can quickly blow through budgets and destroy timelines. Spending the time planning early, and tracking progress and budget closely is key to any successful build.
In our experience, we believe that tight feedback loops will help you stay on track.
Yes, things will go wrong but you need to get them resolved in hours or days, not weeks. Identifying problem areas early and focusing efforts for quick resolution will lead to a dramatically improved project.
You May Need to Change Your Vision
You can't plan for all of the unforeseen, and you don't know what you don't know until you are deep in the weeds.
Cliche I know, but it is true. Software and Construction will both inevitably have unforeseen issues. Being able to pivot based on new insights is important to ensure project success. We have started projects for clients and realized that the solution was really 50% different than originally discussed.
These types of changes can be daunting, so it requires clear communication and deliberate about the pros and cons about staying on course and changing the vision.
Cutting Corners Will Come Back To Haunt You
No matter what you are building, cutting corners will always stick out. Can you build it cheaper? Sure. But often, it's a dangerous mindset to have because the upfront cost is only a fraction of the total project's success.
In real estate, spending more money upfront in the right areas can lead to an increase in home value and a quicker sale down the road. Similarly, in software, you have to be careful about the frameworks, integrations, and features that you build.
Is it really worth your time to build something when a strong open source option is available? Is it better to build 10 features halfway or to absolutely nail 3-4 core features?
The best way to avoid rework is to do it right the first time around and then expand the project scope over time.
Buildings Require Maintenance
An unmaintained building loses value, and will ultimately fall apart. The same goes for software.
Even if your software does not adjust, the world around it does. New operating systems, browsers, mobile devices, and even entire hardware categories will be created. Threats from bad actors will happen. Especially if you ignore security and patching your stack.
On the positive end, if you start to build a following online, then users and customers will request new features. As their expectations grow, you have the opportunity to grow your business.
What Does a Software Tragedy Look Like
We have heard some pretty horrible war stories from our clients, and we are often thrown into fighting pre-existing fires. A software tragedy can come in many shapes and sizes:
- Hacks and Exploits. The damage to these can be terrible, including leaking user data to the public. These occur when your codebase and hosting environment is not kept up-to-date.
- Points of Failure. From servers and databases to file systems, there are many points of failure in a modern software product. Not building these systems to scale can cause bad experiences and lead to downtime of your entire application.
- Systems Can't Scale. One of the biggest issues we deal with are limitations in software systems due to early, short-sighted architecture decisions. Without a forward-looking approach to grow and change, many systems need to be completely rebuilt in order to change or even to offer a modern user experience.
- Loss of Data. Data loss impacts 1 out of every 2 Americans yearly. Ok that statistic is fake, but this is a serious issue that can cause you to lose brand trust. Data loss can be caused by a plethora of issues, but ensure a robust backup policy is key to prevent long-term damage.
- Outdated Interface. If you don't iterate on your software design, it will eventually date itself. Like the painful banking applications we all know and loathe, nobody enjoys a painfully legacy experience.
So… where do you start? Who do you trust to ensure success?
How to Avoid a Software Development Tragedy
Finding the right software company to build your new product can in extreme cases, mean the difference between success and failure. In most cases, it impacts your customer satisfaction, value of investment, and long-term cost.
So… where do you start? Who do you trust to ensure success?
It can quickly become an overwhelming process, especially for non-technical leaders. Below are a few tips to help you find a good software partner for your next product:
- Due Diligence. Make sure the company has happy clients and successful projects. Review work examples and testimonials, but also see if you can get in touch with an existing or past client.
- Ensure Optionality. Trying to set all the requirements upfront will increase your chance of failure. You want to start and build optionality into your plan, so you can make changes without friction, change orders, or throwing away large chunks of work.
- Be Involved. Meetings should be consistent, from strategy through design, development, and testing. Be part of the process, don't overstep but stay informed.
- Align on Success. Make sure project requirements are clear, and make sure your software partner understands what dictates success for your project.
- Understand the Deliverables. It is important to understand what you are ultimately going to receive and where your investment is going.
Conclusion
Software is complex and the software landscape is always evolving.
The giant companies make it look easy – you open their app, tap a few buttons, and get the end result. The simple user experience masks the sheer amount of research, work, rework, and effort required to build projects.
We recommend that you find a software development partner who is flexible, has examples of past success, and can push you to really articulate your vision. The why is just as important as the what.
When looking to hire a software development company, we recommend that you: spend time on due diligence, ensure that your project is flexible, participate in meetings and discussions, align on what success means, and understand what will be delivered to you.