Dataford
Interview QuestionsInterview GuidesExperiencesMock InterviewsPricing
Get started

Refactor for Readability

MediumCoding00:00
Practice interviewer
In session
5 left
00:00

Your question is Refactor for Readability. Take a moment with it on the right.

Talk me through your thinking if you like. When you're confident, submit your answer and I'll grade it like a real screen (7/10 or better passes).

You need to log in / sign up to chat or submit.

Problem

Pigment tracks planning "scenarios" whose confidence score should drift over time as deadlines approach, the same way the classic Gilded Rose kata ages inventory quality. A Software Engineer candidate is handed this real function from that part of the codebase and told a new scenario type needs to be added, but every previous attempt to touch this function has introduced a regression.

def update_scenarios(scenarios):
    for i in range(len(scenarios)):
        if scenarios[i].name != "Aged Assumption" and scenarios[i].name != "Hiring Forecast":
            if scenarios[i].confidence > 0:
                if scenarios[i].name != "Board Deck":
                    scenarios[i].confidence = scenarios[i].confidence - 1
        else:
            if scenarios[i].confidence < 50:
                scenarios[i].confidence = scenarios[i].confidence + 1
                if scenarios[i].name == "Hiring Forecast":
                    if scenarios[i].daysRemaining < 11:
                        if scenarios[i].confidence < 50:
                            scenarios[i].confidence = scenarios[i].confidence + 1
                    if scenarios[i].daysRemaining < 6:
                        if scenarios[i].confidence < 50:
                            scenarios[i].confidence = scenarios[i].confidence + 1
        if scenarios[i].name != "Board Deck":
            scenarios[i].daysRemaining = scenarios[i].daysRemaining - 1
        if scenarios[i].daysRemaining < 0:
            if scenarios[i].name != "Aged Assumption":
                if scenarios[i].name != "Hiring Forecast":
                    if scenarios[i].confidence > 0:
                        if scenarios[i].name != "Board Deck":
                            scenarios[i].confidence = scenarios[i].confidence - 1
                else:
                    scenarios[i].confidence = scenarios[i].confidence - scenarios[i].confidence
            else:
                if scenarios[i].confidence < 50:
                    scenarios[i].confidence = scenarios[i].confidence + 1

Explain how you would refactor this to be readable and easy to extend with a new scenario type, without changing any of its existing behavior.