Behavioral Questions

Table of Contents

Thinking outside the box

When was the last time you thought “outside the box” and how did you do it? Why?

Situation: In our firm, we have well defined technical path and management path. However, there is no clear pathway for a techical engineer to become manager or choose management path. It is a catch 22 situation where one has to have people mgmt experience to become manager but one gets the experience only after becoming manager.

Opportunity: My team was growing very fast and within 5 years, we grew from 2- 3 people to over 50 team members. Hiring managers, training them, ensuring they align to our own culture was very time consuming process. I floated an idea with my superiors about why cant we come up with a process to train technical engineers who are interested in management path? My leadership was very supportive and they said they are very open to listen to my idea.

Action: As first step, I reached out to HR and collected the job roles/responsibilities and skills required for management and techncial career path. I also identified the kind of coachign and internal training sessions organized for managers and found equivalent trainings outside. We had many subscriptions such as Harward ManagerMentor and other technical libraries.

I created a new role called FPM (Future Project Manager), defined the roles and responsibilties requird for first line manager, identified trainings, timeline etc. and socialized with my leadership. They were very enthusiastic and even joked that I have come up with a structured approach for my succession planning. I then ran the idea with HR along with my leadership, and they OKayed this idea.

Result: I made a presentation on this to my team and invited their feedback. Some where skeptical because this is not formal role and feared what happens after an year or so. There were a couple of engineers very keen to explore this further. I made them poitn of contact to lead projects, point of contact for communciation and gave them ownership and responsibilties. At the end of 6 months, we could fast track them to managers and the idea got larger support across other teams. This got visibility all the way to senior leadership and the HR dept took over this framework and expanded the concept. I must confess that I could not have pulled this by myself. I received excellent support from my leadership and HR.


Situation: The team I was managing was more into CPE or something called sustaining engineering. The main focus was to fix bugs and address customer issues and limited involvment in new product design. In all hands and other company wide activities, the product design teams used to garner all the limelight and my team developed a perception that they are second citizens.

Opportunity: There was serious motivational issue within the team. I wanted to ensure my team is proud of what they are doing, they are making huge difference and lack of visibility is no way limiting the importance of their work. I knew this well. I believed this. I wanted my team to know the same.

Action: I started socializing with product management teams and engineering management and asked for a slot in their monthly meetings/weekly team meetings. I brought my team members to this meeting and used it as a platform to explain customer problems and scenarios. It was interesting to know that many of the engineering teams had very limited visibility to real customer problems and pains.

Result: The customer scenarios, troubleshotting pains, simiplicity and usability issues and how the team handled these while facing wrath of angry customers made great story. There was excellent support and renewed respect for our team and we started getting lots of visibiltiy in leadership meetings. More importantly, team morale went up and they starte believing in their work and its impact. It was a very satisfying end result for me.


Situation: Just a few months ago, while at Mphasis working on the "Bedrock Knowledge Base with Serverless Vector Search Implementation" project, we faced a perplexing challenge. We were aiming to build a highly scalable and cost-effective knowledge base search solution using Amazon Bedrock and OpenSearch Serverless. The initial architecture involved directly indexing the embeddings generated by the Bedrock Titan model into OpenSearch Serverless. However, we quickly realized that the indexing process was becoming a significant bottleneck and a major cost driver. OpenSearch Serverless, while scalable, was proving to be surprisingly expensive for frequent indexing operations, particularly with the high dimensionality of the Titan embeddings. Standard approaches like optimizing the indexing batch size or tuning OpenSearch Serverless configurations weren’t yielding satisfactory results. The project timeline and budget were at stake.

That’s when I started thinking "outside the box". I realized we were treating the problem solely as an OpenSearch indexing challenge. Instead, I started exploring alternative ways to reduce the frequency and volume of data being indexed.

Action: Here’s what I did:

    1. Content Deduplication and Summarization: I analyzed the source documents and discovered a significant amount of redundancy and irrelevant content. Many documents contained overlapping information or boilerplate text. I implemented a pre-processing pipeline using NLP techniques to:
    • Deduplicate near-duplicate documents.
    • Summarize long documents to extract the key information. This

    significantly reduced the overall volume of data being indexed.

    1. Selective Embedding Generation: Instead of generating embeddings for the entire document corpus, I explored generating embeddings only for the most relevant sentences or passages within each document. This required implementing a sentence scoring mechanism to identify the sentences that were most informative and representative of the document’s content. For example, we would give more importance to action verbs or key nouns.
    1. Embedding Caching: For frequently accessed documents, I implemented an embedding caching layer using Amazon ElastiCache. This allowed us to avoid regenerating embeddings for documents that had already been processed.

Result: The result was dramatic. By combining these three techniques, we were able to reduce the indexing volume by over 70%, which translated into a significant reduction in OpenSearch Serverless costs. The indexing throughput also improved considerably, allowing us to meet the project timeline. Even better, the recall did not decrease as the right data was chosen to be used to create embeddings. We met all project milestones.

I was extremely happy with this outcome. It demonstrated the power of challenging conventional assumptions and thinking creatively to solve complex problems. It also highlighted the importance of understanding the underlying data and identifying opportunities to optimize the entire workflow, not just individual components.


Conflict Management

Tell me about a time you disagreed with a coworker’s idea on a project you were both working on together. How did you express your opposition and what happened?

Situation: During the implementation of a new data pipeline for a fraud detection model at NetApp, I was working closely with a senior data engineer. We had different ideas about how to handle real-time feature generation. The coworker, let’s call him Mark, proposed using a complex, micro-batching approach with Apache Spark Streaming to process incoming transactions. This was his area of expertise, and he was confident it would provide the necessary throughput and low latency.\n\nHowever, I believed that a simpler approach using Kafka Streams would be more efficient and maintainable for our needs. My concerns with Mark’s proposal were:

    1. Complexity: Spark Streaming, while powerful, introduced significant complexity to the pipeline, increasing the risk of bugs and making it harder to debug and maintain in the long run.
    1. Overkill: I felt that Spark Streaming was overkill for our specific requirements. Kafka Streams, being a lightweight stream processing library, would be sufficient for our expected transaction volume and latency targets.
    1. Operational Overhead: Spark Streaming required a dedicated Spark cluster, adding to the operational overhead and cost of the infrastructure. Here’s how I expressed my opposition constructively:
      1. Active Listening and Understanding: I started by actively listening to Mark’s explanation of his proposal and trying to understand his rationale. I asked clarifying questions to ensure I fully grasped his approach and the benefits he envisioned.
      1. Respectful and Data-Driven Opposition: I didn’t dismiss his idea outright. Instead, I presented my concerns in a respectful and data-driven manner. I prepared a short presentation outlining the pros and cons of each approach, including: Performance benchmarks from similar use cases. Estimated cost and operational overhead for each approach.\n * A comparison of the complexity and maintainability of each approach.
      1. Focus on Project Goals: I emphasized that our primary goal was to build a reliable and efficient data pipeline for the fraud detection model, and we should choose the approach that best achieved that goal. I reframed the discussion from a personal preference to what solution best benefited the organization.
      1. Collaborative Problem Solving: I proposed that we conduct a small-scale A/B test to compare the performance of the two approaches using real-world transaction data. This would provide concrete evidence to support our decision. What happened: Mark was initially resistant to my concerns, as he was confident in his expertise with Spark Streaming. However, after reviewing my presentation and discussing the pros and cons of each approach, he agreed to conduct the A/B test.

    Result: The results of the test showed that Kafka Streams achieved comparable performance to Spark Streaming with significantly lower latency and resource consumption. The A/B test was not an adversarial process, but rather an investigation of the facts. \n\nBased on the test results, we collectively decided to proceed with Kafka Streams for the real-time feature generation pipeline. Mark, despite his initial preference, supported the decision and actively contributed to the successful implementation of the pipeline. This situation reinforced the importance of respectful communication, data-driven decision-making, and focusing on project goals when collaborating with coworkers. It also taught me that even when you strongly disagree with someone’s idea, it’s important to listen to their perspective and be willing to compromise if the evidence supports it.

Manager Disagreement

What would you do if your manager gave you negative feedback on the way you approached a problem?

Situation: If my manager provided negative feedback on my approach to a problem, my immediate reaction would be to listen attentively and resist the urge to become defensive. I view feedback as a valuable opportunity for growth and improvement, especially from someone with more experience and a broader perspective within the organization. Here’s a breakdown of my likely actions:

    1. Active Listening and Clarification: I’d focus on fully understanding the feedback. I’d ask clarifying questions like:
    • “Can you give me specific examples of what I could have done differently?”
    • “What were the key concerns with the approach I took?”
    • “What alternative approaches would you have recommended?” It’s crucial to understand why my manager felt my approach was suboptimal, rather than just what they disliked.
    1. Acknowledgement and Appreciation: I would explicitly thank my manager for providing the feedback. Acknowledging their effort and demonstrating my openness to improvement creates a positive environment for future conversations.
    1. Self-Reflection and Analysis: After the conversation, I’d take time to reflect on the feedback. I’d analyze my approach to the problem, considering the points my manager raised. I’d ask myself:
    • “Did I miss any crucial information or context?”
    • “Were there biases or assumptions that influenced my decisions?”
    • “Could I have consulted with others or sought out different perspectives?”
    1. Seek Further Input (If Needed): Depending on the nature of the feedback, I might seek input from other colleagues or mentors to gain additional perspectives on the situation. This helps to ensure a well-rounded understanding and prevents reliance solely on my own or my manager’s viewpoint.
    1. Develop an Action Plan: Based on my reflection and any additional input, I’d develop a concrete action plan for how I would approach similar problems in the future. This might involve:
    • Researching alternative problem-solving techniques.
    • Improving my communication or collaboration skills.
    • Seeking out training or mentorship in specific areas.
    • Building a checklist of items for each problem.
    1. Follow-Up and Implementation: I’d schedule a follow-up meeting with my manager to discuss my action plan. This demonstrates my commitment to improvement and allows them to provide further guidance and support. I would then actively implement the action plan and monitor my progress.
    1. Seek Future Feedback: I’d proactively seek feedback from my manager on my subsequent projects to ensure I’m consistently improving and applying the lessons learned. It’s not a one-time event but more a consistent application of feedback.

    In essence, my approach to negative feedback is to view it as a constructive learning opportunity, actively seek to understand the rationale behind it, and develop a concrete plan to improve my skills and approach in the future.

Creativity in problem solving

Tell me about a problem that you’ve solved in a unique or unusual way. What was the outcome? Were you happy or satisfied with it?

Situation: At CBRE/Google, while optimizing the Kubeflow Pipelines deployment process for a set of complex, multi-stage machine learning models on Vertex AI, we were facing a recurring issue of slow pipeline execution times. The standard approach would have been to profile the pipeline steps, optimize individual components, and scale up resources, and we tried that initially. However, the profiling revealed that a significant bottleneck was the metadata synchronization across different pipeline components. Vertex AI Pipelines relies on a metadata store (backed by a database) to track artifacts and dependencies between pipeline steps. In our case, due to the high volume of data and complex dependencies, the metadata synchronization was becoming a major bottleneck. The “usual” solution of scaling up the metadata database instance was not viable due to cost constraints and potential scalability limitations of the underlying database architecture.

Action: The “unusual” solution was to use an eventually consistent caching mechanism. Instead of directly scaling the Vertex AI Metadata Service, which was cost-prohibitive and had limitations, I explored a novel approach: introducing an in-memory caching layer directly within the Kubeflow Pipeline itself. This caching layer would sit in front of the metadata store and serve as a fast, temporary storage for frequently accessed metadata. Here’s the unique approach:

  • Leveraged Pipeline Component Context: Kubeflow Pipelines provides a component context that allows sharing data and state between components. I used this context to create a distributed in-memory cache using Redis deployed as a separate microservice within the pipeline execution environment. Redis had to be installed to the image, and it was added as an initContainer to avoid network congestion. It also automatically scaled depending on load.
  • Implemented a Custom Metadata Cache Client: I developed a custom Python client that intercepted metadata read requests from the pipeline components. This client first checked if the requested metadata was present in the Redis cache. If so, it retrieved the metadata from the cache, bypassing the need to access the metadata store. If the metadata was not in the cache, the client retrieved it from the metadata store, stored it in the cache, and then returned it to the component.
  • Cache Invalidation Strategy: I implemented a cache invalidation strategy to ensure data consistency. When a pipeline component modified the metadata (e.g., by creating a new artifact), it would invalidate the corresponding entry in the Redis cache. This prevented stale metadata from being served from the cache. The pipeline code was changed so that if a particular object’s metadata changed, it would invalidate the cache. This required making changes to different portions of the pipeline.

Result: The outcome was significant: We achieved a 30-40% reduction in overall pipeline execution time, especially for pipelines with a high degree of data sharing and complex dependencies. This also resulted in substantial cost savings due to reduced resource consumption. More importantly, the solution was scalable without relying on scaling up the underlying Vertex AI infrastructure, proving it was significantly more efficient. The outcome, as a function of time and cost, was much lower than it would have been otherwise.

Yes, I was very satisfied with this solution. It was a challenging problem that required thinking outside the box and leveraging my deep understanding of Kubeflow Pipelines, Vertex AI, and distributed caching. It also demonstrated the value of optimizing not just individual components but also the underlying infrastructure that supports the pipeline execution. The approach itself proved transferable: we subsequently applied this caching strategy to other data-intensive pipelines, achieving similar performance gains.

Values and Personality

Describe a time when you were asked to perform a task or spearhead an initiative that went against your values. What did you do? What was the outcome?

Situation: At Google, while working on Kubeflow Pipelines for a large language model (LLM) serving application, I encountered a situation where the team was pushing for aggressive cost optimization by severely limiting the resources allocated to model monitoring and explainability components.

The rationale was that these components were adding significant latency and cost to the inference pipeline, and reducing their footprint would dramatically improve the overall cost-efficiency, a key metric for our OKRs. This initiative went against my deep-seated belief in responsible AI and the importance of model transparency, especially for high-stakes applications like LLMs.

I felt that drastically reducing monitoring would essentially fly blind, making us unable to reliably detect and address issues like data drift, bias amplification, or unexpected failure modes in production, potentially harming users. At an IC6 level, I recognized the strategic implications: short-term cost savings were potentially jeopardizing the long-term reliability and ethical considerations of our AI system.

