Mix and Match LP Flashcards
Tell me about a time you had to deal with a difficult customer
Situation:
I had shipped a Java batch change that would withhold amounts from benefits issued to our client’s vendors if the vendors owed any money to the federal government.
Task:
The batch was not supposed to withhold any payment from the vendor that we were dealing with. Although, we did not withhold any payment and correctly issued the entire amount to the vendor, the program did not update one of the columns in a table correctly. There was a report generation program that relied on the data my batch populated and displayed the total amount that was withheld on a day. On that day, we were not supposed to withhold any amount but since table data was incorrect, report showed that we withheld payments for 4/2000 issuances.
Action:
Our client, the state government was disappointed because they were supposed to send that report to auditors to make sure money was issued correctly. So, they sent an email criticizing our firm for not avoiding the error. We did not know about this bug and our Java batch was supposed to run on the same night we got the email. So, imagine how disappointed they would be if they saw that we had messed up yet another report the following morning. To make sure that did not happen, I prepared quick data fix queries to fix the data discrepancy before client even looked at the report so that when they looked at the report, the data was correct.
Result:
This small but quick action saved the reputation of the firm and our trust with the client did not deteriorate further. We fixed the bug and shipped the fix the same day and that day was resolved.
Tell me about a time you made something much simpler for customers
Situation:
We had developed a web portal through which state citizens could apply for COVID related financial assistance. We were going live in 2 days but our client, a state government made a late request to develop the portal in Spanish as well.
Task:
Our task was already daunting as we would have to write new code, unstabilise a stable build and ship the change to prod in 2 days. We developed the portal in Spanish but when I was doing an end-to-end testing, I noticed that some of the translations in a page that my fellow developer had written had incorrect translations because some text on the translated document she received was incorrect.
Action:
We reached out to our client for correct translations but we did not hear back. Since this was a critical portal and we were expecting a good number Spanish speaking applicants, we could not afford to have incorrect translations. So, I called one of the leads in another team since I knew he was a native Spanish speaker for correct translations.
Result:
Ideally, we should have gotten the correct translations from our client itself. But since delay would lead to either a lot of confusion because of incorrectly translated document or our change being shipped late, the decision that we took was a correct one and client appreciated our proactivity and the citizens viewed correct translations.
Which company has the best customer service and why?
Situation:
I would say Gold’s Gym, Camp Hill. That’s the gym I work out at. Before I joined Gold’s gym, I thought it was only for buff dudes and girls drinking water in sets and reps like that video of Arnold going undercover in Gold’s gym asking people to drink water in repetitions. But, even for someone not so buff, I found Gold’s gym to be welcoming.
Action:
For instance, some businesses try to avoid pronouncing my name because it sounds foreign. But, every time I meet a new front desk staff, when I check in, they see my name on the screen and greet me by my name. Then, they remember my name and greet me when I see them around the gym.
Result:
As Dale Carnegie says, a person’s name is to that person, the sweetest, most important sound in any language, seeing the way Gold’s gym front desk staff treats me makes me feel welcome.
Tell me about a time you said no to a customer request and why
Situation:
There are two layers of customers in this story. First, is Deloitte’s client, a state government that was actually paying Deloitte to build and maintain their system. Second, is the end users, i.e the state citizens that relied on our system to get benefits. I said no our client’s request.
Task:
Our client’s manager wanted an ad hoc benefit distribution report and had requested the report through a business analyst preferably by eod. Since it was coming from a client’s manager, we prioritize tasks like that to make our clients happy. But, on that day, I was triaging production tickets for our team and noticed that a person had not received fuel related benefits and could not afford heating. So, I was debugging why that was happening.
Action:
By the time I found out what the issue was, it was 6 o’ clock and since the report was not a simple report with a few joins, it would take me at least 4 hours to prepare the report through SQL. So, I did not work on the report and instead I started preparing data fixes for the benefits issue.
Result:
I am sure my decision made our client dissatisfied and the business analyst frustrated as they did not get the report they wanted.
But, the person I was trying to help did receive the benefits after next issuance batch run. Although I did not get any recognition from person or from a manager for the simple production ticket I triaged, I knew what I did was the right thing to do.
Tell me about a time you did something at work that wasn’t your responsibility / in your job description
Situation:
I was working on a task to enhance an existing validation rule for an application that was supposed to validate if the sum of power of servers in a datacenter was greater than the power allocated for that datacenter. It was a simple enhancement where we had to categorize the data by one additional server component in Python and use the category that we added in frontend to allow the user to filter the data based on the category.
Task:
I implemented the change but I noticed that the existing code was not optimal. First, we made a deepcopy of server orders we were supposed to validate. And then, we iterated through the list once and filtered out orders that had none fields for the fields we were interested in. And we grouped the remaining orders by datacenter and for each group validated if the sum of order power was greater than power limit.
Action:
After I implemented what I needed to implement, I started changing the existing code. First, I removed deepcopy of server orders. Then, I removed the filter method and added the constant none checks to grouping method. Then, when validating each group, we were doing a linear scan of power supply list and see if we had a match a datacenter. I removed that and instead created a map of datacenter to power supply.
Result:
My actions not only delivered the change that our client asked for but also made the existing code faster by removing two linear scans of servers data and for each group, remove a linear scan of power supply data to a constant lookup in map. So, the time complexity improved from 3Nk to 2N
Describe an instance where you had to make an important decision without approval from your boss
Situation:
I had participated in a design session where our team was designing a new functionality that would allow reassignment of credit authorizations associated with one vendor to another vendor. Credit auth means the amount of money the government owes a vendor for providing energy related service like heating or cooling to the government’s citizen.
Task:
My task was to implement the design that we had agreed on. The design was we had a screen that allowed user to enter old vendor and new vendor and on click of submit, the credit authorizations associated with old vendor would be transferred to new vendor. But, few days after the design session, when I was writing tests, I figured that the design was not scalable. It was December and out of the 3 people who were aware of initial design, I was only one working then as my lead was on PTO and another senior business analyst was on paternity leave.
Action:
So, instead of waiting to deliver the change after holidays period when the entire team was available or bothering my lead when he was on PTO, I scraped the original design and implemented an asynchronous design where on click of submit, a trigger would be created in the database and a new nightly batch would read the trigger and would reassign the credit auths in the backend. Because, if we were to do this synchronously, making the user wait until a million or so DML statements executed was simply not acceptable.
Result:
When we load tested the batch, we found out that the batch was able to handle 20 times the production load without getting overwhelmed. So, the result was a much more scalable design.
Tell me about a time you took ownership of a problem that was not the focus of your organization
Situation:
A team I was working on had a knowledge transfer (KT) process that was very verbal. So, few people knew about the system, those few people were heavily involved in designing systems and other team members were heavily reliant on those select team members for functional knowledge. This was a problem because few team members were overburdened, information was not readily available, people were wasting time waiting for responses from people who were overburdened and this created a culture that was not inclusive, was not good for well-being and led to potentially sub-optimal decisions because everyone could not contribute.
Action:
So, I raised my concern but my concern was not prioritized because we were too busy. So, to prevent situation like this in components I knew about, I created KT documents that clearly explained how the systems worked and emailed the documents to my entire team. If I had a knowledge gap, I emailed someone who knew more than the documents I had prepared to verify my understanding.
Result:
For the components that had knowledge transfer documents, onboarding was much easier. Not just that, the amount of meetings that needed to be set up to explain something basic decreased. This improved productivity and hence well-being of the team and encouraged people working in other components to do the same so that functional information was readily available.
When was the last time that you sacrificed a long-term value to complete a short-term task?
Situation:
I was taking over a Java batch change that a developer had written. The batch was supposed to withhold payments to vendors if the vendors owed money to the federal government.
Task: Since I had taken over the change, I oversaw resolving any defects related to the change. So, we had this defect where we were not distributing the withholding amount uniformly across cases associated with a vendor. I was looking at the class where primary withholding logic occurred, I noticed that the code quality was terrible. For instance, 3 programs used the same batch for withholding and the core withholding logic was same. The only difference was where we got the data for those 3 programs. The code was written something like this. If program is a fuel program, apply one withholding logic. If it is a cooling program, apply the same withholding logic. So, instead of refactoring common withholding logic, they were a bunch of if statements and inside those statements, same withholding logic with just a few minor changes was there.
Action:
Since there was a high severity bug raised for the change, instead of refactoring the code, I made a change in logic in 1 place and copied the same change over in another place and shipped the code. So, I did the same thing I was not happy with in the first place.
Result: While the bug was closed because of the fix, I knew that a code like that would be difficult to maintain and could lead to more bugs down the line. Plus, although I took over the change from someone else, it would be embarrassing to be associated with a program that had a terrible code. We received another change request for the same batch. I took that opportunity to refactor the class and modularize the code to make it more maintainable.
Tell me about a time you had to change your approach because you were going to miss a deadline
Situation:
My co-worker was lagging on a sprint task assigned to him. He was working on a change to select a version of program A in frontend and pass that version to backend to validate data in program B against. Although he was getting data almost correctly in the frontend, he had not written any backend code and the task was due that day.
Task:
Since he did not have much experience with our Python codebase, he sought my help to brainstorm implementation and testing. The task was due in a few hours. First, I asked him how he was planning on completing the task by the deadline and he mentioned that he was referring a diff that had implemented a similar task. While that was a good idea, he was struggling to write tests as he had no experience with them and had not started developing. If he had focused on writing complex tests given his lack of experience and given how long tests take to run, there was no way he could complete the task.
Action: So, I suggested him to use an alternative Python script, instantiate an object of his class in the script and call the method he was writing with some sentinel data. This would be much quicker. So, I told him to prepare some test scenarios and test them by adding print statements in the method that was being called so he could validate if he was getting the correct value in backend. Since we still needed to do regression testing to validate data, I asked him not to do that in backend and instead, integrate frontend with backend first. Since I had delivered a same change but for another app, my diff had a detailed test plan that even a non-technical user could validate if my diff was working properly. So, if he got exact results as in test document I had attached to the diff, we could conclude that data was correct.
Result:
Although testing through a temporary Python script is a hacky idea, it was a good call here as it saved him a lot of time. Not gonna lie. He was still not able to complete that task that day, but he was able to send the changes for review which would not have been possible without using the alternate plan we did.
Tell me about a time when you launched a feature with known risks
Situation:
At a hackathon in my senior year at college, we were building a safety application that allowed users to add a list of trusted contacts. And if the user felt unsafe, they could press a button and our system would send the list of trusted contacts a text saying that their friend, say Sarah has turned on live tracking and is at the following location and we would send a live tracking link in that text.
Task:
We were working together but were working on our individual assignments. Like, I was focusing on calling the Twillio API to send text alerts to a list of trusted contacts. But one of my other friends was working on db integration. The method that I had written accepted a list of contacts and would send the text to people in that contact list. Although our individual components were working on our individual machines, we started doing integration testing 2 hours before our demo.
Action:
And of course, our application did not work because of an issue with firebase db. We could not quite figure out what the exact issue was. And after 24 sleepless hours of coding, we were getting discouraged. We needed plan B. While my team-mates were trying to resolve the issue, I started simulating a database using Java code.
I was doing something similar anyway to unit test my code. So, instead of storing a list of contacts in db, we stored in an arraylist. So, I pushed my changes and was able to have an end to end application on my machine.
Result:
We demoed the “Java db” simulation code that I wrote in the last minute. The hacky db alternative code that I wrote was inefficient but did not break and got us through the demo. Of course, that experience taught me early on that integration testing was critical before claiming that a project should work. But, I also learned that sometimes, it is important to step out of that loop where we think that we need to have something perfect and have alternatives that are not optimal but will could get you over the line.
Tell me about a time you had a conflict with a coworker or manager and how you approached it
Sure, let me tell you about I confronted my team lead because of an unpleasant tone he used with one of my team members.
Situation:
One of my team members had made schema changes to a table in lower testing environment. But quality assurance team had tested his change in a higher staging environment and his change broke the page the tester was testing. So, because of time sensitivity of the change, the tester had raised a critical defect on the issue. My team lead went ballistic on the developer who implemented the change.
Task:
Although I understood my team lead’s frustrations because we had a similar issue couple of weeks ago, I did not think that it was right for him to use such a derogatory tone with a professional in front of the entire team.
Action:
To avoid escalating the situation any further, I did not speak up during the call but after my team lead and I were done with a brainstorming session later in the day, he brought up that same thing again. That’s when I told him, I understand that you were on close terms with him and have a rapport with him. But, it was wrong of you to use that tone in our standup call. Since there were couple of new team members still acclimatizing to the team, such an action gives them a bad impression of the team culture.
Result:
My lead was defensive but he understood what I meant. So, he asked what I would have done. Other than dealing with the situation offline, I would take this as an opportunity to focus on positive reinforcements instead of criticism because that’s proven to be more effective anyway. He incorporated my feedback and started managing his temper and started giving positive reinforcements. I am sure that helped create a better culture in the team.
Tell me about a time you disagreed with your team and convinced them to change their position
Situation:
I was working on a change that validated if the racks in a server order request were racks that were being used in production and were not old racks that were deprecated. I had worked on something similar where I validated the accuracy of cost data returned by an API. The validation logic was something like if the racks were active and being used, they should have cost that’s greater than 0.
Task: Since I had written code to get the racks that were being used in production, I wanted to reuse that code for the new change. So, I refactored the old validation class and created a base class and then had two child classes extend the parent class and override just a couple of methods to implement any unique validation logic. But my manager did not approve my code changes because of two concerns. Seeing more than expected diff changes, she thought I was had more lines of code and was overcomplicating things. And I was modifying a tested, stable code.
Action: I proved that my approach led to less lines of code by calculating the number of lines I removed from the old validation class and the number of lines that I would have added if I had not refactored my code. I understood her second concern of destabilizing a stable code. But I had done a thorough regression to make sure that my changes did not break the system.
Result:
I ultimately convinced her to change her position because the refactoring was not a monumental effort, and it was an opportunity for us to continue having a maintainable code. Ultimately, a maintainable code makes a system easy to grasp, scalable and will lead to less headache in the long term. She accepted my changes.
Tell me about a time you had a conflict with your team but decided to go ahead with their proposal
Situation:
I was designing an alert system where the trigger for the alert event would be a user action. If a user clicked on a button in UI, the frontend would make a request to the backend. The backend would call an API of another service to get the validation results. Then, my API would comb through the validation results to create alerts (which was tasks + emails) for any violations and assign them to point of contact for the product group with those violations.
Task:
I had suggested a design where we would allow the user to click the button and then let backend do its thing and show a pop-up message telling the user to keep an eye on their task board for any tasks with new violations. This is because the existing API that would validate results would take around 45 s and task generation would take around 30 s and it would be a bad user experience to make the user wait for 1.5 minutes. My client’s manager disagreed with my design.
Action:
My definition of good user experience and her definition of good user experience were different. She argued that the user should know the validation results in that screen itself without going to task board so if there were issues, they could resolve the issues right then even if that meant waiting for 1.5 minutes. This would save user the burden in the long run because this would mean the user would not submit bad server orders.
Result:
Of course, if we could have written a new API to validate the results quicker, that would have been the ideal case. But, that was not possible in that sprint. So, I went ahead with her suggestion because the entire point of the alert system was to minimize bad server orders. She was also trying to provide value to our customers but in a different way.
Tell me about a time your work was criticized
Situation:
I had developed a web page that had a field to enter a vendor id and since it’s difficult to remember vendor ids, I had also placed a pop-up component besides my text box that on click would open a pop-up window and allow the user to search by vendor names, address, etc. I had demoed the change to my lead, and he was okay with it. But, since I was not entirely satisfied with the aesthetics of pop-up, I decided to replace the old pop up with a more visually appealing pop-up icon.
Task:
When the QA tester tested my change the next day, he raised a critical defect on my change because the pop-up search window although displayed vendor results, it did not have a submit button so the value that user selected was never filled in the vendor id textbox. In other words, it was useless.
Action:
My team lead criticized that I had delivered a change without testing and claimed that if there was a critical defect raised on first day of testing, he wondered how many more defects the system I implemented would have because the pop-up was very small part of it. I heard him out and his concern was valid, but I assured him that the system was robust and well tested and did not have bugs. Since I had worked so hard to implement that system, I was hurt because of his comments, and I did not think they reflected the work I had put in.
Result:
I just fixed the defect. And the QA tester was not able to find any more defects on that page and he was able to complete testing faster than anticipated. Apart from that one defect I introduced by making a late change, my implementation and thorough testing saved the team time allowing us to focus on other items.
Tell me about a time you suggested a new approach
Situation:
Our goal was to design an alert notification system that would validate a system, in this case, a system that allowed a user to create and allocate expenses for server orders. And for this use case, my manager had suggested a tool that was a critical monitoring system that would validate a data from a source query against a metric and raise alerts if the data violated the metrics.
Task:
I explored the tool and learned that it was a bit complicated. It needed time series data as a source. And the data we were supposed to validate was not a natural candidate for this. We would also have to write a completely new validation query. I had a requirements discussion call with our client in an hour and our team did not have a clear idea on how to approach this problem.
Action:
So, I asked myself how I could implement this with as little effort and as less resources as possible. So, I suggested having a simple on click listener in frontend. On click of a button, it would call an API that would call another API that already did the exact same validation. All we had to do was call Facebook’s task generation API which was well documented. The task generated by the API would serve as alerts. The tasks came with other notifications like emails and people could interact on the tasks.
Result:
This met our requirements without having to re-invent the wheel. And, also fit our agile development style where we would build a simple version and then iterate on the version.