Excel is the most successful programming environment in the world. No other program has had more people write code in it than Excel (or more generally spreadsheet software). It’s deceptive, because you can write all sorts of things, but even =SUM(A1:A10) is code!

This also means that it’s a real wild west of both visual design and coding style. As a result, whenever someone sends me an Excel model, I load it up in Google Sheets and then click around to figure out how they put it together, what’s a function, and what’s an input (i.e., the values I’m meant to change). A really thoughtfully built model will have all the inputs styled in the same way, so you can quickly see which numbers are for changing and which get computed for you, but in my own experience this is not super common.

Here’s a quick way to highlight potential inputs in a Google Sheets model by yourself!

  1. Highlight all the cells (ctrl+a on windows or cmd+a on mac)
  2. From the menu click Form > Conditional formatting
  3. This will open up a “Conditional format rules” sidebar (you may have to click “+ Add another rule” if there are pre-existing ones)
  4. Enter the following
    1. Apply to range: should be pre-filled with something like A1:Z1000
    2. Format cells if: “Custom formula is”
    3. Formula: =AND(NOT(ISFORMULA(A1)), ISNUMBER(A1))
    4. Formatting style: up to you and this may depending on existing styling, but I like italics, red, no fill
  5. Hit done!

conditional formatting example

Tada, that’s it! Some extra notes:

  • The formula for this rule matches cells that are numbers, but not formulas.
  • The ISNUMBER specifically matches numbers, which includes dates, but does not include numbers in quotes, e.g., ISNUMBER("23") evaluates to false.
  • The usage of “A1” in this formula is basically a placeholder and it checks all cells. This feels clumsy and confusing to me, but it works!
  • I generally use Google Sheets, but Excel has a bunch of other bells and whistles like “Go to > special” and an option to highlight formulas or also a “Trace precedents” and “Trace dependents” option.

I hope this helps you out the next time someone sends you an Excel model!

Subscriptions are complicated. Let’s take a look at the “status” field on Stripe Subscriptions.

The documentation for the Subscription.status enum starts with:

Possible values are incomplete, incomplete_expired, trialing, active, past_due, canceled, or unpaid. However, it’s easier to understand if you split things up into “trialing”, “payment needed”, “active”, “inactive”.

This ordering of the enum values may appear a bit haphazard and you may be wondering, “what’s the difference between incomplete and past_due and unpaid?”, but despite limitations of language, this ordering follows a sound logic for the life-cycle of subscriptions:

  1. incomplete - this is for the very first payment of a subscription. Depending on the payment_behavior set for your subscription and if the payment fails or requires additional steps (like 3-D Secure cards), then a subscription will have this status.

  2. incomplete_expired - if the subscription is in incomplete for 23 hours, then the customer is not billed and the subscription is effectively canceled and goes to this status.

  3. trialing - if the subscription has a trial, it will start with this status until the end of the trial (there is also a non-payment invoice created for the trial).

  4. active - the subscription is in good standing.

  5. past_due - the most recent invoice (other than the very first, subscription creation invoice) failed or hasn’t been attempted. You can manage your failed payment retries and rules in the Stripe Billing dashboard.

  6. canceled - the subscription has been canceled. You’ll encounter an error if you try to update it. Your retry rules can be set up to move failed retries into this status.

  7. unpaid - this is an alternative to canceled and leaves invoices open, but doesn’t attempt to pay them until a new payment method is added.

You can read more from Stripe’s subscriptions overview. Do you find these alternate descriptions helpful or are there any inaccuracies?

A quick look at why I think FOIL is an unhelpful trick taught in early math education and how understanding the distributive property gives a deeper understanding and stronger tools for students to think about numbers. read full post…
A quick tip on how to diff a SAFE document in Google Docs so you can see if there any differences from the standard YC document. read full post…
A simple JavaScript decorator for wrapping functions in a console.group call, so console.log calls within it are neatly grouped together. This can be helpful for debugging complicated execution of a program. read full post…

Peter Coles

Peter Coles

is a software engineer living in NYC who is building Superset 💪 and also created GoFullPage 📸
more »

github · soundcloud · @lethys · rss