Action: Here’s how I addressed the situation, demonstrating influence and technical depth:

  • Developed a Quantitative Model: I didn’t just express concerns; I built a detailed quantitative model to demonstrate the trade-offs. This model incorporated:
    • The cost of running different levels of monitoring and explainability, accounting for CPU, memory, and network bandwidth usage. I had to profile several model sizes for the latency impact.
    • The estimated cost of potentialmodel failures, including financial losses from service disruptions, legal liabilities from biased outcomes, and reputational damage (using industry benchmarks and internal risk assessments).
    • I used Bayesian methods to quantify the probability of different failure modes occurring given various levels of monitoring coverage. This model accounted for uncertainty and allowed for scenario analysis.
  • Proposed Alternative Monitoring Strategies: I researched and proposed alternative, more efficient monitoring strategies that would minimize the overhead while still providing adequate coverage. This included:
    • Adaptive Monitoring: Implementing dynamic adjustments to the monitoring frequency and granularity based on real-time model performance and risk levels. For example, increasing monitoring intensity during periods of high data drift or model degradation.
    • Selective Explainability: Focusing explainability efforts on high-risk predictions or segments of the user population where bias was more likely to occur. This involved using techniques like Shapley values or LIME to generate explanations for only a subset of predictions.
    • Sampling Techniques: The model used importance sampling so that the underrepresented slices were monitored.
  • Influence Through Data and Collaboration: I presented my model and alternative strategies to the engineering lead, product manager, and key stakeholders, emphasizing the long-term business implications of inadequate monitoring. I didn’t frame it as a technical disagreement but as a risk management issue.
  • Championed MLOps Best Practices: Used the opportunity to advocate for the best practices in model deployment and MLOPs

Result: The outcome was that we reached a compromise. We implemented a more efficient monitoring strategy based on my recommendations, including adaptive monitoring and selective explainability. While we did reduce the overall cost of monitoring, we didn’t sacrifice essential coverage. The data-driven approach and the focus on risk management helped to shift the conversation from a purely cost-centric perspective to a more holistic view that considered the ethical and business implications of our AI systems. The company adopted importance sampling as a technique, reducing costs and providing a new strategy for the model. This experience reinforced the importance of advocating for responsible AI and using data-driven arguments to influence decision-making."

Ownership

Tell me about a time you had to deliver on a tight deadline. How did you manage your time and resources?

Situation: During my time at Google, I was tasked with leading the deployment of a critical performance improvement to the LLM serving infrastructure for a key product (I can’t name specifics due to NDA). The performance improvement involved integrating a new model caching mechanism. Thisinitiative was crucial to meet upcoming peak traffic demands during a major product launch. The deadline was extremely tight – we had just three weeks to design, implement, test, and deploy the solution. A delay would directly impact user experience and potentially derail the product launch.

Here’s how I managed my time and resources, focusing on what I would bring as an IC6:

  • Rapid Prioritization and Scope Definition: I immediately convened a meeting with the key stakeholders (engineering lead, product manager, operations team) to clearly define the scope of the project and prioritize the most critical features. We used the MoSCoW prioritization method (Must have, Should have, Could have, Won’t have) to ruthlessly cut any non-essential tasks. We clearly defined what was absolutely essential for the product launch and deferred everything else.

  • Strategic Task Delegation: I carefully assessed the skills and experience of each team member and delegated tasks accordingly. I assigned the most experienced engineers to the most critical and complex components of the caching mechanism. Clear and measureable success metrics were defined for each member.

  • Parallel Development and Testing: To accelerate the development process, we adopted a parallel development and testing approach. We broke down the project into smaller, independent modules that could be developed and tested concurrently. I setup two teams, each with clear areas of ownership. Frequent code reviews and integration tests were conducted to ensure that the modules worked seamlessly together.

  • Aggressive Risk Management: I proactively identified and assessed potential risks, such as unforeseen technical challenges or dependencies on other teams. We developed contingency plans to mitigate these risks, including:

    • Having backup architectures for critical components
    • Using automated testing so that tests were easily repeatable
    • Setting up dashboards to detect degradation.
  • Continuous Monitoring and Communication: I established a clear communication plan to keep all stakeholders informed of the project’s progress. We held daily stand-up meetings to track progress, identify roadblocks, and make necessary adjustments. I also created a real-time dashboard to monitor key performance indicators (KPIs), such as code commit frequency, test pass rates, and bug resolution times. I also set up an asynchronous communication channel, and it was important everyone used it.

  • Automation and Tooling: I leveraged automation and tooling wherever possible to streamline the development and deployment process. This included:

    • Automated build and deployment pipelines using Jenkins and Spinnaker.
    • Automated testing frameworks for unit, integration, and end-to-end testing.
    • Infrastructure-as-code tools like Terraform to provision and manage cloud resources.
  • Ruthless time management: I used timeboxing techniques and the Pomodoro method to stay extremely focused to manage my day. The meetings were time boxed, with specific agendas and attendees had to come prepared with information.

Result: Despite the tight deadline and various technical challenges, we successfully deployed the caching mechanism on time and within budget. The deployment resulted in a significant improvement in the LLM serving performance, allowing us to handle the peak traffic demands during the product launch without any major issues. As a leader, this success highlighted my ability to effectively manage time and resources under pressure, prioritize tasks, delegate responsibilities, and communicate effectively with stakeholders. As an IC6 I was able to use my high-level understanding to make sure all the pieces were in place.


Give me an example of when you had to make a difficult decision without having all the information.

Situation: At Mphasis, during the design phase of a new MLOps platform for a major financial institution, we were faced with a critical architectural decision: whether to build our own custom model registry from scratch, or to leverage a pre-existing managed model registry service offered by AWS (SageMaker Model Registry) or Azure (Azure Machine Learning Model Registry). Building a custom solution would give us maximum flexibility and control over the data model and security features. However, it would also require significant development effort and ongoing maintenance. Using a managed service would be faster and easier to implement, but it would limit our customization options and potentially expose us to vendor lock-in.

The difficulty arose because we lacked complete information about several key factors:

  • Long-Term Requirements: The client’s long-term requirements for model governance, lineage tracking, and security were still evolving. We had some initial specifications, but there was a high degree of uncertainty about how those requirements would change over time.
  • Future Model Types: We didn’t know what types of ML models the client would be using in the future. The current focus was on tabular data and classical ML algorithms, but there was a possibility that they would eventually adopt deep learning models or other more complex model architectures.
  • Integration with Existing Systems: We had limited information about the client’s existing IT infrastructure and how the model registry would need to integrate with those systems.\n\n4. The technical team had different viewpoints. Some thought building it from scratch was more elegant, while others advocated managed solution for speed.

Faced with this uncertainty, I made the difficult decision to proceed with a hybrid approach. Here’s how I reasoned through it:

  • Phased Implementation: I proposed a phased implementation strategy. In the first phase, we would leverage a managed model registry service (SageMaker Model Registry) for the core functionality, such as model versioning, metadata storage, and access control. This would allow usto quickly deliver a working solution and get early feedback from the client. It solved 80% of the requirements.
  • Customizable Extension Points: We designed the platform with well-defined extension points that would allow us to add custom features and integrations in the future. This would give us the flexibility to adapt to changing requirements without having to completely re-architect the platform.
  • Open Source Commitment: Select some popular open-source frameworks to support the remaining 20%. The client was given the code and could build on it.
  • StakeholderManagement: The hybrid proposal met everyone’s goals. The technical team would build on their strengths, while the end solution would meet all the key requirements.

This hybrid approach allowed us to balance the need for speed and flexibility. We were able to deliver a working solution quickly while also preserving the option to build more custom functionality in the future, as our understanding of the client’s requirements evolved. It was a difficult decision, but it ultimately proved to be the right one. The client was happy with the initial implementation, and we were able to adapt the platform to their changing needs over time. The initial data science team agreed to use it to publish their models.


Situation:

At Mphasis, I was leading the design of a new MLOps platform for a major financial institution. A critical decision point was choosing a model registry – build a custom one or use a managed service (SageMaker/Azure). We lacked complete information about the client’s long-term requirements for governance, future model types they’d use, and integration with their existing IT systems. The technical team also had strong, divergent opinions.\n\n**Task:** My task was to recommend an approach for model registry implementation that balanced the need for a functional platform within a reasonable timeline, while also accounting for future scalability, flexibility and cost. A key challenge was dealing with the uncertainties.

Action:

Given the incomplete information, I decided to proceed with a hybrid approach. My decision-making process involved:

  • Phased Implementation: To address uncertainty about the client’s evolving needs, I proposed a phased implementation. In the first phase, we would leverage a managed model registry service (SageMaker Model Registry) for core functionality like versioning, metadata, and access control. This gave us speed of delivery and valuable early client feedback.
  • Designed Customizable Extension Points: To ensure future flexibility, we designed the platform with well-defined extension points allowing us to add custom features and integrations later. This allowed adapting to changing needs without a complete re-architecture.
  • Selected Open Source Libraries: We also selected open-source frameworks to support the remaining 20%, providing the client with the code and the ability to extend as needed.
  • Stakeholder Management: To address divergent views within the team, I had discussions with members to come to an agreement on the best solution for all.

Result: This hybrid approach balanced speed and flexibility. We delivered a working solution quickly, got client feedback and retained options for custom functionality as their needs evolved. The client was happy with the initial implementation and our ability to adapt over time. The data science team agreed to use the proposed solution to publish their models.

Describe a time you took ownership of a project or problem, even when it was outside your area of responsibility

Situation: At Google, during the rollout of a new LLM-powered feature for Search, we encountered high latency in production. While my role was MLOps for the LLM and not direct model performance, this issue jeopardized the feature launch and revenue targets. Different teams investigated separately, without central coordination.

Task: Although outside my core MLOps responsibility, I felt ownership because the infrastructure I helped build was supposed to enable efficient model serving. My task was to resolve the performance bottleneck, get the feature back on track for launch, and prevent future occurrences.

Action: I stepped up to coordinate the troubleshooting, exceeding my defined role:

  • Volunteered Coordination: I offered to be the central point of contact, connecting the model serving, data retrieval, and networking teams.
  • Developed Unified Dashboard: I created a single-pane-of-glass dashboard aggregating key performance metrics from all components, using existing tooling for speed. This allowed quick detection of bottlenecks and anomalies.
  • Led Data-Driven Analysis: I facilitated troubleshooting sessions, promoting a data-driven approach. I encouraged data sharing and helped connect observations across teams, applying statistical testing to identify anomalies.
  • Identified Bottleneck: This collaboration revealed the bottleneck in data retrieval – the LLM made many small, uncached database requests, causing excessive latency.
  • Proposed & Implemented Solution: I worked with the data retrieval team to batch requests and improve caching. We deployed this to production.

Result: The new feature performance increased significantly and met the launch and revenue targets. Latency was reduced by over 50%. By stepping outside my role, I ensured the feature’s success. I also documented the debugging process to use this in the future.


How do you handle setbacks or failures? Answer at IC6 level with depth and details in STAR format

Situation: As the tech lead for a critical model migration at NetApp, our team was tasked with migrating a large-scale fraud detection model from an on-premise infrastructure to AWS SageMaker. We planned to leverage containerization and AWS native services (SageMaker, EKS) to improve scalability and reduce operational overhead. The initial plan was to perform a blue-green deployment, ensuring zero downtime and minimal disruption to the existing fraud detection system. After weeks of preparation and testing in a staging environment, we initiated the cutover during a scheduled maintenance window. Soon after cutting over, the new AWS-hosted system experienced a significant performance degradation - transaction processing latency increased by over 500ms compared to the old infrastructure, effectively crippling the fraud detection capabilities. We also got notified for data drifting impacting the false positive rate.

Task: My primary task was to lead the team in quickly diagnosing and mitigating the performance degradation and any errors in the process. Reverting to the legacy on-premise system was an option, but this action could potentially result in substantial economic loss, and in a longer period affect the business’s credibility and reliability. Besides the time pressure, the analysis was also complicated due to the number of factors in the new system that had the potential to cause such a big error - networking, CPU throttling, different library versions etc.

Action: I spearheaded a coordinated and systematic troubleshooting effort, and to effectively address these obstacles:

  • Triaged and Assembled a Cross-Functional Team: I rapidly assembled a virtual war room with representatives from various teams, including data scientists, infrastructure engineers, and cloud architects, to ensure a comprehensive approach.
  • Data-Driven Diagnosis: We established a robust monitoring framework to collect system metrics, performance data, and logs from various components in real-time. I had team members analyze the metrics of the old and new frameworks looking for areas of deviation. Dashboards were created to give us all a full picture. I also had the team double check that the old data had been migrated correctly.
  • Focused Problem Isolation: Following the accumulation of system data, and observing the dashboard in real time, it was clear that most components were performing as expected with one exception: inter-container communication. While we had anticipated some performance reduction from the increased network communication, the observed data points were well over this. While continuing to validate inter-container communication, I engaged with a networking specialist to test the network throughput of the various containers. I realized that the containers for the data were only provisioned with limited bandwidth which explained the communication problems.
  • Controlled rollback strategy: At this point there were two options: increase network throughput to the containers or revert. To avoid unknown unknowns, I decided to revert the containers, while creating a process to create the containers with a much larger network throughput. Because the data analysis was automated, a future deployment could catch a problem and redeploy the older system.
  • Comprehensive post-mortem: After successfully reverting to the previous environment, I assembled the whole team to conduct a thorough post-mortem. Our purpose was to review the mistakes that resulted in the failure, and make an exhaustive plan that will reduce the chances of such happening again.

Result: Within 4 hours, we identified the root cause as bandwidth throttling of container. I immediately reverted the deployment to the on-premise system with almost zero data loss, maintaining transaction integrity. Next, I used the findings to set up a detailed and automated pre-deployment system health check, including automatic network bandwidth testing, and capacity to quickly rollback. We successfully migrated the model 2 weeks later. We now have a repeatable and data driven model migration. I am now much more comfortable to deploy at scale because of this process. Even more, the system had a process to redeploy back to the older system, significantly reducing risk during deployments.


Invent and Simplify

Tell me about a time you simplified a complex process or problem.

Situation: At Google, I was responsible for leading the efforts to enhance model reproducibility across multiple teams working on different aspects of NLP. At the time, each team had its own way of managing experiments, tracking model versions, and storing artifacts. This inconsistency made it incredibly challenging to reproduce results, compare models fairly, and collaborate effectively across the organization. Specifically, onboarding to an existing model required expertise and time to understand how it was built, and different dependencies made sharing between models difficult. Essentially, a lot of complexity was hidden into ad-hoc solutions. There was also a strong desire to use common building blocks and libraries to create consistent solutions.

Task: My objective was to simplify the model development process, promote collaboration, and drastically improve the model reproducibility, which at the time was the biggest pain-point. I had to come up with a streamlined, unified process that all teams could adopt while catering to their diverse needs.

Action: I took the following actions to simplify the complex process:

  • Cross-Team Workshop and Requirements Gathering: I organized a series of workshops with representatives from all the different teams involved in model development. These workshops aimed to understand the different workflows, identify common pain points, and gather requirements for a unified model development process. To prepare I analyzed the codebase of the top 10 most used models and created a report of common functionalities. I found there was a lot of reuse of these functions, which gave strong data for the next action.
  • Designed a Standardized Model Development Template: Based on the requirements gathered in the workshops, I designed a standardized model development template that provided a common structure for all model development projects. The template included:
    • A standardized directory structure for storing data, code, and artifacts.
    • A set of pre-defined environment setup scripts for managing dependencies. To achieve this all common libraries had to be containerized.
    • A common API for tracking experiments, managing model versions, and deploying models.
  • Developed a Centralized Experiment Tracking System: I built a centralized experiment tracking system using MLflow that allowed all teams to track their experiments, log metrics, and store artifacts in a consistent manner. This system was integrated with the model development template, making it easy for teams to adopt.
  • Developed shared Model Components: I took the list of top 10 model component functions and created a team to build those components. Then all teams were incentivized to use these existing blocks rather than creating their own. We also set standards so that the models could be plug and play, encouraging code sharing and reusability.
  • Automated the Deployment Process: To simplify the model deployment process, I automated the deployment process using Kubeflow Pipelines. This allowed teams to deploy their models to production with a single command.
  • Provided Training and Support: I provided training and support to all teams to help them adopt the new standardized model development process. This included creating documentation, providing one-on-one coaching, and hosting regular office hours.

