136 karma · joined October 1, 2011
Scaling out an api server is not resilient enough, and there needs to be a queue-based system fronting your web hooks so they aren't dropped
Runnable let's you have end-to-end (full-stack) environments with every branch. The minute a branch comes up, you have an environment. This includes a clone of your database
We don't have access to the same APIs with just a personal accout
One of our key lessons is being able to dispose and rebuild your infrastructure on a daily or weekly basis so leaks don't destroy your environment.
We recycle customer environments in Runnable, on a regular basis and its completely transparent to users
1) You don't have to re-configure your environment variables and 3rd party APIs for each branch on Runnable. Every branch runs in the same sandboxed environment with the same env variables and 3rd party services. With the help of an HTTP proxy and a dynamic DNS server, we can route traffic to the right set of containers for the branch you want to test.
2) Runnable is built on Docker, which means all your configuration files and the way your containers are run is non-proprietary
3) You can connect arbitrary branches with each other for testing. So if you have a feature branch on a web server, and a feature branch on an api server - both can be connected easily through our web interface. This allows for cross-branch testing. Underneath the hood, we swap the IP address to connect the right containers together.
4) Our environments spin up much quicker than Heroku's. We build and run on the same machines so there are no network transfers and we can utilize build cache better.
5) Databases clone instantaneously with Runable, versus waiting minutes (depending on size). This because our build system applies Copy-on-Write to database containers
6) You can run end-to-end integration tests as your code is being pushed to a branch. Heroku only creates an environment when you're done coding and a pull request is open
So it becomes very easy to test schema changes and migrations with this approach
You want the opportunity to work on a wide array of problems so you build a repertoire of solutions and insights that can be applied to various problems.
Being a full-stack engineer is a great place to start, but it's limiting because you never gain enough depth beyond plugging together front-end, back-end and off-the-shelf components.
Instead, you want to rotate between various roles so you can focus on different areas. This way you can understand the pitfalls and best practices of certain systems (like infrastructure, queues, machine learning, angular, etc).
Yes, you can run Tutum on AWS, but why? When products can't substantially differentiate themselves against AWS, the customer will choose AWS. Customers don't want to be stuck in choice paradox.
Every standard or abstraction can be unbundled into multiple standards or abstractions. But at the end of the day, what wins is something that's simplest to the operator
What is the trade-off between that, and the added complexity in understanding all the different ways you can program something?
IMO, developers want a simple and standardized model to build applications on operating systems so they don't have to care about the internals.
This article represents a marginalized view by the larger industry as a whole.
But this is a trade-off. The real benefit comes in simplifying the programming model and not forcing developers to read through manuals figuring out how to flip a bit on a hard drive. Instead, they can leverage open-source and libraries that rely on that standardization to deliver most of the value (with a small perf hit)
Abstractions only create design complexity when they are applied incorrectly. Abstractions should scale horizontally across a layer of the software stack (VMs, Storage - NFS, APIs, etc). If you're create a single-use abstraction, it's not really an abstraction but a complexity
For highly scalable systems, the perf trade-off is just a matter of spinning up more VMs.
The higher-order benefit is you can expect your operating system and VM to behave the same, no matter what
The foundation of computing is based off abstraction - using layers and interfaces to hide complexity, so developers can focus on higher-order problems.
This article argues against abstractions citing security, performance and cost. But time and again it has been shown that most costly component in software is human time - and simplifying the underlying architecture is worth the trade-offs
In this case, your product may not be valuable without a lot of users, customers or cars .. You need to spend to get to critical mass, but I'm sure it's important to articulate a plan on why your business becomes profitable from that point onwards.
Too often, there isn't a tipping point or that tipping point is very hard to reach and companies never become profitable
Today, if you make a phone call and a computer operator picks up, the experience is not as nice as it could be. In 50 years, it may become indistinguishable from talking with a human.
Similarly, a google search may become more intelligent. Facebook is already going this way with Project M.
Calling a cab via uber may result in a software-driven car picking us up. There is no evidence this kind of intelligence will threaten humans. It's just a tool.
Humans are in the business of solving problems, AI helps us solve problems. Killing us is not solving a problem
No other company has that kind of volume of data and heuristics
Yes, I realize it can be used for other things. I'm not sure if there is value in those things.
Clearly, there is not enough education about privacy and how your data is being used to extract money from your pockets.
But when it comes to agility, yes, it's more about improving upon (or finding) the value proposition of that product.
If uber could cut down the time it takes to find a car from 5 minutes to 1 minute, wouldn't that be better for everyone?
How does a company on Sandstorm compete with a modern SaaS company that can change an algo behind-the-scenes and instantly improve experience?