I briefly worked with a startup that has built their whole system using Python (though they use things like ElasticSearch, so they also run the JVM). The programmers at this startup are very intelligent, and very thoughtful. There are 4 main programmers. Their background is a mix: some of them were initially scientists, some were computer science engineers. They are all in their late 20s and early 30s. The startup began in 2011.
Because they are so thoughtful and talented, whenever they see a flaw in a 3rd party library, they give up on that library, and they try to write their own.
So for instance:
They tried using Chef for configuration, but they didn't like Ruby. Then they tried Ansible, but they found it immature. The tried Puppet, but didn't like that it had a central daemon. So they started writing their build/config system, which they released as open source. Their system has some unusual ideas, a heavy reliance on bash, and an emphasis on supporting a polyglot system. However, this took a lot of time that could have been directed at the specific needs of the startup.
They decided they would need a system of dependency injection. In Python it is common to configure some variables at the level of the module, but they felt this lead to tight coupling. They did not like any existing system for dependency injection for Python, so they wrote their own. They released this as open source. Their DI system borrows a lot of ideas from Angular. It is clever and they have long debates about how to make it better. But this also took time that could have gone to the specific needs of the startup.
They needed a framework that would allow them to serve a website out over Nginx. They reviewed all of the existing Python web/application servers. They found flaws in all of them: Zope, Pylons, Flask, etc. They decided to build their own. They based their work on Flask but they added a lot of their own unique ideas. They released it as open source. It has been a big effort and it is still missing certain features. For instance, they started off assuming that all of the pages of their site would require a login. When they eventually had to add in some pages that did not require a login, they had to re-work the way they were handling security and authorization. All of this has taken time away from the specific needs of the startup. And, of course, their software may have security flaws which they have not yet discovered. Although it is open source, I don't believe anyone else is using their software.
They decided they needed a way to enforce contracts on the structure of the documents moving through their system, and they wanted a system that could work almost exactly the same in Python and in Angular. So they built their own library for validating the structure of documents. They built out a whole vocabulary for the "types" in their system, using types which were generic enough that they could work in both Python and Javascript. It is an interesting system, but it takes at least 25% of the time of the most senior engineer. If they did not write their own system, he would have at least an extra 10 hours a week to put toward tasks that are specific to the needs of the startup.
They wanted to store JSON but they did not like any of the JSON document stores that were available in 2011/2012. They love PostGres. This was before PostGres had a JSON column type. So they decided they would store JSON in PostGres as a string in a TEXT column. They wrote a library that serializes and deserializes the string. They built this as a layer on top of SqlAlchemy. Their code is very clever: you can query the database with their ORM and you always get back objects, you never have to think about JSON as a string. In some ways, they have reinvented the idea of an "object database" that was popular in the late 1980s and early to mid 1990s. These are clever ideas, though it took time away from the actual needs of the startup.
I could go on. They wrote their own cache system, their own system for transforming data structures, etc.
They are thoughtful. When adding a new feature to one of their libraries, they have respectful debates that sometimes last 2 or 3 or even 4 hours. They release everything as open source. They are trying to help the Python community. But it adds up to a huge tax on their time, and it takes them away from the needs of the startup. The founder/CEO is not technical, and I think they often wonder why things take so much time.
With startups, it is especially true that "the perfect is the enemy of the good." Their perfectionist streak takes them away from the needs of the company. They pursue an ideal of absolute brilliance, though they often don't have the time they need to make their libraries as good as what they dream of.
Having worked with them, I've gained a new respect for the idea that startups should, as much as possible, just use what libraries they can find. All libraries have their quirks, but it is an illusion to think it is cost effective to spend your time re-inventing what's out there.
Because they are so thoughtful and talented, whenever they see a flaw in a 3rd party library, they give up on that library, and they try to write their own.
So for instance:
They tried using Chef for configuration, but they didn't like Ruby. Then they tried Ansible, but they found it immature. The tried Puppet, but didn't like that it had a central daemon. So they started writing their build/config system, which they released as open source. Their system has some unusual ideas, a heavy reliance on bash, and an emphasis on supporting a polyglot system. However, this took a lot of time that could have been directed at the specific needs of the startup.
They decided they would need a system of dependency injection. In Python it is common to configure some variables at the level of the module, but they felt this lead to tight coupling. They did not like any existing system for dependency injection for Python, so they wrote their own. They released this as open source. Their DI system borrows a lot of ideas from Angular. It is clever and they have long debates about how to make it better. But this also took time that could have gone to the specific needs of the startup.
They needed a framework that would allow them to serve a website out over Nginx. They reviewed all of the existing Python web/application servers. They found flaws in all of them: Zope, Pylons, Flask, etc. They decided to build their own. They based their work on Flask but they added a lot of their own unique ideas. They released it as open source. It has been a big effort and it is still missing certain features. For instance, they started off assuming that all of the pages of their site would require a login. When they eventually had to add in some pages that did not require a login, they had to re-work the way they were handling security and authorization. All of this has taken time away from the specific needs of the startup. And, of course, their software may have security flaws which they have not yet discovered. Although it is open source, I don't believe anyone else is using their software.
They decided they needed a way to enforce contracts on the structure of the documents moving through their system, and they wanted a system that could work almost exactly the same in Python and in Angular. So they built their own library for validating the structure of documents. They built out a whole vocabulary for the "types" in their system, using types which were generic enough that they could work in both Python and Javascript. It is an interesting system, but it takes at least 25% of the time of the most senior engineer. If they did not write their own system, he would have at least an extra 10 hours a week to put toward tasks that are specific to the needs of the startup.
They wanted to store JSON but they did not like any of the JSON document stores that were available in 2011/2012. They love PostGres. This was before PostGres had a JSON column type. So they decided they would store JSON in PostGres as a string in a TEXT column. They wrote a library that serializes and deserializes the string. They built this as a layer on top of SqlAlchemy. Their code is very clever: you can query the database with their ORM and you always get back objects, you never have to think about JSON as a string. In some ways, they have reinvented the idea of an "object database" that was popular in the late 1980s and early to mid 1990s. These are clever ideas, though it took time away from the actual needs of the startup.
I could go on. They wrote their own cache system, their own system for transforming data structures, etc.
They are thoughtful. When adding a new feature to one of their libraries, they have respectful debates that sometimes last 2 or 3 or even 4 hours. They release everything as open source. They are trying to help the Python community. But it adds up to a huge tax on their time, and it takes them away from the needs of the startup. The founder/CEO is not technical, and I think they often wonder why things take so much time.
With startups, it is especially true that "the perfect is the enemy of the good." Their perfectionist streak takes them away from the needs of the company. They pursue an ideal of absolute brilliance, though they often don't have the time they need to make their libraries as good as what they dream of.
Having worked with them, I've gained a new respect for the idea that startups should, as much as possible, just use what libraries they can find. All libraries have their quirks, but it is an illusion to think it is cost effective to spend your time re-inventing what's out there.