Result: By implementing these actions, I was able to significantly simplify the model development process across the organization. We achieved the following results:

  • Model reproducibility improved drastically. We could now easily reproduce results from previous experiments and compare models fairly.
  • Onboarding time decreased significantly, from about 2 weeks to around 1 hour.
  • Collaboration across teams improved. The standardized template and centralized experiment tracking system made it easier for teams to share code, collaborate on projects, and learn from each other.
  • Model deployment became much faster and easier. Teams could now deploy their models to production with a single command.\nI was extremely satisfied with this outcome. It demonstrated the power of standardization, automation, and collaboration in simplifying complex processes and improving overall efficiency.

Describe a situation where you came up with a new and innovative solution.

Situation: At NetApp, we were facing a growing challenge with our existing automated root cause analysis (RCA) system for storage performance issues. The system relied on traditional machine learning techniques, primarily decision trees and rule-based engines, to analyze system logs and performance metrics. It was becoming increasingly difficult to maintain and scale. This was because the signatures of different failures would evolve over time, requiring ongoing manual analysis and rule tweaking. There was also an explosion of new models and data to be handled, stressing the on-prem infrastructure. The existing RCA system was struggling to keep pace with the growing complexity and volume of data. The system was simply not smart enough to catch novel system errors.

Task: My objective was to develop a more scalable, robust, and adaptive RCA system that could automatically detect and diagnose storage performance issues, even those never seen before. This new system also had to be built on AWS to leverage cloud scalability. The new system needed to reduce the human involvement and be fully automated so that it did not lag in case of an outage.

Action: I spearheaded the development of a novel RCA system based on a combination of unsupervised and supervised learning techniques, leveraging the power of deep learning. The innovative aspects of the solution were:

  • Unsupervised Anomaly Detection using Autoencoders: We used autoencoders, a type of neural network, to learn the normal patterns of system behavior from historical data. This allowed us to detect anomalies in real-time by comparing the current system state to the learned normal patterns. I made a few architectural modifications to create better performance in the new system.

  • Contrastive Loss for Fault Signature Extraction: The Autoencoder architecture was modified to create a contrastive loss function. The goal was to identify the key factors and features that distinguished between normal and anomalous states. The contrastive loss was minimized so that the key features could be readily accessed in the next stage.

  • Knowledge Graph-Enhanced Diagnostics: Created a knowledge graph of the common systems and then enhanced that graph with the outputs of the supervised and unsupervised learning. Thus, the RCA would not just come up with the root cause of failure, but the next node of failure. The knowledge graph was based on a community project with some proprietary additions.

  • Reinforcement Learning for Adaptive Alerting: Used a reinforcement learning (RL) agent to adaptively adjust the alerting thresholds based on the system’s current state and the historical frequency of false positives. This helped to reduce alert fatigue and improve the accuracy of the alerting system.

  • Explainable AI (XAI) Techniques: Integrated XAI techniques, such as SHAP values, to provide explanations for the RCA results. This increased the transparency and trust in the system, allowing operators to understand why a particular issue was flagged as a potential problem.

Result: The new RCA system significantly outperformed the previous system in terms of accuracy, scalability, and adaptability. We achieved the following results:

  • The false positive rate was reduced by 60%, significantly reducing alert fatigue.
  • The system could automatically detect and diagnose novel performance issues that the previous system missed.
  • The time to diagnose performance issues was reduced from hours to minutes.
  • The system was highly scalable and could handle the growing volume of data and complexity of the storage infrastructure.
  • The XAI features increased the transparency and trust in the system, making it easier for operators to understand and act on the RCA results.

I was highly satisfied with this outcome. It demonstrated the power of combining different AI techniques to solve complex problems. The most exciting aspect was how these tools can all come together and produce a system far greater than it’s parts. It also highlighted the value of innovation and continuous improvement in MLOps.


Give me an example of when you challenged the status quo

Situation: At CBRE/Google, the standard practice for deploying and managing Kubeflow Pipelines on Vertex AI involved manual configuration of each pipeline and its associated resources (compute, memory, accelerators). While this approach was manageable for a small number of pipelines, it became a significant bottleneck as the number of pipelines grew and the team expanded. This was because the manual processes were slow, error-prone, and difficult to scale. Each pipeline deployment was a snowflake requiring substantial hand-holding and specialized knowledge. It was a serious impediment to faster iteration and overall velocity.

Task: As a Sr. MLOps Engineer, my task was to identify opportunities to improve the efficiency and scalability of our MLOps practices. Realizing that manual configuration was a significant pain point, I challenged the status quo and proposed a new approach based on Infrastructure-as-Code (IaC) and automated pipeline deployment.

Action: I took the following actions to challenge the status quo and implement a more automated and scalable approach:

  • Developed a Terraform-based Infrastructure-as-Code Framework: I created a Terraform-based framework that allowed us to define and manage all of our Kubeflow Pipeline infrastructure resources in code. This included Vertex AI Pipelines, Cloud Storage buckets, service accounts, and network configurations. Terraform allowed us to reuse and extend existing code rather than rewrite from scratch. This framework was designed to be modular and extensible, allowing us to easily add support for new types of resources and configurations.
  • Created a Standardized Pipeline Definition Format: I designed a standardized pipeline definition format using YAML that allowed us to define all aspects of a pipeline in a declarative manner. This included the pipeline’s inputs, outputs, steps, dependencies, and resource requirements. I made sure the YAML was easy to understand and follow, while supporting extensibility. The YAML would be validated against a standard schema to prevent deployments.
  • Automated Pipeline Deployment using CI/CD: Integrated the Terraform framework and the standardized pipeline definition format into our CI/CD pipeline using Jenkins and ArgoCD. This automated the process of deploying and managing Kubeflow Pipelines, allowing us to deploy new pipelines or update existing pipelines with a single command. This CI/CD also automated testing of the pipeline, and validated the output before deploying. The CD tool also gave versioning capabilities.
  • Promoted Adoption and Training: I actively promoted the new IaC and automated deployment approach across the team, providing training, documentation, and support to help others adopt the new practices. This involved hosting workshops, creating tutorials, and providing one-on-one coaching to help team members transition to the new way of working.

Result: By challenging the status quo and implementing the IaC and automated deployment framework, we were able to achieve significant improvements in the efficiency and scalability of our MLOps practices. We achieved the following results:

  • The time to deploy a new Kubeflow Pipeline was reduced from days to hours.

  • The number of manual errors in pipeline deployments was reduced by 90%.

  • The scalability of our MLOps infrastructure was significantly improved. We could now easily manage hundreds of pipelines with a small team.

  • The consistency and reliability of our pipeline deployments was greatly improved. Pipelines were deployed into environments following a schema validated process.

    I was proud to have challenged the existing processes and driven a change that significantly improved our team’s efficiency and effectiveness. It demonstrated the value of constantly questioning the status quo and seeking out opportunities to improve our ways of working.


How do you balance innovation with practicality?

Situation: At NetApp, I led the team responsible for developing a new generation of predictive maintenance solutions for our storage systems. We had a wealth of telemetry data, and the initial impulse was to leverage the most cutting-edge deep learning techniques, specifically Graph Neural Networks (GNNs), to model the complex relationships between system components and predict failures with unprecedented accuracy. The draw to innovation had to be balanced with practical considerations, which the business had laid out. These included the explainability of the solution, cost of running a new solution, and how quickly we could put a solution to production. It was not acceptable if an elegant solution could not be delivered in 3 months.\n\n**Task:** My responsibility was to guide the team towards a solution that was both innovative and practical, meaning it had to demonstrate a significant improvement over existing methods while being feasible to implement, deploy, and maintain within our resource constraints. I also had to balance business value (e.g., improved accuracy, fewer false positives) with the engineering overhead required for implementing a cutting-edge solution. My goal was to minimize the risk while maintaining the upside of a better solution.

Action: I approached this challenge by implementing the following strategies:

  • Proof-of-Concept (POC) with Existing Methodologies: Before diving into GNNs, we first established a solid baseline using existing, well-understood techniques like gradient boosted trees and time series analysis. This allowed us to quantify the potential benefit of more complex approaches. More importantly, it allowed the team to explore the data and get familiar with all aspects of the predictive data.
  • Benchmarking vs. Real World: I requested the team use actual customer data, anonymized to respect privacy. I used metrics that the customers had emphasized, and weighed all factors with those metrics. The team also was given constraints such as not requiring new hardware or software updates.
  • Incremental Innovation with Careful Evaluation: I advocated for an incremental approach to innovation. We started by incorporating GNNs into specific modules of the RCA system, such as anomaly detection, where their strengths were most relevant, and we gradually expanded their use as we gained confidence in their performance and stability. I prioritized smaller changes so that if one of the features did not work, we could more readily remove it.
  • Prioritized Explainability: Given the importance of trust and interpretability in predictive maintenance, I made explainability a key requirement. If the GNN solution was a black box, it would be difficult for engineers and operators to understand the predictions and take appropriate action. We explored techniques like attention mechanisms and feature importance analysis to make the GNNs more transparent.
  • Defined Clear Success Metrics: I worked with the product team to define clear success metrics that balanced innovation with practicality. These metrics included:
    • Improvement in prediction accuracy (precision and recall).
    • Reduction in false positives.
    • Time to diagnose performance issues.
    • Deployment and maintenance cost.
    • Explainability of predictions.
  • Fostered Collaboration: I encouraged close collaboration between the data scientists, engineers, and operations teams throughout the project. This ensured that the innovative solutions were not only technically sound but also practical to deploy and operate in the real world. This involved a daily meeting and feedback.

Result: By carefully balancing innovation with practicality, we successfully developed a new predictive maintenance solution that outperformed the existing system while remaining feasible to implement and maintain. The final solution used a hybrid approach. While the GNN was the best technique, we used an ensemble of different methods. We also decided to incorporate SHAP values, which dramatically increasedcustomer trust and use of our solution. By focusing on clear success metrics, explainability, and collaboration, we were able to deliver a solution that was both innovative and valuable to the business. The tool has now become a standard with all of our deployments and has been widely praised by our engineers and customers. As an IC6, it was important to deliver a world class solution, not just one that was innovative.


Situation: At NetApp, I led the team responsible for developing a new generation of predictive maintenance solutions for our storage systems. We had a wealth of telemetry data, and the initial impulse was to leverage the most cutting-edge deep learning techniques, specifically Graph Neural Networks (GNNs), to model the complex relationships between system components and predict failures with unprecedented accuracy. The draw to innovation had to be balanced with practical considerations, which the business had laid out. These included the explainability of the solution, cost of running a new solution, and how quickly we could put a solution to production. It was not acceptable if an elegant solution could not be delivered in 3 months.

Task: My responsibility was to guide the team towards a solution that was both innovative and practical, meaning it had to demonstrate a significant improvement over existing methods while being feasible to implement, deploy, and maintain within our resource constraints. I also had to balance business value (e.g., improved accuracy, fewer false positives) with the engineering overhead required for implementing a cutting-edge solution. My goal was to minimize the risk while maintaining the upside of a better solution.

Action: I approached this challenge by implementing the following strategies:

    1. Proof-of-Concept (POC) with Existing Methodologies: Before diving into GNNs, we first established a solid baseline using existing, well-understood techniques like gradient boosted trees and time series analysis. This allowed us to quantify the potential benefit of more complex approaches. More importantly, it allowed the team to explore the data and get familiar with all aspects of the predictive data.
    1. Benchmarking vs. Real World: I requested the team use actual customer data, anonymized to respect privacy. I used metrics that the customers had emphasized, and weighed all factors with those metrics. The team also was given constraints such as not requiring new hardware or software updates.
    1. Incremental Innovation with Careful Evaluation: I advocated for an incremental approach to innovation. We started by incorporating GNNs into specific modules of the RCA system, such as anomaly detection, where their strengths were most relevant, and we gradually expanded their use as we gained confidence in their performance and stability. I prioritized smaller changes so that if one of the features did not work, we could more readily remove it.
    1. Prioritized Explainability: Given the importance of trust and interpretability in predictive maintenance, I made explainability a key requirement. If the GNN solution was a black box, it would be difficult for engineers and operators to understand the predictions and take appropriate action. We explored techniques like attention mechanisms and feature importance analysis to make the GNNs more transparent.
    1. Defined Clear Success Metrics: I worked with the product team to define clear success metrics that balanced innovation with practicality. These metrics included:
    • Improvement in prediction accuracy (precision and recall).
    • Reduction in false positives.
    • Time to diagnose performance issues.
    • Deployment and maintenance cost.
    • Explainability of predictions.
    1. Fostered Collaboration: I encouraged close collaboration between the data scientists, engineers, and operations teams throughout the project. This ensured that the innovative solutions were not only technically sound but also practical to deploy and operate in the real world. This involved a daily meeting and feedback.

Result: By carefully balancing innovation with practicality, we successfully developed a new predictive maintenance solution that outperformed the existing system while remaining feasible to implement and maintain. The final solution used a hybrid approach. While the GNN was the best technique, we used an ensemble of different methods. We also decided to incorporate SHAP values, which dramatically increased customer trust and use of our solution. By focusing on clear success metrics, explainability, and collaboration, we were able to deliver a solution that was both innovative and valuable to the business. The tool has now become a standard with all of our deployments and has been widely praised by our engineers and customers. As an IC6, it was important to deliver a world class solution, not just one that was innovative.


Describe a time you had to lead a team through a period of significant change or uncertainty

Situation: At CBRE/Google, our team was tasked with migrating a critical Kubeflow Pipelines environment from on-premise infrastructure to Google Cloud Platform (GCP) Vertex AI. This was a significant shift. All operations were designed to be on-prem and local. So moving to the cloud had a ton of logistical hurdles. There were also people who had significant pride in their work that was now going to be made obsolete. The move was driven by a desire to improve scalability, reduce operational costs, and take advantage of the advanced features offered by Vertex AI. However, the migration also introduced a great deal of uncertainty and anxiety within the team. Many engineers were unfamiliar with GCP, and there were concerns about job security, skill gaps, and the potential disruption to their existing workflows. I was now charged with the burden of implementing this while also ensuring that the migration went smoothly.

Task: My task was to lead the team through this transition, minimize disruption, and ensure that everyone was equipped to succeed in the new environment. This required not only technical expertise but also strong leadership, communication, and empathy.

