Writing a program is not very different from writing a novel. a program has to have a beginning and an end, it must be structured in a logical way, it must adhere to a set of strict conventions, and it has to have some imagination in dealing with the problem at hand.
The code released is a reflection of the personality of the writer, read any program and you’ll find hints about the writer’s interest in details, wether if he was interested in producing results regardless of the quality of the code, or if he was aware that the structure of the code behind the beautiful UI is just as important. wether he anticipated the problems that are certainly going to arise in the future, or if he was deferring these problems till later. wether he likes reading and follows the latest developments in the tech scene, or if he is locked in a different era.
Some may argue that releasing quickly is more important (business wise), in a world where being there first counts, where the network effect can destroy any chance of competition and introduce monopolies. I like to disagree, in contrast to it’s relatively small age, the history of the tech industry is full of examples of how this is so untrue.
MySpace is just one of many examples of how people overestimate the network effect. it was older than facebook, and it had a larger user base, it even looked better during the early days of facebook. yet it was plagued with UX & performance issues, without reading the code, it was apparent that it’s architecture and structure were not coherent. some companies with deep pockets try to hide these kind of problems by pouring money on infrastructure, more servers and bigger data centers, but that is only a way of hiding the problem not solving it.
Then came facebook, it had a simple design, it focused (back then) only on solving a single problem, putting the social life online. the site had a philosophy, it was not just another social network, and I’m sure that this feel would be apparent in the code base. in the end these traits are reflected on the experience and feel of the final product.
That is why so many of silicon valley’s successful CEOs were initially programmers, they had to be, a non-technical CEO would not understand the importance of clean organized code, he would only be interested in the outer look of the product. in the early days of a startup this would be a critical mistake, if the architecture and the core of the system are not designed to be expandable, maintainable, and modular, then most of the time will be spent in patching things up as opposed to expanding the system and introducing new features.
I’m not saying that a good software developer would never produce bad code, it happens, and he’d usually have a good reason why he did that, but a smart developer would never leave the code in a bad state for too long, he understands the importance of refactoring the code before it starts growing. once the code base reaches a certain age, it becomes much harder to organize. the cost really increases exponentially.
Clean code means maintainability, it is translated to better performance and coherent experience. which is the difference between successful and an unsuccessful business.