Application Abstraction: Unlocking the Next 6X in Development Velocity at Intuit (Part 2)

Bala Chandrasekaran
Intuit Engineering
Published in
5 min readMay 17, 2022

This blog post is co-authored by Intuit’s Bala Chandrasekaran, Principal Product Manager, Todd Ekenstam, Principal Software Engineer, and Edward Lee, Chief Architect, Development Platform.

In the first installment of this two-part blog, we described our strategy for unlocking the next 6X development productivity at Intuit for financial products and services built and operated on our Kubernetes-based development platform, such as TurboTax, QuickBooks and Mint.

In this post, we’ll take a deeper dive into our plans for accelerating development productivity by building an Intuit Application Abstraction on top of our platform to support all workloads. Such an abstraction layer would translate every need of an application into its respective compute, network, persistence, observability, build and deployment configurations.

Intuit Application Abstraction

Driving Development Velocity with Application Abstraction: Phase One

In our first phase of implementation, we’ll enable Intuit developers to define a stateless web service in terms of application or business needs.

Stateless Microservices: Intuit’s developer portal already provides a one-stop experience for creating, discovering, or onboarding services. It’s backed by a configuration database of all Intuit assets that serves as a system of truth for governance, compliance, and cost-tracking. Our development platform provides multi-tenancy across hundreds of teams. It can track infrastructure usage patterns and networking between services at any point.

In phase one, we’ll significantly enhance our platform capabilities with a focus on several critical areas for abstraction:

1. API Access

  • First, developers will be able to define the API endpoint by simply specifying whether the API consumers are internal or external to Intuit. This will free them from identifying, configuring, and managing the right underlying resources, such as Ingress, application load balancers, proxies, and gateways.
  • Second, developers will be able to quickly identify existing services from the developer portal as clients or dependencies of any particular service. The abstraction will automatically configure the necessary networking connectivity across cloud accounts, virtual private clouds, or Kubernetes clusters.
  • Third, networking will be fully transparent to developers. The abstraction will inject a sidecar to the application pod(s) and configure networking policies accordingly. The developer portal will dynamically track different services through deletion and version upgrades to maintain the desired connectivity between services.

2. Persistence Needs: At Intuit, we have data stores accessible via HTTP API calls and those via TCP connections (Read more about our Persistence strategy here). These data store assets will be available in the developer portal to choose from for the service. Intuit Application Abstraction will configure the necessary cloud networking infrastructure to enable a secured and seamless flow of network traffic and to manage AWS IAM (identity and access management) policies and updates for cross-account access to data stores. Project Keiko IAM manager already creates and manages a default IAM role for each service that can be used with AWS IRSA (IAM role for service account).

3. Operational Needs: Abstraction will simplify critical Day-2 application needs, such as progressive delivery, integrated golden signals, and Intuit-specific tiers of disaster recovery (DR), as measured by metrics such as MTTR (mean time to recovery). Today, stateless services are statically assigned to underlying namespaces and clusters. So, activities like debugging or monitoring require developers to know the particular namespace and cluster that hosts the service. With abstraction, we’ll be able to deliver a clusterless workspace with support for multiple development environments, enabling services to grow beyond a single cluster and achieving use cases such as inter-region disaster recovery, transparently.

4. Resourcing and Auto-Scaling: We have a unique opportunity, as an end-user of cloud-native technology, to strike a balance between application resource needs, service-level agreements (SLAs), and cost budgets using abstraction. We will achieve that by using both historical and real-time operational data from services to size and to continually adjust application container resource requirements. We plan to deliver this at different levels of maturity, as follows:

  • Level-1: We’ll leverage historical data on pod-level resource utilization and Kubernetes configurations across 2,000 services to create service categories. For example, we’ve observed that 44 percent of our services could fit nicely into single, pre-defined scaling configurations that already employ best practices for availability within cost budgets.
  • Level-2: The abstraction will right-size application containers across different stages of service, hours of the day, or day of the week, to achieve more significant cost savings. We’ve observed that a non-trivial percentage of application pods have <10 percent average CPU utilization. We will aim to auto-tune resource needs based on CPU utilization because undersizing pod-for-CPU requests or limits only throttles (and does not kill) the pods.
  • Level-3: We aim to achieve dynamic runtime resource sizing based on applications’ memory utilization or custom metric.

Solving Hard Problems to Unlock the Next 6X in Productivity at Intuit

As an early adopter and a major contributor to cloud-native technologies, and related best practices, we’re committed to solving hard problems for developers building and operating products on a Kubernetes-based development platform here at Intuit. As we do that, we will be sharing our learnings with the larger developer community.

We’re proud of our progress so far in laying the strong foundation for application-centric abstraction. We achieved this in collaboration with the cloud native community on innovative projects that abstracted underlying infrastructure components. And now we’re excited to continue our journey here at Intuit to unlock the next 6X in productivity by building an Application Abstraction layer on top of our platform.

If you’re also inspired by solving hard problems, please consider joining our team! To learn more about career opportunities at Intuit, visit here and take a moment to join our talent community.

And, if you’re attending KubeCon/CloudNativeCon Europe 2022 (5/16–20) this week, we are, too! You can learn more about our Kubernetes-based development platform, and our contributions to cloud-native technology innovation in a variety of sessions throughout the week at the main conference, and co-located events (GitOpsCon Europe, Kubernetes AI Day Europe).

--

--

Bala Chandrasekaran
Intuit Engineering

Platform Product Management @ Intuit. Curious about cloud-native technologies and data-intensive applications