Action: To successfully navigate this change, I took the following key actions:

  • Established a Clear Vision and Communication Plan: The first step was to create a clear and compelling vision for the future state of the Kubeflow Pipelines environment on GCP,emphasizing the benefits of scalability, cost savings, and new capabilities. I communicated this vision to the team through a series of town hall meetings, team updates, and one-on-one conversations. Transparency was the priority! I also created FAQ documents to readily address concerns.
  • Provided Comprehensive Training and Support: Recognizing that many team members were unfamiliar with GCP, I organized a series of training workshops and hands-on labs to help them develop the necessary skills. I also assigned mentors to provide individual guidance and support. We were also building new documentation to facilitate the transition and ensure a smooth deployment.
  • Empowered Team Members to Take Ownership: I encouraged team members to take ownership of different aspects of the migration process, such as developing Terraform scripts for infrastructure provisioning, building custom pipeline components for Vertex AI, and creating monitoring dashboards. I also gave the experts authority to provide solutions to the issues so that they would be more engaged and active in the project. In the end, they saw their recommendations be implemented and they saw the value.
  • Celebrated Successes and Recognized Contributions: Throughout the migration process, I made a point of celebrating successes and recognizing the contributions of individual team members. This helped to build morale, foster a sense of teamwork, and reinforce the value of continuous learning.

Result: By following this approach, I was able to successfully lead the team through the migration to Vertex AI with minimal disruption and high team morale. It was not perfect, but everyone felt the project was well managed with little surprises The migration was completed on time and within budget.The Kubeflow Pipelines environment on Vertex AI achieved significant improvements in scalability, performance, and cost-effectiveness. The team members developed valuable new skills and were well-positioned to support the evolving needs of the business.


Situation: At NetApp, the company decided to shift from a traditional waterfall development process to a fully Agile methodology across all engineering teams. This was a massive organizational change, impacting project planning, team structure, communication patterns, and individual roles and responsibilities. The team had always done what was successful for them and now there was this new methodology. Most felt the new approach was nonsense.

Task: As an engineering manager, I had to lead my team through this transition. That meant I had to make sure to help them in three areas. I needed to translate it into a way that was not nonsense, and create the steps to ensure long term success. There were also concerns about project timeline, and not meeting deadlines. My priorities was to help with:

  • Technical skills.
  • Leadership and communication.
  • Relationship building and empathy.

Action: Openly communicated the reasons for the change: the increased adaptability, faster feedback cycles, and improved collaboration that Agile promised. We had a small team, so used existing expertise to translate the Agile concepts and put into the day-to-day engineering practices. I held regular open door sessions to talk about any issues and problems that had risen. This built a community for the Agile process. I was fortunate that I was able to work with a change management expert. Used her to understand the correct approaches and was able to effectively manage the project. She also helped me build materials and training for the team.

Result: It was not perfect and took time to build success. But within a year, the team was effectively implementing code, tracking code, and managing deployment. A lot of what I learned was about communication, and the important for transparency with project teams. This was how we created a successful transition.


Tell me about a time you led a project that had a significant impact on the company or its users

Situation: At Google, as a tech lead in the Search Infrastructure team, I was responsible for improving the efficiency and cost-effectiveness of serving search results – a cornerstone of Google’s business. A major cost driver was the retrieval and processing of signals (data points) used for ranking webpages. The existing system relied on a complex web of interconnected services, each responsible for computing specific ranking features. However, through data analysis and performance profiling, we discovered significant redundancy; many of these services were independently computing the same or similar features for different search queries, leading to computational waste, increased latency for users, and ballooning infrastructure costs. Furthermore, there was a desire to democratize this data so that new data scientists could rapidly onboard and create new, innovative systems that can generate more accurate search results. The situation was unsustainable, impacting both user experience and Google’s bottom line.

Task: Recognizing the problem’s strategic importance, my mandate became clear: design and implement a system to eliminate this redundancy and improve efficiency, without compromising search quality and relevance. This was a highly sensitive area, as even minor regressions in search quality could have massive consequences. It also required a significant cross-functional effort, influencing and coordinating with different engineering teams who owned the individual ranking services, each with their own priorities and workflows. Many engineers simply said that it was out of their hands. The complexity demanded a leadership approach that was both visionary and collaborative.

Action: I spearheaded a strategic initiative to build a centralized feature store and a dynamic feature selection mechanism. Leading from the front, I:

  • Championed a Unified Vision: Created a clear, compelling vision for the future state of the ranking system, articulating the benefits of efficiency, scalability, and maintainability to all stakeholders. I presented this vision at multiple team meetings, emphasizing how this project directly aligned with Google’s core mission. What I was hoping to emphasize is the shared common ground that most shared.

  • Influenced Cross-Functional Teams: Successfully negotiated buy-in from different engineering teams, addressing their concerns about data ownership, autonomy, and potential disruptions to their existing workflows. This required strong communication, active listening, and a willingness to compromise.

  • Drove Technical Innovation: Provided the architectural guidance and technical leadership to design and implement the centralized feature store and dynamic feature selection mechanism. I set the code standards, the testing frameworks, and the documentation templates so that we had a high-quality product that everyone would be proud of. Established working groups with stakeholders to discuss and iterate on what data points should be centralized and what were the proper formats for each. I had to be an arbiter between different data camps because there were a lot of competing incentives for each department. I was also cognizant that the stakeholders be included in all decisions.

  • Mentored Team Members: I worked closely with junior engineers and data scientists, providing technical guidance and mentorship to help them develop their skills and contribute effectively to the project. They grew tremendously which has helped their careers and made me proud.

  • Orchestrated Phased Rollout: Led a carefully planned, phased rollout of the new system, starting with a small subset of search queries and gradually expanding to cover the entire traffic. This minimized the risk of any major disruptions to search quality. Encouraged the team to get feedback along the way to ensure the system would be well adopted.

Result: The centralized feature store and dynamic feature selection mechanism exceeded all expectations, delivering significant impact across multiple dimensions:

  • Reduced Infrastructure costs: We achieved a 30% reduction in the number of ranking feature computations, directly translating to millions of dollars in annual cost savings for Google.
  • Improved User Experience: The reduced latency resulted in faster search results, leading to a noticeable improvement in user satisfaction.
  • Accelerated Innovation: The centralized feature store made it easier for data scientists to experiment with new ranking features and deploy them into production. The new system served as the backbone for other applications. That meant that I improved data discovery and democratization of the process.

This project showcased my ability to lead complex, cross-functional initiatives, drive technical innovation, and deliver significant business impact at scale. It is the success that I am most proud of to date. More importantly, I was able to transform the lives of my team, and see them level up.


Situation: At NetApp, we faced a pressing business challenge: unacceptably high customer churn rates. Our Customer Success organization desperately needed a reliable, automated model to predict which customers were at risk of churn, enabling proactive intervention and improved retention. However, the necessary data resided in disparate silos across the organization (sales, support, product usage, etc.), with no standardized process or framework to bring it together. This hampered previous efforts to build accurate models, leading to a lack of confidence from the customer success team. The customer success engineers wanted more transparency about why they were asked to perform certain interventions.

Task: My objective was to build a robust, trustworthy churn prediction model, which required overcoming significant data integration and engineering hurdles. The team lacked the skill set for many parts of this system and to create better visibility. This had to be done. My task was not just to create a system, but to ensure that the new system was well understood so it would be implemented.

Action: I spearheaded the creation of a new system:

  • Engaged Cross-Functional Stakeholders: I convened a series of workshops with representatives from different teams (sales, support, product, engineering) to understand their data sources, pain points, and requirements. This was essential for gaining buy-in and securing access to the necessary data. We created a series of documents that showcased where the systems were lacking. Having the documentation, helped make the sale for the plan.

  • Championed a Data Governance Framework: I promoted the need for a standardized data governance framework to ensure data quality, consistency, and accessibility. This involved defining data ownership, data quality metrics, and data access policies. At the core of this system was security. This gave me the moral capital to implement these solutions.

  • Built an Automated Data Pipeline: My team designed and built a fully automated data pipeline to extract, transform, and load (ETL) data from disparate sources into a centralized data warehouse. We used tools like Apache Spark and Airflow to orchestrate the pipeline and ensure its reliability and scalability. There were a few manual processes that also needed to be automated so that they could be reproduced. All of that had to be built and maintained.

  • Developed a High-Performance Churn Model: We built multiple models and then compared those systems against each other for performance. If we were able to extract more key data for each model, the numbers would look that much better!

  • Created Actionable Insights and Visualizations: I was the team that helped create visualizations for the tool that was eventually built. Without me, there was not going to be visualizations and ways to take action based on the insights.

Result: I helped build a project that was very impactful. It wasn’t just that the churn metrics had been improved, but also it helped me show what I can do to the organization We improved the accuracy of the churn prediction model by 40%, enabling the customer success team to identify at-risk customers with greater confidence. The team also saw the benefits, and was very happy to use the system. It meant that customers were better served.This system became an enabler and springboard for other ML deployments.


Describe a situation where you had to get into the details to understand an issue.

Situation: At Mphasis, I was leading the data science team on a project involving fraud detection for financial transactions. Our model was performing well overall, but we noticed a concerning trend: a small but significant subset of fraudulent transactions was consistently evading detection. These ‘missed’ fraud cases were causing substantial financial losses and damaging the client’s reputation. The existing monitoring dashboards showed overall model performance metrics, but they didn’t provide the granularity needed to understand why these specific transactions were slipping through. Initial results showed that the overall error rates were low. So for some it was puzzling what the key difference was in the data.

Task: To address this critical issue, I knew I couldn’t rely on high-level metrics alone. I needed to dive deep into the individual transactions that were being misclassified to identify the underlying patterns and root causes of the model’s failure. That was important to make a determination whether there were bigger architectural issues that needed to be fixed. With that deep knowledge, I could better provide solutions.

Action: I went beyond the summary dashboards and undertook a detailed investigation, focusing on several key areas:

  • Data Extraction and Preparation: I started by extracting all the data associated with the misclassified fraudulent transactions from our data warehouse. This involved:
    • Writing custom SQL queries to retrieve the relevant features, metadata, and transaction history for each fraudulent transaction.
    • Cleaning and transforming the data to ensure consistency and accuracy.
    • Preparing the data for analysis using tools like pandas and NumPy. I also wanted to better understand these steps so I could use them as a reference in the future. After getting familiarity with the tools, I realized that not all had to do with machine learning, as some were simply processes that were implemented incorrectly!
  • Hands-On Root Cause Analysis: The goal was to zoom into what the fraud problem was. To help, I followed the following steps.
    • Used a set of existing fraud indicators and applied it to those transactions to see whether there were common elements that could be spotted.
    • Created automated graphs that would show which parameters and settings were correlated and impactful.
    • I had to do a significant amount of analysis to ensure that it was a legitimate issue.
  • Unsupervised Learning: We employed unsupervised

learning techniques such as clustering algorithms (k-means, hierarchical clustering) to identify distinct groups or segments within the misclassified transactions. The goal was to see the differences, and what the groupings did not catch and then dig into those reasons. For this problem, we looked at a variety of different features such as location, type of transaction, and type of purchase.

Result: The deep dive into the data provided invaluable insights and allowed us to pinpoint the root causes of the model’s failure to detect these specific fraudulent transactions.

  • Geographic Anomalies: We discovered that a significant portion of the missed fraud cases originated from specific geographic regions that were not well-represented in our training data. These regions had unique transaction patterns and user behaviors that the model had not learned to recognize.
  • New Fraud Techniques: Some of the fraudulent transactions involved novel techniques that the model had never encountered before. This included the use of sophisticated spoofing methods to disguise the origin of the transactions and evade IP-based fraud detection rules.

Based on these findings, we implemented targeted solutions, including:

  • Augmenting the training data with more representative data from the identified geographic regions.
  • Incorporating new features to detect and flag spoofed transactions. The data also reinforced the need to continuously monitor our data and models for performance degradation.

Give me an example of how you use data to identify root causes

Situation: As the tech lead for a major feature launch at Google, our team was using A/B testing to validate its performance. Initially, the data looked positive, but the metric was deceiving. I noticed in some countries, the metric was behaving as expected, and in other countries, it was not. To make matters more complicated, in some countries it was showing to perform negatively while in others it performed positively. So after discussing with the head of product it was decided we needed to make a data decision and understand what the root cause was for those countries that showed a decrease in performance. While the aggregate data was “good enough”, it was important to see the full picture before any launch happened. I had a choice of just going with it but felt that was ethically wrong.

Task: Given the conflicting data, it was up to me to find if there were commonalities to determine whether to launch it everywhere or to launch only in certain geographies or even to scrap the project altogether. I had to balance the need for a rigorous statistical analysis while coming to a solution in a rapid timeframe. Any of those decisions meant there was downside risk (opportunity cost).

Action: I took the following steps to identify the root cause:

  • Detailed Investigation: The initial data collection efforts involved building a data lake. One of the first places I would start was to understand any errors being made in the data collections. Some of these data points could come and be misrepresented due to corrupted data or from other data integration efforts. So cleaning that data set was the very first thing I had to perform. This meant ensuring that the events collected were well defined, and their data formats and schemas were consistent. Data cleansing has to be the priority! The cleaned data was loaded into BigQuery and ready for further investigation.
  • Data Cleaning and Filtering: I wanted to zoom into some obvious data points that could impact the data performance. Some examples:
    • Data volume of the different regions: Did certain regions not have the same amount of data as others? If so, this would impact results. This was especially true for data-intensive operations.
    • User demographics for the different countries. Did the users for those countries have certain demographics that were not suited for a particular tool?
    • Systemconfigurations and updates: Did those geographies have different hardware or software updates that could also have contributed to the outcomes? It was important that the data set be well defined for a comprehensive analysis.
  • Segment Analysis: After cleaning the data, I did segment the dataset based on similar dimensions to identify the root cause. I could then ask why it was not working for certain demographics and countries versus others. Some of the data point segmentations were:
    • User demographics and geographic. Certain data sets had certain results based on locations.
    • System configurations and features. This test was about using a type of phone. There were other type of phones that also had similar features. Did that impact the results? The features themselves were working!
  • Developed a decision tree: I took the data, and generated a quick decision tree that would find the most relevant features for the positive and negative segments. This helped quickly identify how the features and negative and positive interacted.

Result: By cleaning the data, segmenting it, and generating models, I quickly realized that the feature was not valuable to those who had similar features already. The solution was designed for people who didn’t have certain functionality on their phones. For those who had similar functionalities, the feature provided little to no value. For those who did not have it, the feature was transformative. By deeply understanding the underlying data I was able to showcase why the product would be beneficial to all or just some users. The product organization pivoted to just focus on the demographics that could derive value from the system.


How do you ensure you have a deep understanding of your work

Situation: As an IC6-level engineer, my work often involves leading complex projects and making critical architectural decisions. For example, while leading the MLOPs effort at Google, I found myself working on a new system that needed a complex mix of technologies. It was clear to me that unless I had deep knowledge of the system, there was no way to achieve success. I needed to ensure that I could quickly understand this system, or the team would not perform well, and the business would suffer.

