Like many companies, we were affected by last week's S3 outage. We were surprised, however, by the extent of the impact to our systems. It was a bit of a wake-up call, and we realized how much of a failure point S3 had become for us and how little we were doing to protected ourselves against S3 downtime.
HubSpot’s backend services are almost all written in Java. We have over 1,000 microservices constantly being built and deployed. When it comes time to deploy and run one of our Java applications, its dependencies must be present on the classpath for it to work. Previously, we handled this by using the maven-shade-plugin to build a fat JAR. This takes the application and all of its dependencies and bundles them into one massive JAR. This JAR is immutable and has no external dependencies, which makes it easy to deploy and run. For years this is how we packaged all of our Java applications and it worked pretty well, but it had some serious drawbacks.
CompletableFuture, and more) we couldn't wait to upgrade and start using it. A lot of companies our size don't make these types of upgrades, it's too hard or too risky is usually the thinking. But as you fall further behind, it just becomes harder and riskier, and eventually you end up stuck with no upgrade path. This accumulation of technical debt slows down the entire development organization so keeping our stack current is a top priority at HubSpot.