Hello, World

Grace Wang
2 min readFeb 8, 2019

--

Hi! My name is Grace. I’m a software engineer who lives and works in San Francisco. I work on all things backend (and occasionally frontend), and am especially passionate about developer productivity. In the past, I’ve worn a lot of engineering hats — from solutions engineer, to engineering manager, to tech lead.

I’ve also had the somewhat unique experience of working at two companies that deliver on-premise, enterprise software (Palantir and PrimerAI). If you haven’t developed on-premise software, suffice it to say that having multiple deployments with versions and configurations that can vary wildly introduces a number of complications. Not handling these effectively typically results in either maintaining a small army of solutions engineers, or building a great deal of deployment tooling. Some of the questions that arise when developing and deploying on-premise software are:

  • How to balance observability with security? For example, the environment for each customer may be cloud-based, but in its own virtual private cloud (VPC). Granting every developer (potentially thousands) access to dozens of VPCs is highly undesirable from a security perspective. But so is having to relay every incident through a solutions engineer who isn’t familiar with recent code changes, and may have to debug dozens of services.
  • How to manage service version compatibilities? As much as we would all like to build a perfect service API from the outset, in practice this rarely happens. If each deployment has its own upgrade schedule, then compatibility ranges for services and their dependencies must be maintained by developers, and respected by the automated deployment tooling. Hosted deployments usually don’t have to worry about this — a breaking change, such as the removal of an API endpoint, is only executed once developers have confirmed that all dependent services have switched away from the deprecated endpoint.
  • What additional changes need to be made to developer practices or deployment configuration to optimize for on-premise software?

To answer these questions, over the next few weeks I’ll be publishing a series of blog posts on the following topics:

  1. Why immutable builds are critical when developing on-premise software
  2. Need a stable, easy-to-manage on-premise deployment? Just snapshot your hosted environment
  3. Developing on-premise software? Design for multitenancy from the start. Trust me, it’s worth it
  4. Why you should pretend service logs don’t exist
  5. TBD based on feedback and questions!

Want to see another topic? Leave a comment below!

--

--

Grace Wang

Dev, perpetually “starting something new” 🙂 Prev @Palantir, @PennEngineering