Why Do Huge Companies Such as Google Still Have Bugs in Their Products?

Why Do Huge Companies Such as Google Still Have Bugs in Their Products?
Image credit: MiBSi | Flickr

I often hear people wondering how a company such as Google -- with thousands of the world’s best engineers -- can still have so many bugs in its products. Are Google’s software developers simply not as good as everyone says they are? Is the company so poorly mismanaged that it can’t fix simple problems with web browser page layouts or email delivery systems?

The answer, of course, is that all companies accumulate technical debt as they grow. Even great engineering teams can “fall behind” on feature development and bug fixes because of the huge amount of maintenance work that accrues as code bases increase in size.

The work required to develop every new feature is not just limited to the code written specifically for that new feature, but it also involves all the automated software tests, quality assurance processes, code documentation, deployment processes and scalability concerns that need to be addressed to support that new feature. Such technical overhead tends to increase exponentially as the number of new features increases.

Related: Top Predictions for Hiring and Retaining Software Developers

Companies generally “learn to live with” certain low-priority bugs because fixing them is simply not as high a priority as paying off other, more critical technical debt. Giant profitable companies such as Google are fortunate to be able to absorb huge amounts of technical overhead, thanks to large cash stockpiles, patient investors and hordes of the world’s top engineers.

But startups (and most other companies) do not have this luxury. Many a promising company has collapsed under the weight of technical debt, finding themselves in a position where they are unable to move quickly enough to respond to changing business realities.

Startup CEOs and CTOs should cautiously manage the tradeoff between building new features and paying off their technical debt before it accrues too much interest. At Brainscape, we’ve been extremely careful to manage our technical debt, and we have learned many valuable lessons along the way.

1. Don’t open too many cans of worms.

When considering adding new features to your product, it is important to consult your engineers to fully understand the amount of ongoing work that will be required to maintain that feature. You should think of this maintenance cost in terms of the salaries of the engineers and managers whose time (and mental distraction) that this will require. Is the new feature really worth all the potential complexities and distractions that it could introduce later?

2. Consider an early code refactor.

If your company is like most startups, it has likely experimented with a variety of different features and user experiences before honing in on the right product setup. There is a good chance that the relics of these artifacts are still buried in your code, confusing every new developer who joins your team.

It is thus often a smart idea to re-write much of your code -- or at least “clean it up” -- before scaling the product further or hiring too many new engineers. This is especially valid right after you have raised money, while you have the luxury of a long cash runway.

3. Hire the right CTO.

Many early-stage startups begin with a co-founding “CTO” who is fresh out of college or a coding boot camp. This person usually has a great “hacker mentality” and is able to build features quickly, in an agile way, using a variety of ready-made prototyping tools and APIs. Such a skill set is often perfect for the needs of a modern early-stage lean startup.

Related: The 5 Non-Technical Skills Any Great Developer Needs in Order to Advance

Yet as the startup begins to mature into a real company, the number of scalability issues multiplies exponentially, and the speed at which the company can evolve its technical architecture becomes a huge determinant of its success. It is therefore extremely helpful to hire a CTO who has worked on at least one large development team, on a product with hundreds of thousands of lines of code, for at least two years.

There is no substitute for the smart engineering practices that are gained from such experience.

4. Do some things the hard way.

The right engineer does not just write (or manage) code the fast way, deploying features as quickly as possible. Instead, he or she considers the complete long-term implications of each feature. How will this feature affect the product’s loading time as the user base grows? How hard will it be to maintain as we continue to add new features?

The right engineer understands the proper tradeoffs between development speed, performance, scalability, stability, security, reliability and maintainability. The right engineer may initially take twice as long to develop a feature to avoid the risk that it takes 10 times as long to rewrite later. This skill of knowing where to draw the line only comes with experience.

5. Minimize developer turnover.

Every time a software developer leaves your team, he or she leaves behind “legacy code” that new developers are going to have to learn. This learning curve (and inevitable code rewrites of things that “the last guy” did “the wrong way”) is often a large time suck and a big source of technical debt. Be sure to take good care of your developers so you can limit your turnover!

6. Create team redundancies.

To reduce the technical debt created by potential developer turnover, it helps to ensure that at least two or more engineers are familiar with each piece of your code base. This can be facilitated by having a rotating division of responsibilities and/or by instituting a regular practice of pair programming or code reviews.

If your company is like most, there will likely be a constant compromise between the business and engineering sides. “Business guys” tend to push for faster growth and more features, with little appreciation for how pretty things look under the hood. Meanwhile, good engineers typically push for better technical solutions that make software more maintainable over time.

Finding the right balance between growth and “managing technical debt” is one of the biggest determinants of startups’ long-term success.

This article was written by a member of the AlleyNYC contributor network. AlleyNYC is one of the world’s largest innovation hubs, helping foster the growth of startups in its flagship location in New York City. Entrepreneur Media is a partner and investor in AlleyNYC. If you would like to learn more about AlleyNYC and how to apply for membership visit here.

Related: Need a Software Engineer? Here's How Much You Can Expect to Pay. (Infographic)