Task: It’s not sufficient to just know the surface-level details, it is important to get deep knowledge of the system. My task isn’t just to manage the project, but to truly understand the underlying technology, the intricacies of the architecture, the potential failure modes, and the trade-offs involved. To deeply understand the system, I followed these steps:

Action: I actively employ a multi-faceted approach to ensure I develop a deep understanding of my work, which included:

  • Active Investigation of Design Decisions: I spent time reading the initial documentation, but realized that I had to meet all the key people who had made key design decisions. I understood what the constraints and design trade-offs were. I reached out to key architects to discuss their rationale and to understand the context behind these designs. Before I took any work, I realized the system could not be understood without speaking to a few people.

  • Code Immersion and Reverse Engineering: I spent a significant amount of time diving into the codebase, tracing the execution flow, and reverse engineering complex algorithms. The core code was not well documented, and I was also new to the language. That was the next thing I would focus on. As I was working on this effort, I actively took notes and comments, and shared back with other team members to help improve understanding. I also looked into where tests were missing and where code was lacking so that those were easy to add.

  • Hands-on Experimentation and Prototyping: I built small-scale prototypes and conducted hands-on experiments to validate my understanding of the system and identify potential issues. This involved:

    • Creating simplified versions of complex components to isolate and analyze their behavior.
    • Running benchmark tests to evaluate the performance of different configurations.
    • Deliberately injecting faults into the system to observe its response and identify potential failure modes.
  • Continuous Learning and Knowledge Sharing: I made it a point to stay up-to-date with the latest research and developments in relevant fields by:

    • Subscribing to industry newsletters and blogs.
    • Attending technical conferences and workshops.
    • Actively participating in online communities and forums.

In addition, I actively shared my knowledge with the team through presentations, documentation, and code reviews, fostering a culture of continuous learning and improvement.

Result: Because of my deep understanding of the systems, the team quickly became better at creating the solutions that met the business needs. I was able to anticipate problems and come up with a more efficient, optimized solution. This enabled greater value that was otherwise not possible. It shows the value of an IC6 to not only manage, but also dive deep.


Tell me about a time you had to analyze a complex problem in detail

Situation: At Google, I was the tech lead for a project aimed at improving the efficiency of our distributed training infrastructure for large language models (LLMs). We observed inconsistent training times across different jobs, even when they were using similar model architectures and datasets. Some jobs would complete within a few hours, while others would take days, leading to significant delays in our research and development cycles. There was pressure to improve the overall performance, or risk falling behind other AI labs. The situation was frustrating and there was not one clear answer.

Task: My task was to identify the root causes of these inconsistencies and develop a plan to optimize the training infrastructure. This involved analyzing a complex interplay of hardware, software, and configuration parameters. I needed to determine ways to streamline testing and debugging. The key was to minimize the turnaround time to understand and react to the findings.

Action: To dissect this complex problem, I systematically approached it using the following steps:

  • Established a Comprehensive Monitoring Framework: As I would with any problem, the first step was to investigate data. The first thing I did was to build a framework that included various metrics on systems, data sets, and processes. A combination of Grafana and Prometheus with alerts helped to track metrics. It allowed us to perform more detailed and extensive work. A monitoring system had to be holistic. The system included the following.
    • Hardware resource monitoring.
    • Training performance Metrics
    • Data Ingestion Rates.
    • Software versions and configurations of all components involved in the training process.
  • Data-Driven Analysis: With that framework, I was able to then monitor specific events. In particular, there were a few steps that I followed:
    • I identified those jobs that performed slowly, what was their configuration, and key events. Then, I categorized it to see whether there were any patterns.
  • Deep Dive on a Bottleneck: In this problem, it became readily clear that some machines had high network utilization as they were being read and written. The machines simply became overwhelmed. The data transfer pattern did not matter. It quickly showed which machines were working and under stress. It was clear that there was a data bottleneck. After some investigation, it was determined that there were old machines that needed to be upgraded.
  • Tested other data sources: The initial data tests were performed at a large scale. There were different data sizes, etc. However, now it was time to perform tests at all combinations of different jobs, data sizes, model types, and system version combinations. I had to bring in multiple team members to perform these manual steps, and that required a lot of project management, communication, and leadership. We also had to account for other team members performing different analyses. A shared calendar and excel sheet allowed everyone to be on the same page.

Result: Through this structured analysis, I identified several key factors contributing to the inconsistent training times. These included:

  • Outdated Network Interface Cards (NICs): A subset of machines in our training cluster had older NICs with lower bandwidth, creating a bottleneck for data transfer during distributed training.
  • Data Sharding Imbalances: The data sharding strategy resulted in uneven data distribution across the training nodes, leading to some nodes being overloaded while others were underutilized. We implemented a more balanced sharding approach using consistent hashing. By addressing these issues, we significantly improved the consistency and efficiency of our distributed training infrastructure:
    • Reduced the average training time by 30%.
    • Reduced the variance in training times across different jobs.

This experience showcased my ability to tackle complex problems by employing a data-driven approach, leveraging my technical expertise, and fostering collaboration across different teams. This type of system requires a complex solution, and is beyond the scope of any junior member. With the data and information, I was able to influence other people to modernize the system.


Tell me about a time you were resourceful with limited resources.

Situation: At Mphasis, while working on a project to build an ML-powered fraud detection system for a mid-sized fintech company, we faced a significant challenge. The company had limited budget for purchasing commercial data enrichment services, which are often crucial for enhancing the accuracy and robustness of fraud detection models. Typically, such enriched data (e.g., IP address geolocation, device information, email reputation scores) would be purchased from third-party vendors, significantly boosting model performance.

Task: My task was to develop a fraud detection system that met the client’s performance requirements without relying on expensive, commercially available data enrichment services. This meant finding creative and cost-effective ways to gather and integrate relevant data, while ensuring that the system was scalable and maintainable.

Action: I approached this challenge by leveraging a combination of open-source tools, public APIs, and clever feature engineering techniques:

  • Leveraged Open-Source Intelligence (OSINT): I explored various OSINT sources, such as public IP address databases, WHOIS records, and social media platforms, to gather information about users and transactions. A few key resources were:

    • MaxMind GeoLite2: A free IP geolocation database that provides reasonably accurate location information.
    • AbuseIPDB: A community-driven database of malicious IP addresses.
    • Various public APIs for retrieving domain registration information and social media profiles.
  • Built Custom Data Enrichment Services: We implemented several custom data enrichment services using open-source libraries and public APIs. These included:

    • A device fingerprinting service using JavaScript to collect information about the user’s browser

    and operating system.

    • An email reputation scoring service using a combination of DNS lookups, SPF record analysis, and blacklist checks. This service also identified potential disposable email addresses.
    • A risk assessment that would look for certain types of events. For example, new emails to a vendor to divert funds.
  • Feature Engineering and Combination: The various data, including time of day, user location, number of transactions in a timeframe, were combined to create a rich feature to improve model prediction. By combining the features, the model could produce accurate results. We used the models to analyze the combinations to find new and better predictors.

Result: By leveraging open-source tools, public APIs, and clever feature engineering techniques, we were able to develop a high-performing fraud detection system that met the client’s requirements without relying on expensive commercial data enrichment services. The results had the following metrics:

  • Improved the model’s precision and recall by over 15% compared to a baseline model without data enrichment.
  • Saved the client over $50,000 per year in data enrichment costs.This experience demonstrated the power of resourcefulness, creativity, and a deep understanding of the data landscape in overcoming challenges and delivering value with limited resources. Furthermore, the open-source solution was more customizable. This new system allowed my team to focus on building a much more robust and sustainable project that required less cost.

Give me an example of when you had to overcome obstacles to achieve a goal.

Situation: While at CBRE/Google, I was tasked with leading the development of a new data pipeline for a critical real-time personalization feature within Google Discover. This feature aimed to personalize the content recommendations based on user’s immediate context and interests. The initial design was straightforward - consume user activity events from Kafka, enrich them with contextual data from a NoSQL database, and feed them into a machine learning model for personalized ranking. However, we encountered a significant obstacle early on: the NoSQL database’s performance degraded substantially during peak traffic hours, causing unacceptable latency in the feature engineering pipeline. This was outside of my area, but it impacted everyone. The data could not be loaded reliably and in a consistent timeframe.

Task: My task was to address this performance bottleneck and ensure the timely and reliable delivery of the real-time personalization feature. I needed to create a system that would ensure the accuracy of the results.

