Case Study 1.2: Maya's Invoice Problem

The Situation

Maya Reyes is a freelance business consultant. Three years into her practice, she has a strong client base, a solid reputation, and a data management situation that politely could be described as "organized chaos."

Her tracking system: - Projects: A Google Sheet with one row per project, columns for client name, start date, status, estimated hours, billed hours, and hourly rate - Invoices: A separate Excel file with one row per invoice, columns for invoice number, client, amount, date sent, and payment status - Time: A third spreadsheet where she logs hours daily - Client communications: Her email inbox, unsearchably

Maya bills at $175/hour for most work, with some fixed-fee projects. She typically invoices at the end of each month or at project milestones. Her payment terms are net-30.

The Monthly Billing Problem

Every month, Maya spends approximately 3 hours generating invoices for that month's billable work. The process:

  1. Open the time tracking spreadsheet, filter for the current month
  2. Group hours by client
  3. Cross-reference with the projects sheet to confirm the rate for each project
  4. Open a Word document invoice template
  5. Copy-paste the client information, project description, hours, rate, and total into the template
  6. Save as PDF with a naming convention that she sometimes gets wrong
  7. Email the PDF to the client
  8. Record the invoice in the Excel invoice tracker
  9. Repeat for 8–15 clients

Total time: 3 hours per month, or 36 hours per year. At Maya's billable rate of $175/hour, that's $6,300 per year in unbilled time spent on billing — a not-insignificant irony.

The Late Payment Problem

More costly than the time is the late payment problem. Maya's net-30 terms mean invoices are due 30 days after they're sent. In practice, about 40% of her invoices arrive late, with an average delay of 12 additional days. For a consulting practice with thin cash float, this creates real cash flow pressure.

Maya's current reminder process: she sets a calendar reminder to check the invoice tracker, then manually sends reminder emails to late-paying clients. She often forgets to do this — it's not automated and it requires her to be in the right mental state to have a money conversation.

The Business Visibility Problem

Because Maya's data is in three disconnected spreadsheets, she has essentially no real-time view of her business. Questions she can't easily answer right now:

  • What is my current monthly run rate?
  • Which clients are most valuable by revenue and which by margin (some require more non-billable prep work)?
  • What percentage of my time is billable this quarter?
  • Which projects are over-scoped — more hours spent than estimated?
  • What's my 90-day revenue forecast, given current pipeline?

She could answer these questions with a few hours of spreadsheet work. But that would be more time not billing, and the answers would be outdated by the time she finished.

What Python Would Do

Month-end invoicing: A Python script reads Maya's time log (a CSV export from her time tracking tool), groups by client and project, calculates totals, generates a formatted PDF invoice for each client using a template, saves them with consistent naming, and prepopulates a draft email for each. What takes 3 hours takes 3 minutes.

Late payment reminders: A scheduled Python script runs daily, checks the invoice tracker for any unpaid invoices past their due date, and drafts personalized reminder emails — ready to review and send with one click. Maya controls what goes out; Python handles the tracking and drafting.

Business dashboard: A Python script reads all three spreadsheets, calculates the business metrics Maya wants, and generates a simple HTML report she can open in her browser. She runs it on Sunday evenings. The 90-day revenue forecast uses a simple trend calculation. The utilization rate shows how much of her time is billable vs. non-billable. The over-scoped project flag highlights any project where hours logged exceed the estimate by more than 15%.

The Pivotal Realization

The most important thing in Maya's story isn't the time savings (though 36 hours a year is significant). It's the business visibility.

When Maya can see her business clearly — cash flow, utilization, client profitability, pipeline — she makes better decisions. She knows which client types to prioritize in her next sales cycle. She knows when she needs to raise rates. She knows when she's taking on too much. She knows which projects need scope conversations.

This is the difference between running a business and being run by a business. Python gives Maya the tools to be the former.

Discussion Questions

  1. Quantify the full cost of Maya's current approach: unbilled billing time + late payment delays + decision cost of poor business visibility.

  2. Maya is skeptical that learning Python is worth the investment when she could pay a virtual assistant $20/hour to do some of this work. Construct the argument that Python learning is the better investment.

  3. The invoice generation automation requires Maya to trust the Python script to calculate amounts correctly. What safeguards would you build into such a system?

  4. Maya's late payment problem is partly a system problem and partly a relationship problem. How would you design an automated reminder system that's firm but preserves client relationships?

  5. What data would Maya need to answer the question "Which of my clients is most profitable?" Design the data structure that would support that analysis.