A few weeks ago, I received a request to update the pricing logic for certain products. I made the code change, a silly example:
def get_price(product: Product) -> Decimal: if product.pricing_stragety == "10-percent-off": return product.price * Decimal("0.9") else: return product.price
of course, I also have unit tests to cover the change, everything is fine, so I pushed to production and told my business users that everything is sorted out. I know I also need to update the product configs in database, but I think I can do it manually right after the release.
but I didn’t, before I get back to the “manual” change in db, a production issue reported: price is not discounted, customers are not happy. then I spent hours to fix all the impacted orders.
I cloud easily avoid this issue by adding a db migration script into my pull request. the lesson I learned is to treat a pull request as a database transaction: a pull request should contain all changes: code, data, infra etc,.