Action: To overcome this obstacle, I took the following steps:

  • Comprehensive Investigation: The first thing I did was to investigate. After looking at metrics, logs, and code, I had a better understanding of the system. I had to perform testing, as the bottleneck could be caused by various factors (network, bandwidth and CPU usage of other systems.

  • Experimented with Caching Strategies: I experimented with different caching strategies to reduce the load on the data store during peak hours. These included:

    • Implementing a local in-memory cache using Redis to store frequently accessed contextual data.
    • Leveraging a content delivery network (CDN) to cache static data closer to the users.
  • Data Sharding and Replication: To improve the scalability and availability of the NoSQL database, I worked with the database team to implement data sharding and replication strategies. We also experimented with database configurations, but realized it was a waste of time. I realized I had to address this through software.

  • Parallel Data Lookups: I re-architected the data pipeline to perform data lookups in parallel, rather than sequentially, to reduce the overall latency. This involved using asynchronous programming techniques and distributing the workload across multiple threads. This dramatically improved performance.

  • Fallback Mechanisms: The primary problem was that the NoSQL system was not predictable. I did not have control of the stability of that system. There were two steps I had to take.

    • Set up a health monitoring system to track when the performance began to degrade.
    • As a backup, I used an older, albeit less optimal dataset.

Result: By combining these techniques, I was able to significantly reduce the load on the data store during peak traffic hours and improve the performance and reliability of the real-time personalization feature. Here were the outcomes:

  • Reduced data read from the database by over 60%.
  • The data loading is less susceptible to failure.
  • The throughput of the real-time data pipeline was increased by 3x.
  • A very high performing system that can be implemented easily.

Tell me about a time you had to make a decision quickly with limited information.

Situation: At Google, our team was responsible for ensuring the reliability and performance of a critical online service that processed millions of requests per second. During a high-traffic event, we received an alert indicating a significant spike in error rates for a specific microservice. Initial monitoring data showed that the microservice’s CPU utilization was nearing 100%, but we had limited visibility into the underlying cause. Standard alerts were also getting triggered so the team had to respond quickly. The key members responsible for the service were also not available.

Task: My task was to quickly diagnose the issue, determine the appropriate course of action, and mitigate the impact on users, all with limited information and under intense time pressure. The issue involved a key business time and if the situation was not rapidly addressed, many customers would be affected.

Action: Given the limited information and the urgent nature of the situation, I had to rely on my experience and judgment to make a decision. Here’s the process I followed:

  • Gathered Available Information: I consolidated all available information from monitoring dashboards, alerting systems, and incident reports. This included CPU utilization, memory usage, network traffic, and error rates. The problem was that the root cause could be anything from a data migration error to a distributed attack on the system.

  • Prioritized Potential Causes: Based on the available data and my understanding of the system architecture, I prioritized the most likely causes of the high CPU utilization. These included:

    • A sudden surge in traffic to the microservice.
    • A resource leak in the microservice code.
    • A misconfiguration of the microservice’s resources.
    • An external dependency causing contention.
  • Implemented Mitigating Actions: Lacking a definitive diagnosis, I decided to implement several mitigating actions in parallel:

    • Triggered an alert to alert key personnel from home.
    • Reduced the traffic allocated to the system by routing some of that traffic to older infrastructure.
    • Checked code for obvious errors and redeployed the code again after clearing caches and restarting instances.
  • Monitored and Adjusted: I closely monitored the impact of these actions on the microservice’s performance. We quickly noticed improvement so decided to continue on this path until the key people could respond.

  • Escalated to On-Call: Because the root cause was still unknown, I set up a separate process to perform that debug work while I ensured the system maintained the traffic. It also meant that the experts could focus on solving the problem rather than fixing the immediate pain.

Result: While there was stress that it may not work, the code deployment was successful. The system performance went back to baseline, and we maintained the traffic. By the time it was resolved, the responsible people had gotten back. By setting up a parallel effort, the problem was solved. This success increased their trust and confidence. Even after debugging, it was determined that the steps taken were the correct measures to take, and would be added to a playbook. This experience reinforced the importance of quick decision-making, proactive risk management, and effective communication in high-pressure situations.


Tell me about a time you had a big idea that you turned into reality.

Situation: While at NetApp, I noticed a significant disconnect between the data science team and the operations team when it came to deploying machine learning models into production. Data scientists were spending a lot of time handcrafting deployment scripts and manually configuring infrastructure, leading to long deployment cycles, inconsistent deployments, and increased risk of errors. The data scientists lacked the proper support to ensure these solutions could be readily deployed, while the operations team felt they were not equipped to handle the types of requests by the data scientists. There was a lot of finger pointing. I saw an opportunity to bridge this gap and streamline the model deployment process.

Task: My ‘big idea’ was to create a self-service MLOps platform that would empower data scientists to deploy their models into production with minimal operational overhead, freeing them to focus on model development and experimentation. I wanted to solve the finger pointing. It also fit with my background. Because this was a system that had pieces of code that already existed, there was some pushback.

Action: To turn this idea into reality, I took the following steps:

  • Gathered Requirements and Built a Business Case: I interviewed data scientists, operations engineers, and other stakeholders to understand their pain points and gather requirements for the platform. I then built a business case that quantified the potential benefits of the platform, including reduced deployment time, improved model performance, and reduced operational costs. It took a lot of data analysis to showcase these savings.

  • Designed the Platform Architecture: I designed a cloud-based platform using AWS. The solution was to:

    1. provide automated unit testing as well as validation of the data being outputted.
    2. Automatically test with the new version versus a shadow mode so that the operations team would have confidence in its accuracy.
    3. The platform would automatically create documentation to facilitate deployment.
  • Built a Minimum Viable Product (MVP): To validate the concept and get early feedback, I started by building an MVP that implemented the core functionality of the platform, such as model versioning, automated deployment, and basic monitoring. Then I sought feedback. This also helped to build momentum by showing a tangible product that worked.

  • Iterated Based on User Feedback: I closely monitored the usage of the MVP and collected feedback from data scientists. I used this feedback to iterate on the design and add new features, such as automated model retraining, advanced monitoring, and integration with our existing data pipelines.

  • Evangelized and Promoted Adoption: I actively promoted the platform across the organization, showcasing its benefits to data scientists, operations engineers, and other stakeholders. I provided training and support to help data scientists adopt the platform and integrate it into their workflows.

Result: The self-service MLOps platform was a huge success. We achieved the following results:

  • Reduced model deployment time from weeks to hours.
  • Improved model performance by automating the retraining process and ensuring consistent deployments.
  • Reduced operational costs by automating infrastructure provisioning and management. Now teams did not have to learn what it takes to build and deploy the systems, and could focus on what they know best. This experience demonstrated the power of a compelling vision, strong execution, and a relentless focus on user needs in transforming a big idea into a valuable reality. It helped to democratize the role of ML.

Give me an example of when you had to address a quality issue.

Situation: At Mphasis, while developing the ‘Bedrock Knowledge Base with Serverless Vector Search Implementation’ for Fanatics, the team observed a recurring pattern of inaccurate or irrelevant search results when users posed complex, multi-faceted queries. While the overall accuracy metrics looked good, a closer analysis revealed a concerning trend – a decline in semantic relevance for more nuanced searches. This posed a significant problem, as the entire value proposition hinged on delivering highly relevant results, especially for complex user needs. The end users became much more dissatisfied, making the solution not viable.

Task: The situation demanded immediate attention. It was my responsibility to diagnose the root cause of this quality issue, devise an effective solution, and implement it swiftly to restore user confidence and maintain the project’s momentum. It was critical to address this now because the entire project depended on accurate quality data.

Action: To address the data quality issue, I took the following actions:

  • Implemented Enhanced Monitoring and Logging: Recognizing the need for granular insights, I implemented more detailed monitoring and logging mechanisms within the search pipeline. This included logging the input queries, generated embeddings, retrieved documents, and the final search results. I focused on instrumentation and data. Before doing anything else, I had to test and understand the data at each stage of the search pipeline.

  • Performed In-Depth Data Analysis: I began analyzing the logs to identify patterns in the failing queries. This revealed that the embedding model (Titan Embeddings) was struggling to accurately capture the semantic meaning of long, complex queries, leading to suboptimal vector representations. The length, breadth and data itself had multiple layers, so the model was being stretched beyond its capabilities.

  • Experimented with Embedding Strategies: I explored alternative embedding strategies to better handle complex queries. This included:

    • Query expansion: Augmenting the original query with related terms and synonyms to broaden the search scope.
    • Chunking Queries: Breaking down long queries into smaller, more manageable chunks and generating embeddings for each chunk. I also used these techniques in my data gathering.
  • Fine-Tuned the Similarity Search Algorithm: I experimented with different similarity search algorithms in OpenSearch Serverless to optimize the retrieval of relevant documents. This involved tuning parameters such as the distance metric and the number of nearest neighbors to retrieve. A lot of that had to do with the length of the queries, so finding a balance was essential.

  • Collaborated Closely with the Team: I worked closely with the data scientists, engineers, and product managers to ensure that everyone was aligned on the problem and the proposed solutions. This involved regular meetings, code reviews, and knowledge-sharing sessions.

Result: By implementing these actions, I was able to significantly improve the quality of the search results for complex queries. Specifically, we observed:

  • A 30% increase in the click-through rate for complex queries, indicating improved relevance.
  • Positive feedback from users who reported that the search results were now more accurate and helpful.
  • A reduction in the number of support tickets related to inaccurate search results.

This experience reinforced the importance of proactive monitoring, data-driven decision-making, and collaboration in maintaining high-quality ML systems.


Tell me about a time you raised the bar for yourself or your team.

Situation: While at Mphasis, I took on a consulting project to help a large online retailer improve the efficiency and scalability of its recommendation engine. The existing system, while functional, was monolithic, difficult to maintain, and struggled to keep up with the growing volume of user data and product catalog. The status quo within the team was to continue patching and optimizing the existing architecture, rather than undertaking a more fundamental redesign.

Task: My task wasn’t just to optimize the existing system, but to propose and implement a new architecture that would significantly improve its performance, scalability, and maintainability. This meant challenging the team’s comfort zone and pushing them to learn and adopt new technologies and methodologies, while also demonstrating measurable improvements within a reasonable timeframe. I had to sell the organization on the idea to raise the bar.

Action: To raise the bar, I focused on a few areas. Rather than just band-aiding the existing architecture, I proposed a microservices architecture. To improve velocity, and promote best practices, I introduced TDD (test driven design). A small subset of features were instrumented with A/B testing. I took the following concrete actions:

  • Established a Clear Vision and Quantifiable Goals: I articulated a clear vision for the future recommendation engine, emphasizing the benefits of a microservices architecture, including improved scalability, fault tolerance, and agility. I alsodefined quantifiable goals for performance improvement, such as a 50% reduction in latency and a 2x increase in throughput. Showed competitors that have implemented similar solutions for the same reasons.

  • Championed New Technologies and Methodologies: The original team were coding and shipping without tests. So it was essential to introduce basic TDD principles. While this reduced velocity at first, in the longer run it improved the code and shortened the timelines. I convinced the other members to try this and showcased the new system.

  • Mentorship and Knowledge Sharing: I recognized that the team lacked experience with microservices and cloud-native technologies, so I prioritized mentorship and knowledge sharing. I led workshops on Docker, Kubernetes, and gRPC, and I paired junior engineers with more experienced engineers to facilitate learning and knowledge transfer. As the lead, I made sure to provide the new documentation and made myself readily available to answer questions.

  • Incremental Implementation and Early Wins: We started by implementing a small, self-contained microservice to handle a specific recommendation task, such as personalized product ranking. This allowed the team to gain experience with the new architecture and technologies without overhauling the entire system at once. Showed the team members that the changes were having a real impact on reducing code and making processes easier.

  • Metrics and Continuous Improvement: I established a comprehensive monitoring and logging system to track the performance of the new microservices and identify areas for improvement. I promoted a culture of continuous improvement, encouraging the team to experiment with different optimization techniques and iterate on the design based on data-driven insights. By showcasing the data, I was able to build a system that the team felt invested in.

Result: By challenging the status quo and raising the bar, we successfully transformed the retailer’s recommendation engine into a scalable, maintainable, and high-performing system. Specific results included:

  • Reduced latency by 65%, leading to a significant improvement in user experience.
  • Increased throughput by 2.5x, allowing the system to handle peak traffic loads without any performance degradation.
  • Reduced the time to deploy new recommendation algorithms from weeks to days.
  • Improved the team’s skillset and expertise in cloud-native technologies.

All of these changes were measurable and tested on the end system. I not only made a more robust system, but gave new toolsets that were previously not available. These were transformative changes that were welcomed by the team and used in the future for other projects


Situation: At NetApp, our team was responsible for building a data pipeline ingesting data into a feature store. We had implemented a decent but not spectacular system ingesting around 10K records a second, which was sufficient but not scalable. The system involved a series of jobs reading the data, cleansing the data, transforming it, and then outputting it to the feature store. A few other data organizations had built solutions, and this was comparable. The code also lacked testing. I was confident that by making changes, that we can achieve superior results.\n\n**Task:** My task was to significantly improve the data ingesting capacity of the system. Given that there were other comparable systems, the team did not believe that raising the bar was not possible. Most of the data engineers simply felt that it was “good enough” and thought I was wasting my time. Therefore, I had to convince my team to raise the bar and for the project to take priority. I knew that building a higher-performing pipeline can have a lot of future benefits, so that was essential to improve.

Action: To raise the bar, I focused on a few key areas:

  • Set an Ambitious Target and Created a Roadmap: After investigating the data and discussing with the team, I settled on a

goal of ingesting 100K records a second and outlined how that target could be achieved. It would require rewriting various parts of the system, profiling the code for bottlenecks, and implementing parallel processing techniques.

  • Investigated Other Areas: I explored several areas that I thought were prime for improvements. After doing

research and discussions, I focused on 3. 1) Rewriting the code for higher parallel processing. 2) Implementing testing. 3) Monitoring the code.

  • Rewrote with Parallelism: The original data ingestion

pipeline was largely serial in nature, processing records one after another. I realized that we could significantly improve throughput by leveraging parallelism. I spearheaded the effort to rewrite the pipeline using Apache Spark, a distributed computing framework that allowed us to process records in parallel across multiple nodes. This had the added benefit of cloud deployments. Using AWS meant we could implement systems with far greater reliability and availability as well as superior scale.

  • Automated the System: This involved implementing automated testing frameworks and using AWS managed

services. It greatly simplified building data pipelines with a small team.

Result: As a result of these actions, it was transformed. I was able to showcase a system that had 10X improved the processing power. More importantly, the new codebase had greatly increased the test coverage so that developers can work on a more robust product. The other members of the organization started leveraging our code and the team was asked to build the core data ingestion service. I had to go outside the “good enough” to build a superior service, and that benefitted our customers. With that new reputation, the team had a lot more confidence to build the project.


How do you foster a culture of learning and development within your team?

As someone aspiring to an IC6 role at Meta, I understand that fostering a culture of learning and development within a team is not merely a desirable leadership trait, it’s a fundamental requirement for driving innovation, retaining talent, and achieving ambitious goals. At this level, it’s my responsibility to create an environment where continuous growth is ingrained in the team’s DNA.

Here’s how I would approach fostering such a culture at Meta:

  • Lead by Example and Advocate for Meta’s Learning Resources: I’d immediately immerse myself in Meta’s learning resources (Metaversity, internalknowledge bases, etc.) and actively participate in relevant training programs. I would openly share what I’m learning with the team,discuss relevant industry trends, and present technical deep dives. This demonstrates my commitment to continuous learning and sets the tone for the team. This will also show how I embrace Meta qvalues.

  • Cultivate a Psychologically Safe Environment: I believe that learning thrives in a safe environment where team members feel comfortable experimenting, asking questions (even seemingly basic ones), admitting mistakes, and challenging the status quo. To create this, I’d:

    • Actively solicit diverse perspectives and ensure everyone’s voice is heard.
    • Frame failures as learning opportunities and focus on what can be improved, rather than assigningblame.
    • Encourage open and honest communication about challenges and roadblocks.
    • Recognize and reward risk-taking and experimentation, even if the outcome isn’t always successful. This helps to create an inclusive environment.
  • Designated Learning Time and Knowledge Sharing Mechanisms: I would champion incorporating protected learning time into the team’s schedule. What qthis looks like:

    • Every Friday the team gets a couple of hours to focus on training/experimentation.
    • Internal hackathons to test and grow skills in the team.
    • I am highly supportive of members attending external conferences. All of this helps to foster a culture of teamlearning and allows everyone to thrive.
  • Promote Open Source Contributions and Internal Cross-Pollination: The best solutions are not created within a single team and these efforts allows us to share back our learnings. I would want to get to know other teams as well as have my members partner with them to work on solutions.

  • Regular Skill Gap Analysis and Personalized Development Plans: I’d conduct regular assessments to identify skill gaps within the team and create personalized development plans for each member. This would involve:

    • Working with each team member to define their career goals and identify areas where they want to grow.
    • Providing access to relevant training resources, mentorship opportunities, and challenging project assignments.
    • Tracking progress against these development plans and providing ongoing feedback and support.

This includes both positive reinforcement and suggestions for areas to focus on. I want to create a culture of curiosity and innovation where continuous learning is not just an expectation but a deeply ingrained value.


As an IC6 at Meta, fostering a culture of learning and development within my team is not just a desirable trait, it’s a critical responsibility. It’s about creating an environment where continuous growth is ingrained in the team’s DNA, leading to higher innovation, improved performance, and increased employee satisfaction. It’s more than just providing resources. It’s about creating an environment where growth is rewarded and celebrated.

Here’s how I cultivate such a culture:

  • Lead by Example: Learning begins with the leader. As an IC6, I consistently demonstrate a commitment to my own learning and development by:
    • Actively participating in relevant conferences and workshops. This is why I am at Meta.
    • Sharing interesting research papers and articles with the team.
    • Experimenting with new technologies and tools and sharing my findings.
    • Seeking mentorship from senior engineers and leaders.
    • Openly discussing my own mistakes and lessons learned.

By showcasing my commitment to lifelong learning, I encourage my team members to do the same.

  • Creating a Safe and Supportive Environment: It’s crucial to create a safe space where team members feel comfortable taking risks, experimenting with new ideas, and admitting mistakes without fear of judgment or retribution. This involves:

    • Promoting a culture of psychological safety, where everyone feels comfortable speaking up and sharing their perspectives.
      • Celebrating both successes and failures as learning opportunities.
      • Providing constructive feedback and support to help team members grow.
      • Encouraging team members to challenge assumptions and ask \“why\” things are done a certain way.
  • Providing Dedicated Learning Time and Resources: I allocate dedicated time and resources for learning and development activities:

    • Setting aside a portion of each week for team members to pursue their own learning goals.
    • Encouraging the use of Meta’s internal training platforms and online learning resources.
    • Sponsoring team members to attend relevant conferences and workshops.
    • Creating opportunities for knowledge sharing within the team, such as tech talks, brown bag lunches, and code reviews. I budget the time for these sessions. It shows that I value them.
  • Encouraging Experimentation and Innovation: I empower team members to experiment with new technologies and approaches by:

    • Providing them with the autonomy and resources to pursue their own research projects.
    • Creating opportunities for them to present their findings to the team and the wider organization.
    • Recognizing and rewarding innovative ideas and contributions. I publicly commend these new ideas in team meetings and highlight their work.
  • Mentorship and Knowledge Sharing: Pairing senior team members with junior engineers. This helps to build stronger ties within the team. It also helps with their own understanding of the system. It solidifies their expertise by teaching others:

  • Feedback and Growth Plans: Consistent and candid feedback allows you to see the blind spots and correct them. Performance reviews and growth plans helps to show each member where they need to grow:

I would setup periodic lunch and learns for all of the employees to come together. It builds a shared understanding of what we are building and how to connect with the relevant experts:

By actively championing these principles, I create a dynamic learning ecosystem that propels innovation, improves performance, and helps my team members reach their full potential at Meta.


Tell me about a time you helped a team member improve their performance.

Situation: At NetApp, I was leading a team of engineers responsible for developing and maintaining our cloud-based data analytics platform. One of the engineers on my team, let’s call him David, was consistently struggling to meet deadlines and deliver high-quality code. David was a talented engineer with solid technical skills, but he struggled with time management, task prioritization, and communicating his progress effectively. He was also having difficulty adapting to the team’s adoption of Agile development methodologies. This was impacting the team’s velocity and overall project delivery schedule.

Task: As his lead, I felt responsible for helping David improve his performance and become a more effective member of the team. I needed to address the underlying causes of his performance issues and provide him with the necessary support and guidance to succeed. This was critical to prevent the team from taking up the slack and to get David to be more productive. He had a lot of potential, and it was a waste to see that potential be under utilized.

Action: I took the following steps to help David improve his performance:

  • One-on-One Coaching and Feedback: I scheduled regular one-on-one meetings with David to discuss his progress, provide feedback, and offer guidance. I used a structured approach for these meetings, focusing on specific areas for improvement, such as time management, task prioritization, and communication. It was important to establish a good relationship and build trust with David.

  • Root cause Analysis: I focused not only on the symptoms, but also understood his workflow and the reasoning behind it. One of the questions I asked was what roadblocks he was facing. After a few meetings, I realized that he simply did not understand some of the coding patterns. And he also did not understand the deployment process or what metrics to focus on.

  • Mentorship and Skill Development: I paired David with a senior engineer on the team who could serve as a mentor and provide him with guidance on technical skills and best practices. I also encouraged David to attend training courses and workshops to enhance his skills in areas such as Agile development and cloud computing. These could be external or internal workshops or trainings.

  • Breaking Down Tasks: I worked with David to break down complex tasks into smaller, more manageable sub-tasks. This helped him to better prioritize his work and track his progress. It also made it easier for him to identify and overcome any roadblocks.

  • Improved Communication: I encouraged David to communicate his progress and any challenges he was facing more frequently with the team. We also set expectations around timelines to complete the tasks so that there were no surprises. I also reviewed his communications to prevent offending or hurting anyone’s feelings.

