1,097 karma · joined November 14, 2017
I think there's always been a push/pull of "fat base images" versus "install everything every time" - It's obviously subjective, but I think it's more important to run the tests on every commit than it is to start the environment from scratch.
It's also not necessarily mutually exclusive, you could have a "staging branch" where you make something that looks a lot like production and then re-run end-to-end tests there, while running the per-branch tests with this method to avoid slowing down developers.
The three big differences are:
1. Docker doesn't deal with running processes (like postgres or redis), only the filesystem state
2. Docker doesn't have enough isolation, so you'd probably need to run it within qemu or firecracker for compliance in bigger teams
3. Docker-in-docker is still pretty painful, if you need to do anything nonstandard like change the size of /dev/shm, access /dev/kvm, or load kernel drivers, it'll take custom configuration.
It's built so that you can do "start": "concurrently 'greenjs start -upstream-addr :8000' 'rails dev'" or equivalent for another web framework
For an example, it handles stripe webhooks when users change their pricing tier - if you drop that message, users would be paying for something they wouldn't receive.
- The service mentioned (now called https://webapp.io ) eventually made it into YC (S20) and still uses postgres as its pub/sub implementation, doing hundreds of thousands of messages per day. The postgres instance now runs on 32 cores and 128gb of memory and has scaled well.
- We bolstered Postgres's PUBLISH with Redis pub/sub for high traffic code paths, but it's been nice having ACID guarantees as the default for less popular paths (e.g., webhook handling)
- This pattern only ever caused one operational incident, where a transaction held a lock which caused the notification queue to start growing, and eventually (silently) stop sending messages, starting postgres with statement_timeout=(a few days) was enough to solve this
Previous discussion: https://news.ycombinator.com/item?id=21484215
Happy to answer any questions!
How can this be the case when lumber prices are surging in Canada as well? You'd expect that if the price was in response to tariffs then the origin country would be flooded with supply?
Lots of people need help with optimizing "npm run build" time, so I built this analyzer - it looks at source lines of code (versus the bundled size for something like bundlephobia) so that you can tell what packages are causing your lint/build/install/... to take so long.
It's open source: https://github.com/layer-devops/node-dir-stat
Ironically the newer apps system does have fine grained permissions, but seems more intrusive because of the strange wording
[2] https://github.community/t/why-does-this-forum-need-permissi...
In my line of work [1] I talk to a lot of developers about productivity, here are some questions about what you've built in the context of that experience:
1. I think (as you mentioned) "number of commits" or "number of pull requests" merged are proxies for productivity at best. Most teams that I've seen care more about "are the tasks for the epic being chipped down" - is that something your tool can help estimate as well? The progress bar for the epic? It'd be nice to get a table of the metrics and where they come from.
2. In the same vein, "scrum with epics" might not always be how teams decide on units of work, do you support other methodologies?
3. You mention deployment frequency a lot, but that seems tangent to developer productivity - Isn't getting things deployed quickly mostly for the benefit of the product folks? (getting feedback faster)
4. How does maintenance work fit into this? Does a developer who spends most of their time refactoring show up with "worse metrics" than someone pushing copy changes to the landing page?
[1] CEO @ https://layerci.com (YC S20)
For an interesting middle ground, I'd recommend one of our investors, https://fundersclub.com - they let you get in early on YC deals as an individual, and stay connected / give advice to companies you end up being an LP in
RDS is an excellent example of a cloud-hosted service that implements an open standard. Even if your production uses RDS, you could still reproduce bugs somewhat easily using a postgresql docker container seeded with something similar to production data.