one. I could not make sense of the code base and felt frustrated. At the time, I had 19 years of programming experience. …a simple task would take me multiple days longer than I thought…
one. I could not make sense of the code base and felt frustrated. At the time, I had 19 years of programming experience. …a simple task would take me multiple days longer than I thought. I felt dumb and helpless.”
an honest conversation about the problem. • Developers argued to stop developing new features to clean everything. • Project management (rightly) pushed back. • They negotiated to reserve every other Friday to reduce tech debt.
improved • delivered features faster • nearly all "embarrassingly unnecessary incidents” eliminated • enabled them to make better judgment calls when we had to cut corners due to the time constraints • enjoyed their daily work more • inspired other teams to do the same
help python developers and teams reach their potential by temporarily joining teams and improving how they build software. https://everydaysuperpowers.dev
• Change Reference to Value • Change Value to Reference • Collapse Hierarchy • Combine Functions into Class • Combine Functions into Transform • Consolidate Conditional Expression • Decompose Conditional • Encapsulate Collection • Encapsulate Record • Encapsulate Variable • Extract Class • Extract Function • Extract Superclass • Extract Variable • Hide Delegate • Inline Class • Inline Function • Inline Variable • Introduce Assertion • Introduce Parameter Object • Introduce Special Case • Move Field • Move Function • Move Statements into Function • Move Statements to Callers • Parameterize Function • Preserve Whole Object • Pull Up Constructor Body • Pull Up Field • Pull Up Method • Push Down Field • Push Down Method • Remove Dead Code • Remove Flag Argument • Remove Middle Man • Remove Setting Method • Remove Subclass • Rename Field • Rename Variable • Replace Command with Function • Replace Conditional with Polymorphism • Replace Constructor with Factory Function • Replace Control Flag with Break • Replace Derived Variable with Query • Replace Error Code with Exception • Replace Exception with Precheck • Replace Function with Command • Replace Inline Code with Function Call • Replace Loop with Pipeline • Replace Magic Literal • Replace Nested Conditional with Guard Clauses • Replace Parameter with Query • Replace Primitive with Object • Replace Query with Parameter • Replace Subclass with Delegate • Replace Superclass with Delegate • Replace Temp with Query • Replace Type Code with Subclasses • Return Modi fi ed Value • Separate Query from Modi fi er • Slide Statements • Split Loop • Split Phase • Split Variable • Substitute Algorithm
what you want to change. 2. Duplicate the implementation. 3. Adjust the code as necessary to cover all cases, running tests every time you make a change. 4. Reroute original code to new code, one instance at a time, and run tests. 5. Remove old implementation. 6. Test again.
fl exible languages in mind • Are “destinations” you can take your code to Bottom-up • Starts with your code • A series of small steps allow good design patterns to emerge
str: if verse == 2: return dedent("""\ On the second day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree. """) else: return dedent("""\ On the first day of Christmas my true love gave to me: a Partridge in a Pear Tree. """) 1.Identify what to work on 1.Find the things that are most alike 2.Identify the smallest di ff erence between them 2.Make them identical. 1.Create a component to resolve the variations. 2.Implement code to supply one variation. 3.Replace one of the di ff erences with a call to the component. 4.Delete any unused code 5.Repeat until the di ff erences are eliminated
str: if verse == 2: return dedent("""\ On the second day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree. """) else: return dedent("""\ On the first day of Christmas my true love gave to me: a Partridge in a Pear Tree. """) 1.Identify what to work on 1.Find the things that are most alike 2.Identify the smallest di ff erence between them 2.Make them identical. 1.Create a component to resolve the variations. 2.Implement code to supply one variation. 3.Replace one of the di ff erences with a call to the component. 4.Delete any unused code 5.Repeat until the di ff erences are eliminated
str: if verse == 2: return dedent("""\ On the second day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree. """) else: return dedent("""\ On the first day of Christmas my true love gave to me: a Partridge in a Pear Tree. """) 1.Identify what to work on 1.Find the things that are most alike 2.Identify the smallest di ff erence between them 2.Make them identical. 1.Create a component to resolve the variations. 2.Implement code to supply one variation. 3.Replace one of the di ff erences with a call to the component. 4.Delete any unused code 5.Repeat until the di ff erences are eliminated
str: if verse == 2: return dedent("""\ On the second day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree. """) else: return dedent("""\ On the first day of Christmas my true love gave to me: a Partridge in a Pear Tree. """) 1.Identify what to work on 1.Find the things that are most alike 2.Identify the smallest di ff erence between them 2.Make them identical. 1.Create a component to resolve the variations. 2.Implement code to supply one variation. 3.Replace one of the di ff erences with a call to the component. 4.Delete any unused code 5.Repeat until the di ff erences are eliminated
str: if verse == 2: return dedent("""\ On the second day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree. """) else: return dedent("""\ On the first day of Christmas my true love gave to me: a Partridge in a Pear Tree. """) 1.Identify what to work on 1.Find the things that are most alike 2.Identify the smallest di ff erence between them 2.Make them identical. 1.Create a component to resolve the variations. 2.Implement code to supply one variation. 3.Replace one of the di ff erences with a call to the component. 4.Delete any unused code 5.Repeat until the di ff erences are eliminated
str: if verse == 2: return dedent("""\ On the second day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree. """) else: return dedent("""\ On the first day of Christmas my true love gave to me: a Partridge in a Pear Tree. """) 1.Identify what to work on 1.Find the things that are most alike 2.Identify the smallest di ff erence between them 2.Make them identical. 1.Create a component to resolve the variations. 2.Implement code to supply one variation. 3.Replace one of the di ff erences with a call to the component. 4.Delete any unused code 5.Repeat until the di ff erences are eliminated
str: if verse == 2: return dedent("""\ On the second day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree. """) else: return dedent("""\ On the first day of Christmas my true love gave to me: a Partridge in a Pear Tree. """) 1.Identify what to work on 1.Find the things that are most alike 2.Identify the smallest di ff erence between them 2.Make them identical. 1.Create a component to resolve the variations. 2.Implement code to supply one variation. 3.Replace one of the di ff erences with a call to the component. 4.Delete any unused code 5.Repeat until the di ff erences are eliminated verse ??? 1 ` fi rst` 2 `second` 3 `third`
str: if verse == 2: return dedent("""\ On the second day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree. """) else: return dedent("""\ On the first day of Christmas my true love gave to me: a Partridge in a Pear Tree. """) 1.Identify what to work on 1.Find the things that are most alike 2.Identify the smallest di ff erence between them 2.Make them identical. 1.Create a component to resolve the variations. 2.Implement code to supply one variation. 3.Replace one of the di ff erences with a call to the component. 4.Delete any unused code 5.Repeat until the di ff erences are eliminated verse Nth 1 ` fi rst` 2 `second` 3 `third`
str: if verse == 2: return dedent("""\ On the second day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree. """) else: return dedent("""\ On the first day of Christmas my true love gave to me: a Partridge in a Pear Tree. """) 1.Identify what to work on 1.Find the things that are most alike 2.Identify the smallest di ff erence between them 2.Make them identical. 1.Create a component to resolve the variations. 2.Implement code to supply one variation. 3.Replace one of the di ff erences with a call to the component. 4.Delete any unused code 5.Repeat until the di ff erences are eliminated
recite(verse: int) -> str: if verse == 2: return dedent("""\ On the second day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree. """) else: return dedent("""\ On the first day of Christmas my true love gave to me: a Partridge in a Pear Tree. """) 1.Identify what to work on 1.Find the things that are most alike 2.Identify the smallest di ff erence between them 2.Make them identical. 1.Create a component to resolve the variations. 2.Implement code to supply one variation. 3.Replace one of the di ff erences with a call to the component. 4.Delete any unused code 5.Repeat until the di ff erences are eliminated
recite(verse: int) -> str: if verse == 2: return dedent("""\ On the second day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree. """) else: return dedent("""\ On the first day of Christmas my true love gave to me: a Partridge in a Pear Tree. """) 1.Identify what to work on 1.Find the things that are most alike 2.Identify the smallest di ff erence between them 2.Make them identical. 1.Create a component to resolve the variations. 2.Implement code to supply one variation. 3.Replace one of the di ff erences with a call to the component. 4.Delete any unused code 5.Repeat until the di ff erences are eliminated
def recite(verse: int) -> str: if verse == 2: return dedent("""\ On the second day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree. """) else: return dedent("""\ On the first day of Christmas my true love gave to me: a Partridge in a Pear Tree. """) 1.Identify what to work on 1.Find the things that are most alike 2.Identify the smallest di ff erence between them 2.Make them identical. 1.Create a component to resolve the variations. 2.Implement code to supply one variation. 3.Replace one of the di ff erences with a call to the component. 4.Delete any unused code 5.Repeat until the di ff erences are eliminated
def recite(verse: int) -> str: if verse == 2: return dedent("""\ On the second day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree. """) else: return dedent("""\ On the first day of Christmas my true love gave to me: a Partridge in a Pear Tree. """) 1.Identify what to work on 1.Find the things that are most alike 2.Identify the smallest di ff erence between them 2.Make them identical. 1.Create a component to resolve the variations. 2.Implement code to supply one variation. 3.Replace one of the di ff erences with a call to the component. 4.Delete any unused code 5.Repeat until the di ff erences are eliminated
def recite(verse: int) -> str: if verse == 2: return dedent("""\ On the second day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree. """) else: return dedent("""\ On the first day of Christmas my true love gave to me: a Partridge in a Pear Tree. """) 1.Identify what to work on 1.Find the things that are most alike 2.Identify the smallest di ff erence between them 2.Make them identical. 1.Create a component to resolve the variations. 2.Implement code to supply one variation. 3.Replace one of the di ff erences with a call to the component. 4.Delete any unused code 5.Repeat until the di ff erences are eliminated
def recite(verse: int) -> str: if verse == 2: return dedent("""\ On the second day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree. """) else: return dedent(f"""\ On the {nth()} day of Christmas my true love gave to me: a Partridge in a Pear Tree. """) 1.Identify what to work on 1.Find the things that are most alike 2.Identify the smallest di ff erence between them 2.Make them identical. 1.Create a component to resolve the variations. 2.Implement code to supply one variation. 3.Replace one of the di ff erences with a call to the component. 4.Delete any unused code 5.Repeat until the di ff erences are eliminated
def recite(verse: int) -> str: if verse == 2: return dedent("""\ On the second day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree. """) else: return dedent(f"""\ On the {nth()} day of Christmas my true love gave to me: a Partridge in a Pear Tree. """) 1.Identify what to work on 1.Find the things that are most alike 2.Identify the smallest di ff erence between them 2.Make them identical. 1.Create a component to resolve the variations. 2.Implement code to supply one variation. 3.Replace one of the di ff erences with a call to the component. 4.Delete any unused code 5.Repeat until the di ff erences are eliminated
def recite(verse: int) -> str: if verse == 2: return dedent("""\ On the second day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree. """) else: return dedent(f"""\ On the {nth()} day of Christmas my true love gave to me: a Partridge in a Pear Tree. """) 1.Identify what to work on 1.Find the things that are most alike 2.Identify the smallest di ff erence between them 2.Make them identical. 1.Create a component to resolve the variations. 2.Implement code to supply one variation. 3.Replace one of the di ff erences with a call to the component. 4.Delete any unused code 5.Repeat until the di ff erences are eliminated
def recite(verse: int) -> str: if verse == 2: return dedent("""\ On the second day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree. """) else: return dedent(f"""\ On the {nth()} day of Christmas my true love gave to me: a Partridge in a Pear Tree. """) 1.Identify what to work on 1.Find the things that are most alike 2.Identify the smallest di ff erence between them 2.Make them identical. 1.Create a component to resolve the variations. 2.Implement code to supply one variation. 3.Replace one of the di ff erences with a call to the component. 4.Delete any unused code 5.Repeat until the di ff erences are eliminated
def recite(verse: int) -> str: if verse == 2: return dedent("""\ On the second day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree. """) else: return dedent(f"""\ On the {nth()} day of Christmas my true love gave to me: a Partridge in a Pear Tree. """) 1.Identify what to work on 1.Find the things that are most alike 2.Identify the smallest di ff erence between them 2.Make them identical. 1.Create a component to resolve the variations. 2.Implement code to supply one variation. 3.Replace one of the di ff erences with a call to the component. 4.Delete any unused code 5.Repeat until the di ff erences are eliminated
== 2: return 'second' return 'first' def recite(verse: int) -> str: if verse == 2: return dedent("""\ On the second day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree. """) else: return dedent(f"""\ On the {nth()} day of Christmas my true love gave to me: a Partridge in a Pear Tree. """) 1.Identify what to work on 1.Find the things that are most alike 2.Identify the smallest di ff erence between them 2.Make them identical. 1.Create a component to resolve the variations. 2.Implement code to supply one variation. 3.Replace one of the di ff erences with a call to the component. 4.Delete any unused code 5.Repeat until the di ff erences are eliminated
== 2: return 'second' return 'first' def recite(verse: int) -> str: if verse == 2: return dedent("""\ On the second day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree. """) else: return dedent(f"""\ On the {nth()} day of Christmas my true love gave to me: a Partridge in a Pear Tree. """) 1.Identify what to work on 1.Find the things that are most alike 2.Identify the smallest di ff erence between them 2.Make them identical. 1.Create a component to resolve the variations. 2.Implement code to supply one variation. 3.Replace one of the di ff erences with a call to the component. 4.Delete any unused code 5.Repeat until the di ff erences are eliminated
if number == 2: return 'second' return 'first' def recite(verse: int) -> str: if verse == 2: return dedent("""\ On the second day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree. """) else: return dedent(f"""\ On the {nth()} day of Christmas my true love gave to me: a Partridge in a Pear Tree. """) 1.Identify what to work on 1.Find the things that are most alike 2.Identify the smallest di ff erence between them 2.Make them identical. 1.Create a component to resolve the variations. 2.Implement code to supply one variation. 3.Replace one of the di ff erences with a call to the component. 4.Delete any unused code 5.Repeat until the di ff erences are eliminated
if number == 2: return 'second' return 'first' def recite(verse: int) -> str: if verse == 2: return dedent("""\ On the second day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree. """) else: return dedent(f"""\ On the {nth()} day of Christmas my true love gave to me: a Partridge in a Pear Tree. """) 1.Identify what to work on 1.Find the things that are most alike 2.Identify the smallest di ff erence between them 2.Make them identical. 1.Create a component to resolve the variations. 2.Implement code to supply one variation. 3.Replace one of the di ff erences with a call to the component. 4.Delete any unused code 5.Repeat until the di ff erences are eliminated
if number == 2: return 'second' return 'first' def recite(verse: int) -> str: if verse == 2: return dedent(f"""\ On the {nth(verse)} day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree. """) else: return dedent(f"""\ On the {nth()} day of Christmas my true love gave to me: a Partridge in a Pear Tree. """) 1.Identify what to work on 1.Find the things that are most alike 2.Identify the smallest di ff erence between them 2.Make them identical. 1.Create a component to resolve the variations. 2.Implement code to supply one variation. 3.Replace one of the di ff erences with a call to the component. 4.Delete any unused code 5.Repeat until the di ff erences are eliminated
if number == 2: return 'second' return 'first' def recite(verse: int) -> str: if verse == 2: return dedent(f"""\ On the {nth(verse)} day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree. """) else: return dedent(f"""\ On the {nth()} day of Christmas my true love gave to me: a Partridge in a Pear Tree. """) 1.Identify what to work on 1.Find the things that are most alike 2.Identify the smallest di ff erence between them 2.Make them identical. 1.Create a component to resolve the variations. 2.Implement code to supply one variation. 3.Replace one of the di ff erences with a call to the component. 4.Delete any unused code 5.Repeat until the di ff erences are eliminated
if number == 2: return 'second' return 'first' def recite(verse: int) -> str: if verse == 2: return dedent(f"""\ On the {nth(verse)} day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree. """) else: return dedent(f"""\ On the {nth()} day of Christmas my true love gave to me: a Partridge in a Pear Tree. """) 1.Identify what to work on 1.Find the things that are most alike 2.Identify the smallest di ff erence between them 2.Make them identical. 1.Create a component to resolve the variations. 2.Implement code to supply one variation. 3.Replace one of the di ff erences with a call to the component. 4.Delete any unused code 5.Repeat until the di ff erences are eliminated
if number == 2: return 'second' return 'first' def recite(verse: int) -> str: if verse == 2: return dedent(f"""\ On the {nth(verse)} day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree. """) else: return dedent(f"""\ On the {nth()} day of Christmas my true love gave to me: a Partridge in a Pear Tree. """) 1.Identify what to work on 1.Find the things that are most alike 2.Identify the smallest di ff erence between them 2.Make them identical. 1.Create a component to resolve the variations. 2.Implement code to supply one variation. 3.Replace one of the di ff erences with a call to the component. 4.Delete any unused code 5.Repeat until the di ff erences are eliminated
if number == 2: return 'second' return 'first' def recite(verse: int) -> str: if verse == 2: return dedent(f"""\ On the {nth(verse)} day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree. """) else: return dedent(f"""\ On the {nth(verse)} day of Christmas my true love gave to me: a Partridge in a Pear Tree. """) 1.Identify what to work on 1.Find the things that are most alike 2.Identify the smallest di ff erence between them 2.Make them identical. 1.Create a component to resolve the variations. 2.Implement code to supply one variation. 3.Replace one of the di ff erences with a call to the component. 4.Delete any unused code 5.Repeat until the di ff erences are eliminated
if number == 2: return 'second' return 'first' def recite(verse: int) -> str: if verse == 2: return dedent(f"""\ On the {nth(verse)} day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree. """) else: return dedent(f"""\ On the {nth(verse)} day of Christmas my true love gave to me: a Partridge in a Pear Tree. """) 1.Identify what to work on 1.Find the things that are most alike 2.Identify the smallest di ff erence between them 2.Make them identical. 1.Create a component to resolve the variations. 2.Implement code to supply one variation. 3.Replace one of the di ff erences with a call to the component. 4.Delete any unused code 5.Repeat until the di ff erences are eliminated
if number == 2: return 'second' return 'first' def recite(verse: int) -> str: if verse == 2: return dedent(f"""\ On the {nth(verse)} day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree. """) else: return dedent(f"""\ On the {nth(verse)} day of Christmas my true love gave to me: a Partridge in a Pear Tree. """) 1.Identify what to work on 1.Find the things that are most alike 2.Identify the smallest di ff erence between them 2.Make them identical. 1.Create a component to resolve the variations. 2.Implement code to supply one variation. 3.Replace one of the di ff erences with a call to the component. 4.Delete any unused code 5.Repeat until the di ff erences are eliminated
== 2: return 'second' return 'first' def recite(verse: int) -> str: if verse == 2: return dedent(f"""\ On the {nth(verse)} day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree. """) else: return dedent(f"""\ On the {nth(verse)} day of Christmas my true love gave to me: a Partridge in a Pear Tree. """) 1.Identify what to work on 1.Find the things that are most alike 2.Identify the smallest di ff erence between them 2.Make them identical. 1.Create a component to resolve the variations. 2.Implement code to supply one variation. 3.Replace one of the di ff erences with a call to the component. 4.Delete any unused code 5.Repeat until the di ff erences are eliminated
== 2: return 'second' return 'first' def recite(verse: int) -> str: if verse == 2: return dedent(f"""\ On the {nth(verse)} day of Christmas my true love gave to me: two Turtle Doves, and a Partridge in a Pear Tree. """) else: return dedent(f"""\ On the {nth(verse)} day of Christmas my true love gave to me: a Partridge in a Pear Tree. """) 1.Identify what to work on 1.Find the things that are most alike 2.Identify the smallest di ff erence between them 2.Make them identical. 1.Create a component to resolve the variations. 2.Implement code to supply one variation. 3.Replace one of the di ff erences with a call to the component. 4.Delete any unused code 5.Repeat until the di ff erences are eliminated
@ PyConUS 2016 “Great programmers [write code that] makes so much sense… it's so easy to understand.” “[Most stop] at the point where [their code] works functionally. A great programmer continues on and refactors the code base so that it's easy to understand and the code is obvious.” “They do this because it provides a better foundation for the future... Over the long run, it saves you time.”
= None, date: Optional[datetime.date] = None, ): result = await database.fetch_one( select(base_price_table.c.cost) .where(base_price_table.c.type == type), ) if age and age < 6: return {"cost": 0} else: if type != 'night': holidays = await database.fetch_all(select(holidays_table)) is_holiday = False reduction = 0 for row in holidays: if date: if date == row.holiday: is_holiday = True if not is_holiday and date and date.weekday() == 0: reduction = 35 # TODO apply reduction for others if age and age < 15:
True if not is_holiday and date and date.weekday() == 0: reduction = 35 # TODO apply reduction for others if age and age < 15: return {"cost": math.ceil(result.cost * .7)} else: if not age: cost = result.cost * (1 - reduction / 100) return {"cost": math.ceil(cost)} else: if age > 64: cost = result.cost * .75 * (1 - reduction / 100) return {"cost": math.ceil(cost)} else: cost = result.cost * (1 - reduction / 100) return {"cost": math.ceil(cost)} else: if age and age >= 6: if age and age > 64: return {"cost": math.ceil(result.cost * .4)} else: return result else: return {"cost": 0}
= None, date: Optional[datetime.date] = None, ): result = await database.fetch_one( select(base_price_table.c.cost) .where(base_price_table.c.type == type), ) if age and age < 6: return {"cost": 0} else: if type != 'night': holidays = await database.fetch_all(select(holidays_table)) is_holiday = False reduction = 0 for row in holidays: if date: if date == row.holiday: is_holiday = True if not is_holiday and date and date.weekday() == 0: reduction = 35 # TODO apply reduction for others if age and age < 15:
@ PyConUS 2016 “Great programmers [write code that] makes so much sense… it's so easy to understand.” “[Most stop] at the point where [their code] works functionally. A great programmer continues on and refactors the code base so that it's easy to understand and the code is obvious.” “They do this because it provides a better foundation for the future... Over the long run, it saves you time.”
things) “I don’t really think of refactoring as a separate thing. It’s just the result of having tests and thinking about the design of your code all the time.”
improved • delivered features faster • nearly all "embarrassingly unnecessary incidents” eliminated • enabled them to make better judgment calls when we had to cut corners due to the time constraints • enjoyed their daily work more • inspired other teams to do the same
improved • delivered features faster • nearly all "embarrassingly unnecessary incidents” eliminated • enabled them to make better judgment calls when we had to cut corners due to the time constraints • enjoyed their daily work more • inspired other teams to do the same
Python meetup to do a refactoring night. • Talk to your teammates about it. • Read through a code smell or refactoring method for 10 minutes each week. • Practice often.