Result: Through consistent coaching, mentorship, and support, David demonstrated significant improvement in his performance. He was able to meet deadlines more consistently, deliver higher-quality code, and communicate his progress effectively with the team. He became a more active and engaged member of the team. By supporting him, his confidence grew. Furthermore, David became comfortable to experiment and propose his ideas. Because he was now better at his job, David mentored new team members and was a better collaborator.


Tell me about a time you learned something new that helped you in your work. How did you handle it

Situation: At CBRE/Google, while I was working on optimizing the performance of Kubeflow Pipelines running on Vertex AI, I kept encountering increasingly complex performance bottlenecks that traditional profiling tools weren’t effectively capturing. The pipelines involved a series of interconnected steps, each potentially contributing to the overall latency. Simple profiling tools didn’t provide a holistic view of the pipeline’s execution flow, or how the various steps were interacting with each other. I felt I was operating in the dark, only guessing and experimenting on different optimization techniques. I recognized a gap in my knowledge and a need to upskill. The existing debugging process simply took too long, and it was impacting the overall iteration speed for launching our project. I was falling behind schedule.

Task: My task was to identify a method to gain a deeper understanding of distributed tracing to see how it can be leveraged, to be implemented within the team. My goal was to identify performance issues that the other tools did not catch, and to find a way for it to scale. The new solution had to not only detect but also be integrated into the deployment pipeline so that it was repeatable.

Action: I decided to dive deep into the world of distributed tracing and dynamic instrumentation. Here’s how I handled the learning process:

  • Dedicated Learning Time and Resources: I committed dedicated time each week to learning about distributed tracing concepts and tools. I explored resources like the Open Telemetry documentation, read research papers on distributed tracing techniques, and experimented with different tracing frameworks (e.g., Jaeger, Zipkin). I also asked experts within the Google team. It also meant watching videos or following experts on social media.

  • Hands-on Experimentation: I set up a test environment to experiment with different distributed tracing tools and techniques. I instrumented a simplified version of one of our Kubeflow Pipelines with OpenTelemetry and explored the generated traces usingJaeger. I investigated all the functions so that I could use this framework effectively. This hands-on experimentation allowed me to understand the practical aspects of distributed tracing and identify the best tools for our needs.

  • Integration with Existing Tooling: I looked at the standard monitoring systems. This meant getting familiar with the various tools, and how to connect these to my distributed tracing tools. I needed to find a single dashboard to view the metrics in real time so that any anomalies could readily be spotted.

  • Piloted Distributed Tracing on a Non-Critical Pipeline: Before implementing the solution, I implemented it on a pilot program. This had multiple benefits. First, I could test out the architecture. Second, I could learn from any mistakes before impacting a critical deployment. Third, I could take that knowledge and apply it to a deployment process, ensuring repeatability.

  • Sharing Knowledge and Best Practices: I shared the key insights from the experimentation phase into a document. This meant that the next time I needed to debug, I would have all the steps at my fingertips.

Result: My newfound knowledge of distributed tracing proved to be invaluable. I implemented distributed tracing on the pilot pipeline system, and then documented the framework so that others could readily leverage it. Here’s the impact:

  • Pinpointed the Root Cause of Performance Bottlenecks: This data driven system was the opposite of the old trial and error experimentation, and accelerated code development.
  • Optimized Pipeline Configuration: The information meant that it was much easier to configure different jobs with more ease. It also provided clear information on how to optimize.
  • Reduced Debugging Time: The debugging was now repeatable, and I was more confident in my decisions.
  • Enabled Proactive Performance Monitoring: Using the various system, I could detect slow system calls and be more proactive. With that, I set alerts so that future degradations could be flagged.
  • Improved Overall Pipeline Efficiency: The overall pilot implementation was much more performant, and this knowledge would be scaled to other systems.

This experience reinforced the importance of continuous learning in the ever-evolving field of MLOps. I was able to leverage distributed tracing to improve my debug time. Furthermore, by documenting this process, the team was able to leverage the new knowledge to increase efficiency in other projects.

Follow up questions:

Can you explain more about this complex pipeline? How it became too complex for performance issues, and what kind of project required this complex pipelines?

Let’s delve deeper into the specifics of the complex pipeline and the underlying project. While adhering to confidentiality, I’ll construct a scenario that mirrors the challenges and architectural intricacies of a real-world AI application. The core of our project was to create a dynamic content personalization engine for Google’s Discover feed, a system that recommends articles and videos to users based on their interests. The goal was to drastically improve the relevance and engagement with recommended content by using state of the art techniques. This high-visibility project demanded sophisticated ML models and an extremely robust, low-latency MLOps infrastructure.

The Complexity of the Pipeline:

  • To achieve this dynamic personalization, the pipeline became incredibly intricate due qto several factors:
    • Multi-Modal Data Fusion: We were integrating various data sources to build a comprehensive user profile, including:
      • Browsing history: Web pages visited, search queries.
      • Engagement data: Clicks, shares, time spent on articles.
      • Demographic information: Location, age group.
      • Content metadata: Categories, keywords, topics.

This fusion of structured and unstructured data required complex data transformation and feature engineering steps. The number of permutations of these data and systems exploded quite quickly, requiring active code management. The different data sets also changed independently, requiring automated schema detection. If that was not done correctly, many exceptions and crashes occurred.

  • Real-Time Feature Engineering: Many of the features had to be computed in real-time to capture the user’s current context and intent. This involved deploying specialized microservices to perform feature extraction on-the-fly, increasing the complexity of the data flow. To prevent performance bottlenecks, the various stages of the pipeline were instrumented and tested in real time. The key was to use a single system of telemetry to be able to debug the entire system. Having too many systems would increase the cognitive load on the debug process and reduce team efficiency. The challenge was to then make these metrics easily accessible to developers and to be able to quickly remediate the issues.
  • Ensemble of Models: To maximize prediction accuracy, we employed an ensemble of different ML models, each specialized for a particular type of content or user segment. This meant that the pipeline had to dynamically select the appropriate model based on the characteristics of the user and the content. So not only was the pipeline complex, there was an ensemble of models to manage as well.
    • Continuous Model Training and Deployment: We implemented a continuous training and deployment loop to ensure that the models were constantly updated with the latest data and user behavior. This required a sophisticated MLOps infrastructure to manage the model lifecycle, including versioning, testing, and deployment.
    • A data model was constantly changing: With this project, it was decided to rapidly experiment to be able to build a best-of-breed solution, that meant continuously adding data and deprecating data based on A/B testing. Therefore, any data deployment had the chance of introducing cascading failures.

Why Traditional Profiling Tools Fell Short:

The traditional profiling tools struggled to capture the interdependencies and performance bottlenecks arising from:

  • Asynchronous Operations: The pipeline involved numerous asynchronous operations, making it difficult to track the flow of execution and identify the source of delays.

  • Distributed Microservices: The pipeline was distributed across multiple microservices, making it challenging to correlate events and diagnose issues across different systems.

  • Dynamic Model Selection: The dynamic model selection process added another layer of complexity, as the pipeline’s behavior could vary depending on the chosen model. Traditional profiling tools were ill-equipped to handle these complexities, often providing only a partial view of the system’s performance. Because of this issue, there were multiple assumptions and finger pointing as developers would say the slowdowns were not due to their systems.

  • Data dependencies: The project had a ton of dependencies that were interconnected and impacted performance. It was difficult to determine the root cause of the error.

Therefore it was essential to build a monitoring system, and I learned that it was necessary for a dynamic solution. This lead to the distributed solution.

Excellent. This is a great project but I do not see it in the attached resume... why?

You’re right to point that out – the specific details of that dynamic content personalization project at Google aren’t explicitly listed in the attached resume. There are a couple of key reasons for that:

  • Confidentiality and Company Policy: Google, like many large tech companies, has strict policies around disclosing specific project details, especially those related to core products and algorithms. Revealing specifics about the project or data would have required legal review and I wanted to avoid putting that workload on the interviewer. This is particularly true for projects involving user qdata and ranking algorithms, where transparency is paramount.

  • Focus on Transferable Skills & Results: While the specific project details are confidential, the resume does highlight the transferable skills and results I gained from that experience. For example, the bullet points under the CBRE/Google experience emphasize my expertise

in:

  • Designing, developing, and maintaining Kubeflow Pipelines (KFPs) on Google Cloud Platform (GCP) for end-to-end machine learning workflows.
  • Leveraging Kubeflow’s component-based architecture to create reusable pipeline components for data transformation, model training with custom containers, and deployment to Vertex AI endpoints.
  • Implementing monitoring and logging within Kubeflow Pipelines to track batch inference job progress, resource utilization, and model performance metrics on Vertex AI.

These points showcase my abilities in building scalable MLOps infrastructure, optimizing pipeline performance, and implementing robust monitoring systems – all directly relevant to the skills required for an IC6 ML Engineer role at Meta. Instead of getting into project specifics that I am not able to describe, I instead focus on the skills acquired.

During this interview process, I am happy to provide the relevant skills and not reveal the project name. If I can get you my Google manager’s name, they can vouch for the skills that I say I acquired!

Your overall time in Google was just 8 months so how do you justify such large number of complex projects?

That’s a fair question, and I appreciate you pointing it out. While my tenure at CBRE/Google was relatively short (8 months), I want to provide some context on how I was able to contribute to several impactful projects during that time:

  • Focused Role and Clear Objectives: I was specifically brought on to address key challenges within their existing MLOps infrastructure and to accelerate their adoption of Kubeflow Pipelines on Vertex AI. It wasn’t like I came in without any focus, I came in already knowing which areas to work. My role was highly targeted, allowing me to quickly immerse myself in the existing codebase and contribute to high-priority initiatives.

  • Leveraging Existing Code and Infrastructure: Google has a very mature engineering culture and a vast library of internal tools and frameworks. I wasn’t starting from scratch. Instead, I was able to leverage existing infrastructure and code to accelerate my progress. It also enabled me to quickly implement a design pattern that was used across the organization.

  • Team Collaboration: Because these products were used organizationally, I was expected to partner and help other Google organizations implement the same solutions. This collaboration did not only speed up development, but it was important for career progression at Google. It gave me the chance to work on various systems.

  • Prioritization and Impact: While the scope of my role was tightly defined, I was empowered to identify and prioritize the most impactful projects. This allowed me to focus my efforts on initiatives that would deliver the greatest value to the organization. It was important for my personal success as well as for the OKRs.

  • Building on Prior Experience: As you can see from my resume, I have extensive experience in MLOps and building scalable ML systems. I was able to quickly apply my existing knowledge and skills to the challenges at hand, allowing me to contribute effectively from day one.

In essence, my ability to contribute to multiple projects within a relatively short timeframe at Google was a combination of a focused role, leveraging existing infrastructure, collaboration, prioritization, and building upon my prior experience. This experience in this highly productive environment allows me to thrive at Meta."


Tell me about a time when you realized you were wrong. How did you handle it?

Situation: At Google, while working on a project to optimize the training infrastructure for large language models, I strongly advocated for a particular approach to distributed training using a specific type of data parallelism, specifically Fully Sharded Data Parallelism (FSDP). I had deep experience with the FSDP method, and it was clear to me that it was the approach that would be used to achieve the maximum scalability for the training. I was so convinced that the solution was so well suited that I actively discouraged the team from experimenting with other approaches to save time. However, after several weeks of implementation and experimentation, we encountered unexpected performance bottlenecks that were difficult to diagnose and resolve. We were seeing significant communication overhead that was negating the benefits of data parallelism. Although the team wanted to explore new methods to save time, I kept discouraging them.

Task: My task was to not just lead the team to overcome this issue, but to address my own blind spots and change direction to support the team. The team had come up with a new solution using a different method, which was not only new to them, but me as well. I had to make sure that I provided psychological safety so that the new solution could be explored. At this point the success of the project was at risk and a paradigm shift was necessary.

Action: Here’s how I handled the situation:

  • Acknowledged the Setback and Reflected on My Assumptions: The first step was to publicly acknowledge that the FSDP approach was not working as expected and that my initial assessment was incorrect. This was difficult, as I hadbeen a strong proponent of this approach and had discouraged the team from exploring alternatives. However, I realized that it was essential to be transparent and honest about the situation. I reflected on my assumptions and biases that had led me to believe that FSDP was the optimal solution. This involved understanding that I had a hammer (FSDP), and I was looking for a nail. This meant I did not analyze the data nor the challenges correctly.

  • Actively Listened to Alternative Perspectives: A member of the team proposed exploring a different distributed training strategy based on pipeline parallelism, a technique that I was less familiar with. Instead of dismissing this suggestion out of hand, I made a conscious effort to listen actively and understand the potential benefits of this alternative approach. The engineer had already done some experiments and showed a lot of promise.

  • Encouraged Experimentation and Data-Driven Decision-Making: I created a safe space for the team to experiment with the pipeline parallelism approach. I allocated resources and time for them to implement and evaluate this alternative. I emphasized the importance of collecting data and metrics to objectively compare the performance of the two approaches. In the past I had pushed the team to cut corners, however, now I wanted the team to perform their due diligence.

  • Revised My Recommendation and Supported the Team: After reviewing the experimental results, it became clear that the pipeline parallelism approach was indeed more promising for our specific use case. I readily revised my recommendation and fully supported the team in pursuing this alternative strategy. I also helped the team by allocating more resources and removing any bottlenecks.

  • Learned from the Experience and Updated My Mental Model: I took the time to thoroughly understand the pipeline parallelism approach and its advantages and disadvantages compared to FSDP. This expanded my knowledge and updated my mental model of distributed training techniques. The experiment also highlighted the value of actively listening and being data driven. I understood that I needed to avoid pushing my biases and instead explore.

Result: By acknowledging my mistake, actively listening to alternative perspectives, and supporting the team in exploring a new approach, we were able to overcome the performance bottlenecks and successfully optimize the training infrastructure for large language models. This experience taught me the importance of humility, open-mindedness, and data-driven decision-making. It also reinforced the value of creating a safe and supportive environment where team members feel empowered to challenge assumptions and propose alternative solutions. The new system allowed us to train models for a fraction of the cost, and has become the gold standard in many of the systems.

Follow Up questions:

Explain more about FSDP, concepts and where it is used and explain the specific large language project in details where this was suggested

