On Quora someone asked, “Do teams from Google and Facebook use TDD to write software? If yes, what approximate percentage of teams are doing that?“, to which Jon Orwant, Google Research Director, answered that Google barely registers on the TDD scale. He states that TDD is rarely used. Now, if you are in the enterprise or conventional business software development field, you hear about TDD all the time as the path to software quality. Not the only path, but one of the essential tools to get to better quality. Obviously, companies like Google shows that alternatives exist.
Another question asked, “What methods does Google follow to make sure that they hire the best and the brightest so the next startup doesn’t overtake them in AI, machine learning, etc.?” to which Andrew McGregor, Site Reliability Engineer, stated that a startup is not in the same league as Google. I see a similarity between a small software development team in a large conventional company and a startup. Like a startup, the small software team has to start from the ground up. They may want their new system to work like Google’s, but there is a huge mismatch. Yet, it only has to be good enough for that environment anyway.
That is similar to another question, “What are the most common misconceptions about big data?” in which Andrew says that one mistake is to think you have big data. He is right. Although you may be dealing with millions of rows of data, or a few billion, that is not the same scale as Google. I would even make the case that you should take data and routinely cut it down. Reduce your data and streamline rather than create a behemoth with built-in waste.
A key difference between a company like Google and a conventional business is that Google builds their own servers. That is not the same meaning of build your own most people use. When engineers at conventional businesses say they built a computer, they mean 1 of 2 things: 1) They ordered it from DELL or HP, chose hard drive, memory, and CPU online with their choice of operating system. 2) They connected major pieces (hard drive, memory, CPU) together like Legos. Google and a few others do the Lego thing but in a way that is more like electrical engineering than out-of-the-box plug-and-play.
You will notice in the following image which came from Andrew McGregor’s post about “Why doesn’t Linux provide a GUI for configuring stuff like DNS & DHCP while Windows server do? Why would anyone choose Linux over Windows servers?” that the servers are bare, straight up machines with no aesthetics. No identifiable DELL, HP, or Lenovo chasis. Straight up Google Borg.
The differences become more pronounced when you learn that companies like Google and Microsoft sometimes have more than one IT department. Google appears to have 3 of them and none of those 3 deal in making or managing the search engine. Then you see that software/hardware types at big tech think differently. Rather than quickly retort, “Why don’t you do it the same way as everyone else?”, they tend to think, “what if there is a much, much better way to do something?” I noticed that in one of Andrew’s answer to, “People here ask a lot about C++ for High Frequency Trading. But if speed is so important to these places why don’t they write their code in Fortran or Assembly?”
Okay, let’s end this where we started. The question is, “What are some arguments against unit testing?” to which Andrew ponders the complete efficacy of unit tests. Unit and integration tests however is another story. Also, tune into, “Why do some developers at strong companies like Google consider Agile development to be nonsense?”