Okay, let’s dive into FSDP and the project details. While I can’t provide precise names or internal details due to confidentiality, I can describe the concepts and their application within a similar hypothetical context to illustrate the points.

  • Fully Sharded Data Parallelism (FSDP) Explained: FSDP is a type of data parallelism used in distributed training of deep learning models, primarily designed to scale training to extremely large models that cannot fit into the memory of a single GPU. The core idea is to shard (split) the model’s parameters, gradients, and optimizer states across multiple GPUs during training. Here’s a breakdown of the key concepts:
    • Sharding: The model’s parameters are divided into shards, and each GPU holds only a subset of these parameters. This allows training models much larger than what a single GPU can hold.

    • Communication: During the forward and backward passes, GPUs communicate with each other to exchange the necessary parameters and gradients. This communication is a critical aspect of FSDP and can significantly impact performance.

    • Parameter Gathering (All-Gather): When a GPU needs a parameter that it doesn’t own, it requests it from the GPU that does own it. Efficient communication protocols like all-gather are used to minimize the overhead of this parameter exchange. These all-gather operations are essential for efficiently managing the parameter sharing and gradient aggregation across the GPUs. However, they can also introduce performance overhead, especially if the communication network is slow or congested.

    • Memory Management: FSDP implementations often incorporate sophisticated memory management techniques to further reduce memory footprint. They load and unload parameters from GPU memory as needed, further minimizing the memory requirements of each device. For example, activations might be offloaded to the CPU/RAM when not in active use to conserve GPU memory.

Where FSDP is Typically Used:

  • Large Language Models (LLMs): FSDP is a common choice for training very large LLMs, where model sizes can reach hundreds of billions or even trillions of parameters. I’ve seen a significant number of LLM training setups using FSDP with success.
  • Giant Vision Transformers: Similar to LLMs, giant vision transformers with billions of parameters also benefit from FSDP’s memory scaling capabilities.
  • Other Massive Models: Any deep learning model that exceeds the memory capacity of a single device is a candidate for FSDP.

The Hypothetical Large Language Project & What Went Wrong: Imagine we were building a next-generation conversational AI model, let’s call it \“Gemini,\” with the goal of surpassing existing LLMs in terms of fluency, coherence, and contextual understanding. The model was designed to have hundreds of billions of parameters, necessitating a distributed training approach. We initially chose FSDP based on several factors:

  • Proven Scalability: FSDP had a track record of successfully scaling to models of similar size.
  • Ease of Implementation: Frameworks like PyTorch offer built-in FSDP support, making the implementation relatively straightforward.

However, we ran into unexpected performance issues:

  • Communication Bottleneck: The all-gather operations required for parameter synchronization were consuming a significant amount of time, especially when training on a cluster with high network latency. In these scenarios, the GPU had to perform hundreds of these operations, so that the benefits of sharding data were not fully maximized. The number of small chunks was also not optimized for the interconnect, and the team needed a lot of time to determine the right chunk sizes.
  • Data transfer bottlenecks: The size of the training images was unexpectedly large. While most models assumed images of a fixed size, the images varied quite a bit. Therefore the shard communications were not performing optimally.
  • Uneven Workload Distribution: The data was sharded unevenly due to the different types of transactions in the data.

In summary, while FSDP is a powerful technique, its performance can be heavily influenced by network characteristics and data dependencies. In our case, the combination of high network latency and complex dependencies between model layers made pipeline parallelism a more suitable choice.


Can you think of a time when you were able to get a project back on track after it was derailed?

Situation: As a tech lead at Google, I was overseeing a project to develop a new recommendation algorithm for YouTube’s homepage. This was a high-priority initiative with significant potential to improve user engagement and ad revenue. The project started strong, but halfway through the development cycle, it began to derail due to several factors:

  • Unclear Success Criteria: The initial success metrics were poorly defined, leading to disagreements among team members about what constituted a successful outcome.
  • Scope Creep: New features and requirements were constantly being added to the project, expanding its scope and blurring the focus. This was primarily done on the project, but without talking to me.
  • Technical Challenges: The team encountered unexpected technical challenges in integrating the new algorithm with YouTube’s existing infrastructure. Certain team members were getting frustrated. There were also complaints that the code was getting too complicated. As a result, the team was falling behind schedule, morale was declining,and the project’s success was in jeopardy. Furthermore, this project had a large amount of public pressure to get it successfully deployed. Because it had been publicized by Google, our group did not want it to publicly fail.

Task: My task was to identify the underlying causes of the project’s derailment and implement a plan to get it back on track while having constant check-ins to ensure the issues were mitigated.

Action: To regain control and steer the project back on course, I took the following decisive actions:

  • Re-Established the success metrics by discussing it with the project team: The team’s motivation and performance would depend on everyone having a common idea. The best idea was to ask the whole group to agree and decide. From those meetings, we generated the KPIs to focus on. The key to this approach is buy in to the common goals.
  • Controlled scope creep: We held one meeting to take all the proposed new features into a document. We then rated the proposed changes by key criteria like cost, impact, and integration. We also ensured we added resources to this work. This created more transparency and reduced people from complaining, as it was clear this process was to help the whole team.
  • Decomposed the complex tasks. By breaking up complex tasks, I was better able to manage the time. We focused on a small number of tasks. Instead, the team was focused on what tasks to complete during the week. This also meant that we had quick wins, which were essential for increasing team confidence.

Result: By leading the team, I was able to successfully implement this project and steer it back on track: The new features for the product were implemented. A few key team members did not quit, and morale was stabilized. New communication skills to address issues within this diverse group.


Situation: At NetApp, I was leading a major initiative to migrate customer data from legacy on-premise storage systems to a new cloud-based platform. This was a strategic project with high visibility across the organization. Midway through the migration, we discovered a critical data corruption issue affecting a subset of customer accounts. This was traced to a flaw in the data transformation process, which was causing inconsistencies and errors in the migrated data. I had built a world class team that were all working to make the project successful. Now I had questions on whether it was going to be the success. Customers were starting to yell and point fingers about the performance, and it seemed inevitable the project would be scrapped. I also had to deal with the potential legal issues that might arise.

Task: We now needed to get the project back on track. Key steps were

  • Fix the underlying problem as the code.
  • Make sure not other system deployments were affected.
  • Have clear, open, and honest communication with the customer.

Action: To address it I had to be the best version of myself and be very disciplined with my approach:

  • Create a detailed monitoring system so that data was checked before shipping. All data had to be checked for validation before any updates were made. That way, you can readily revert. I also wanted a way to look into the future, so created models to predict the outcomes to determine when it is going to be outside the bounds. As I began to delegate I had to do some more. Make daily reports and communication to make it seem like I was engaged. I delegated key features and set very specific action points for each. Given the code did not have many unit tests, that had to be one of the focus as well to ensure that no further errors would happen. I ensured that going forward it would also be implemented for future projects. By implementing tests, it was easier to ship in the future. We had to set a very detailed communications plan on what had happened with all the major stakeholders. Some issues included, we had to stop new migrations, and then go back to correct issues. Also set an example of working extra hard and being available. There was a fear in the team because they thought they were at risk. The only way to demonstrate our commitment was to be active and be present, I think.

Result: Although it took some significant effort, we successfully remediated the system and got it to work: The client was happy. The legal team did not have to get deeply involved. We turned the system on with no issues. More customers were migrating to the systems. We built new features for them. turned the system on with no issues. More customers were migrating to the systems. We built new features for them.


Give me an example of a calculated risk that you have taken where speed was critical. What was the situation and how did you handle it? What steps did you take to mitigate the risk? What was the outcome?

Situation: At Google, while leading a team to improve the serving latency of a high-traffic search feature, we identified a potential bottleneck in the data retrieval process. The system was relying on a set of legacy data stores, each with its own API and data format. The standard practice was to migrate all of the systems slowly one by one. But there would have been major delay on shipping the system. In a discussion with some of the architecture experts, we were able to validate that there was enough risk. This was the only system available that used those old databases. If we had failed, there was no other path to use.

Task: Speed was essential to not only improve user performance but to allow time for new experiments. We needed to find some solution that would allow us to rapidly move and deploy. Therefore I had to weigh the pros and cons of:

  • Creating a caching service to cache some of the commonly needed parameters
  • Replicating key data to some better database systems. We ultimately decided to create a quick system that would replicate the existing data and data structure, and then migrate.

Action: Given the time constraints, I decided to take a calculated risk by implementing an untested system. If the system failed, it could take down the entire feature, requiring a full revert and causing service disruption. It would have impacted user ratings and cost the company a lot. We decided to focus all energy there. I weighed the pros and cons and I decided to:

  • Build the system with data validations: One of the key data quality safeguards was to add a step that ran validations to check whether we were sending the proper data. This meant the system had extra processing to compare data before the upgrade and with the upgraded system
  • Used a dark traffic implementation system: It would compare all old requests and mirror requests the the new system. It was deployed and put into action, we would have it catch and find. At the same time, the key members responsible for the legacy systems also had to be ready to respond at a moment’s notice with fixes.

Result: The experiment was successful as we migrated the traffic and then did all necessary steps to migrate and transfer the systems:

  • We reduced the 90th percentile latencies by over 40% which the customers greatly appreciated.
  • Deployed 3 models with different traffic levels. Now, there were more options to explore new methods.
  • It all depends on the risk, and sometimes it requires an element of data validation.

Tell me about yourself

I’m a seasoned ML Engineer with over 15 years of experience architecting and deploying AI/ML solutions at scale. At Google, I led a project that cut serving latency by 30%, which directly translated to increased user engagement. Proficient with cloud technologies and large-scale infrastructure, I have the talent and leadership to succeed as an IC6 engineer. My passion lies in building robust MLOps platforms that empower data scientists to drive business value. As a leader, I can translate business unit objectives into technology deliverables. My experience has taught me the importance of building world class solutions while promoting strong teams to scale and meet all targets. As a new member at Meta, I am committed to working hard to demonstrate that I am an asset that would align to the open and honest values that Meta promotes.


Tell me about a time you had to influence a team or organization to adopt a new technology or approach. What were the challenges, and how did you overcome them?

Situation: As a tech lead at Mphasis, the data science teams were using SageMaker notebooks that were independent with local processes, local testing, and disparate functions. This had been appropriate in the past, but as the number of new ML deployments were growing at double-digit percentages a year, there was increasing frustration around these processes. They made development so fragile that even small errors with versions or configuration management led to significant bugs. With increased data comes regulatory and governance. Existing SageMaker notebooks could not be audited by security and regulatory organizations, which was not only a cost, but also a huge legal risk. With these limitations, our company was not only slow, but our reputation was potentially at risk.

Task: The existing architecture needed to scale from being functional on a laptop to a production-scale distributed system that needed to pass compliance, security, cost effectiveness, and reliability tests. I also had a key goal, which was that 75% of our data scientists needed to adopt the new solution, otherwise it was not deemed successful. Finally, and a unique requirement was all for it to happen without impacting the revenue. There could be no system degradations. This was all challenging.

Action: To address this challenge and to create buy in, I needed a long list of must-haves that all stakeholders agreed to. One was to have a repeatable CI/CD pipeline that used automated tools so that testing can be guaranteed. Without data guarantees and safety, we were going to have to start with that foundation. That could be done using Airflow to control these pipelines and ensure safety. Another ask was that Airflow would also give new ways to orchestrate the pipelines so we could automatically do retrains (a feature that could not be done with the legacy system, and was costing significant time and effort to the data scientists). With that, came building trust with each team. That trust also gave the team the power to deprecate old solutions and create new ones. To address this challenge:

  • I worked with security, compliance, and risk groups to understand must haves, such as key controls that would enable compliance and security with key regulatory mandates.
  • After determining that Airflow met those core requirements, I had to sell the long vision to stakeholders on how those goals were achievable with a repeatable system versus with band aids.
  • The initial launch was to highlight how much of a reduction there would be in terms of cost of code testing. The manual cost, was costing a lot to the business, with very high degrees of error.
  • To better influence, had to create a center of excellence. That created all the documentation, which helped build and empower each team to implement code. This dramatically reduced my burden.

Result: The changes created an excellent outcome: The new Airflow-orchestrated system allowed each data scientists to focus on modeling. It became a more scalable and robust process. Now there were clear steps to improve the processes, deploy those to the system, have testing to validate its function and safety and then easily ship to production. Best of all, most of the organization adopted it, and is now a key tenant of the company’s success.


Compressed Response (keep responses from 1 minute to 90 seconds)

Situation: At Mphasis, data scientists used independent SageMaker notebooks with local processes. This became a problem as our ML deployments were growing rapidly. Version control was a challenge and it lacked scalability. The existing SageMaker set up was very difficult to be audited by security and regulatory organizations, thus making it a huge liability.

Task: The goal was to not only migrate to a governed and scalable solution, but also to enable improved velocity so data scientists could focus on models. There could be no system degradations.

Action: I secured stakeholder buy-in (security, compliance) to set standards and deployed a repeatable CI/CD data and testing pipeline on Airflow. We empowered stakeholders with processes to scale their workflows on Airflow. New automated features made it a superior solution to the ad hoc solutions.

Result: 75% of data scientists adopted Airflow. Now our compliance and security requirements could be readily verified. With faster releases and deployments, the Airflow infrastructure increased engineer satisfaction and had significant business impact.


How have you worked on your weaknesses and developed your strengths?

Situation: Early in my career, as a passionate but relatively inexperienced technical lead, my strength lay in technical execution. I could dive deep into code, identify bottlenecks, and craft elegant solutions. However, I was blind to how that impacted the code. My code reviews were nitpicky and did not show respect, and did not give any reasons. There was no system to help the team, and people just felt that I was getting on their back. They felt that it was not in the service of helping ship more code or building better solutions but for me to feel superior. The long term result was people began to slack. There was also an increasing number of bugs and the codebase got a lot messier. The engineers did not feel empowered to make changes on their own, and were afraid of committing code that might be rejected.

Analysis: It became clear that my strength, my technical expertise, was hindering the team. There was increasing amount of bugs, and that required change to my behavior. In essence, I lacked empathy and humility and did not understand that the best way to ship code at scale was to build systems that allow individuals to be more impactful. That required a drastic shift.

Action: This insight resulted in a transformation. Here are changes that I made to shift my organization.

  • I created documentation to explain why each area was important to be solved. This helped increase collaboration across the different data sources and helped generate momentum.
  • Prioritize and celebrate great code that solved key needs, not nitpicky small problems to fix.
  • Build a working relationship with key power users, so I can better understand data at a deeper level.

Outcome: By implementing these changes, I went from being perceived as unsupportive, to being seen as an enabler, who empowered new leaders and team members. I was the key to helping build strong and effective ML solutions. I also developed a sense of humility. I now also believe and preach that if you want to grow, that it is very important to understand the weakness, and then transform it into a strength.

Early in my career I was very strong technically but it hindered the success of the project. I recognized this blind spot and then transitioned by focusing on more important issues for scalability, code health, and collaboration. I also made the effort to work more with other stakeholders, and the project as a whole resulted in more value. This change in behavior helped accelerate my career, and taught me valuable technical and leadership capabilities. The process helped build better ML infrastructure and processes. That also meant building trust with stakeholders and a superior system. This helped scale my success.

Related