[HN Gopher] Why billing systems are a nightmare for engineers
       ___________________________________________________________________
        
       Why billing systems are a nightmare for engineers
        
       Author : Rafsark
       Score  : 454 points
       Date   : 2022-05-18 16:06 UTC (6 hours ago)
        
 (HTM) web link (www.getlago.com)
 (TXT) w3m dump (www.getlago.com)
        
       | Melatonic wrote:
       | Why XXXXXXX are a nightmare for engineers:
       | 
       | PEOPLE
       | 
       | On a more serious note though billing can be hugely complicated
       | and I am really glad I do not have to deal with it
        
         | Rafsark wrote:
         | Do you have a dedicated team in charge of it?
        
       | didip wrote:
       | This is why Stripe has a big moat. Not many people want to deal
       | with this problem.
        
       | jlg23 wrote:
       | I've implemented a few billing systems and "the nightmares" were
       | never related toengineering but always to specification: If
       | bizdev does not know what they want, no outsourced imlementation
       | will be able to help them.
        
         | AnhTho_FR wrote:
         | From your experience, who should specify the billing system?
         | The Product team?
         | 
         | We're building Lago so that the right questions / decisions
         | frameworks are asked during the implementation, so it's like a
         | forcing power embedded in the product.
         | 
         | Our experience is, unless the Product/Biz team has been exposed
         | to billing, they will never specify in a way that is precise
         | enough, so the engineers who implement billing will have to
         | think/assess/decide themselves.
        
       | retcon wrote:
       | >/as Qonto is a 'neobank', we wanted to charge our customers
       | directly in their wallet, through a ledger connected to our
       | internal billing system. The team started from a duo of full-time
       | engineers building a billing system (which is already a
       | considerable investment), to currently a dedicated cross-
       | functional team called 'pricing'.
       | 
       | Stored procedures (ca. Oracle v6) suddenly sound a walk in the
       | park.
        
         | AnhTho_FR wrote:
         | They do indeed!
        
       | yobbo wrote:
       | One design decision that, for me, seems to simplify things is to
       | consider the "business system" a type of state machine that
       | records all business events and serves as a "source of truth". If
       | the events are not recorded, they have not occurred from the
       | business perspective. A ledger-type architecture can be useful.
       | 
       | This means that business events or user operations generate state
       | transitions, which eventually are implemented as database
       | transactions. The event log can be stored and inspected.
       | 
       | The end user terms are encoded in the state-transitions. Contract
       | obligations are encoded in the state of the database.
       | 
       | As for calendar issues - operations need to be performed over
       | "real calendars". It might be practical to "materialize" the
       | business calendar into discrete units for this purpose.
        
         | Rafsark wrote:
         | For sure; I do think an event based solution working as a
         | source of truth for the billing is the right solution. However
         | it still creates engineering difficulties (making sure you
         | don't ingest the event twice for instance). The ledger-type
         | architecture can definitely work. When we built the system for
         | a fintech, it was actually an event-based architecture
         | connected to a ledger (taking the money out of a wallet). I
         | think the whole process would be: - Ingesting events for usage
         | based feature - Store these events in a database and make sure
         | you make the idempotency right - Aggregate the usage of these
         | events based on most common aggregate functions - Price this
         | usage inside plans or subscriptions - Assign a subscription to
         | a customer - Trigger a webhook (used for invoice/payment) at
         | the end or beginning of the billing period
        
           | yobbo wrote:
           | And that events, as much as possible, are formulated as
           | observations or state-changes rather than operations. Events
           | in the form of "set x=1" or "y=0 was observed" are
           | idempotent, where as "do this with that" is problematic.
           | 
           | In the framework of state-transitions, actions such as "price
           | this with that" are implicit in the state matrix, and
           | shouldn't be called from APIs. Rather, API calls should be
           | used to produce reports which are print-outs of the "current
           | state". Webhooks in this framework are attempted state-
           | transitions. User interactions generate events, and requests
           | for reports (for example invoices), but as little as possible
           | in the form "do this with that".
           | 
           | My opinion currently is that there is little value in sharing
           | code (libraries/frameworks) for these sorts of solutions
           | because the code is trivial, application/language/domain-
           | dependent, and coupled to everything else in the system.
           | 
           | But design patterns, templates, and concise examples are
           | hugely valuable because they help illustrate the complexity
           | and solutions up front.
        
       | templaedhel wrote:
       | Great article and excited to see another solution tackling the
       | complex problem of billing. I'm an founding engineer at
       | https://metronome.com (building usage-based billing
       | infrastructure) and definitely echo the sentiments shared here --
       | building a billing system that can scale is no small feat and
       | anyone who previously built billing in-house can attest to just
       | how painful that is.
        
       | johnzim wrote:
       | I'm the CTO of a company tackling exactly this problem
       | (www.salesbricks.com) and I'd go one further.
       | 
       | The complexity in billing, invoicing, payments etc are _not_ the
       | stuff that computers or systems do. The complexity is and always
       | will be in the stuff humans do.
        
       | eesmith wrote:
       | A classic, from http://www.canonical.org/~kragen/tao-of-
       | programming.html
       | 
       | > There was once a programmer who was attached to the court of
       | the warlord of Wu. The warlord asked the programmer: ``Which is
       | easier to design: an accounting package or an operating system?''
       | 
       | > ``An operating system,'' replied the programmer.
       | 
       | > The warlord uttered an exclamation of disbelief. ``Surely an
       | accounting package is trivial next to the complexity of an
       | operating system,'' he said.
       | 
       | > ``Not so,'' said the programmer, ``when designing an accounting
       | package, the programmer operates as a mediator between people
       | having different ideas: how it must operate, how its reports must
       | appear, and how it must conform to the tax laws. By contrast, an
       | operating system is not limited by outside appearances. When
       | designing an operating system, the programmer seeks the simplest
       | harmony between machine and ideas. This is why an operating
       | system is easier to design.''
       | 
       | > The warlord of Wu nodded and smiled. ``That is all good and
       | well, but which is easier to debug?''
       | 
       | > The programmer made no reply.
        
         | buescher wrote:
         | Which came first? I am pretty sure it was computer accounting
         | systems.
         | 
         | Which is older, the oldest continuously supported operating
         | system, or the oldest continuously supported (computer)
         | accounting system?
        
           | eesmith wrote:
           | The oldest computer accounting system was likely LEO -
           | https://en.wikipedia.org/wiki/LEO_(computer), online in 1951
           | and doing accounts probably by 1955, if not earlier.
           | 
           | I believe it predate operating systems by a few years.
           | (Wikipedia claims the first OS was the GM-NAA I/O, produced
           | in 1956.)
        
         | AnhTho_FR wrote:
         | OMG love the story, thanks for sharing!
        
         | PaulHoule wrote:
         | Applications programming has a complexity of it's own that's
         | distinct from the problems in systems programming.
        
         | alex_suzuki wrote:
         | Thoughtful, and made me laugh. Thanks!
        
         | bombcar wrote:
         | Heh, I'd say the operating system is easier to debug, because
         | the accounting package could literally have "bugs" that are
         | caused by errors in the tax laws, business processes, etc,
         | which cannot be fixed, only worked around.
        
         | teddyh wrote:
         | The linked page does not show it, but _The Tao of Programming_
         | is actually a book which you can buy:
         | 
         | https://en.wikipedia.org/wiki/The_Tao_of_Programming
         | 
         | I own a copy; it's great.
        
       | epberry wrote:
       | Usage based billing is not only hard to implement but hard to
       | consume. No one really knows what they are spending and how much
       | particular customers or products cost. I did a writeup a week ago
       | on CDNs and ended up spending several hours in spreadsheets.
       | 
       | I had felt this pain vaguely before but actually seeing it
       | everyday at my current job makes me realize there are engineers
       | suffering on both sides of software billing.
        
         | hobo_mark wrote:
         | Speaking of usage-based billing, if I intend to charge users a
         | usage-based bill at the end of the month, as far as I have
         | looked Stripe is the only provider that supports this (they
         | call it "metered billing"), is there really no alternative?
        
           | epberry wrote:
           | The OG poster website is actually a Stripe alternative. They
           | also call out Chargebee which is another alternative that
           | should support this.
        
         | Rafsark wrote:
         | Stripe offers simple metering, but in the end, you make the job
         | of calculating metering charges (aggregate all usage and send
         | the value to stripe). It's becoming harder when you are an API
         | or a cloud company who want to bill a server usage for
         | instance. Calculations are getting heavy, costful and hard to
         | maintain. This is why I do think stripe is not a usage based
         | solution, and also the reason why I decided to create a company
         | trying to solve this pain :)
        
         | kdeldycke wrote:
         | This.
         | 
         | Usage-based billing is incomplete without its suite of
         | reporting, consolidation and visualization tools. No wonders
         | there is a cottage industry of cloud computing consultants and
         | SaaS solutions focused on helping you to make sense of your
         | AWS/GCP/Azure invoices.
        
       | ab_testing wrote:
       | I think companies should not try to reinvent the wheel with
       | building billing systems. It is better to implement an ERP to
       | take care of billing rather than building out your own. If you
       | ever grow large enough, this homegrown system will never be SOX
       | compliant and will not stand up to audits.
        
       | jakewins wrote:
       | Pro-rated billing is one of the many places outside of database
       | query planners where Dynamic Programming is useful! Maybe there's
       | a better way to do it, but well, if you give a man a hammer.. I
       | wrote up how we did this at Equipmentshare back in 2016:
       | https://tech.davis-hansson.com/p/price-wars.html
        
       | pbreit wrote:
       | If you try to keep it simple, it's not that hard.
        
       | spchampion2 wrote:
       | Just wait until you meet billing's angry roommate: invoicing.
       | 
       | In the US, an invoice is just a weird PDF that you might glance
       | at before sending off to your accounts payable team. But in other
       | countries, especially those that use VAT style taxing systems, an
       | invoice can be a legal document that expresses costs and taxes in
       | a legally prescribed way for accounting purposes. Many countries
       | have prescriptive rules over how you invoice, who can write
       | invoices, when you can invoice, what goes on an invoice, etc. And
       | every country does it differently.
       | 
       | Are you building a service that charges incrementally many times
       | per period? Or even worse, refunds incrementally? You might be
       | sending a truckload of expensive accounting papers to your
       | customer every month, one per transaction. And each of those
       | pages was printed using government prescribed software from
       | oddball vendors you must use or else.
        
         | ozim wrote:
         | Yeah - and simply creating an invoice is creating taxable
         | income in EU - if customer drags their feet you still owe VAT
         | to the taxman.
         | 
         | If you want to change invoice you have to make a special
         | "correction invoice" because changing "real invoice" is a
         | criminal offense - fun things :)
        
         | johnrgrace wrote:
         | And most big companies who agree to pay you net X days, that
         | usually is after the presentation of a correct invoice. The
         | invoice doesn't get to them, or it isn't right the clock
         | doesn't start for them to pay you. Getting invoices wrong can
         | quickly result in major cashflow drops.
        
           | AnhTho_FR wrote:
           | I'm Anh-Tho, one of Lago's co-founders here. Indeed, from our
           | experience people see 'billing or invoicing' as a monolith
           | block, whereas there's a whole 'pricing stack', billing >
           | payment > invoicing > cash collection + accounting + CPQ +
           | sales commission. For cash collection, we mentioned the tool
           | used by Lattice called Upflow which helps to manage account
           | receivables.
        
         | cm2012 wrote:
         | Just one of many reasons its easier to do business in the US
        
           | IAmEveryone wrote:
           | The difference is marginal at best. Most of the requirements
           | are obvious and never/rarely change, like your address or the
           | date. And adding a an incrementing number to a set of
           | documents isn't exactly rocket science, either.
        
           | AnhTho_FR wrote:
           | Hey cm2012, I'm one of the cofounders of Lago (my business
           | partner wrote this post). Actually even if you're
           | incorporated in the US, if you serve a client in EU for
           | instance, the VAT rules of EU apply to how you're supposed to
           | invoice your customer, beyond a certain transaction limit.
           | So... unless you're based in the US, and only serving US-
           | based users, it gets complex very fast!
        
             | notch656a wrote:
             | If you wire your dollars onto US soil, for a service
             | performed in the US by US business, good luck getting the
             | US legal system to enforce upon that US business whatever
             | euro-cucked invoicing scheme is called for.
        
               | pimterry wrote:
               | This doesn't matter. For B2B, if you don't show your EU
               | customers a valid invoice, they simply cannot pay you.
               | 
               | It's not EU governments or post-purchase issues you have
               | to deal, most of the time - it's trying to persuade a
               | large accounting department to pay you unaccountable
               | money. If you can't follow their invoicing requirements,
               | it's just not going to happen.
        
               | notch656a wrote:
               | >they simply cannot pay you.
               | 
               | Do people ever stop and wonder WHY in nations like
               | Portugal the informal economy is roughly DOUBLE of say
               | the US? When every invoice must be available to the
               | government, what actually ends up happening is non-
               | conforming invoices either get made up by the customer or
               | the money magically flows out under some other auspice.
               | 
               | Making it literally illegal to accept an invoice that is
               | legal in the country in which you obtained it borders on
               | logic even my toddler can understand is absolutely
               | begging for bad business climate or tax evasion.
        
               | wewxjfq wrote:
               | Do people ever stop and wonder WHY the US is the biggest
               | tax haven on earth? Because apparently it's against your
               | freedumbs to put an incrementing number on invoices and
               | write your address on it.
        
               | notch656a wrote:
               | >Do people ever stop and wonder WHY the US is the biggest
               | tax haven on earth?
               | 
               | I consider this an advantage of the US, not disadvantage.
        
               | sbierwagen wrote:
               | Feature, not a bug. If there's pervasive lawbreaking,
               | then the officials can collect more bribes.
        
               | dkjaudyeqooe wrote:
               | European bureaucracy is out of control, and that's just
               | the west. In the east and former Soviet states, it
               | beggars belief.
        
               | AnhTho_FR wrote:
               | I'm Anh-Tho, one of a co-founders of Lago. I'm French,
               | and I confirm, in B2B, no invoice (that is compliant, not
               | a mere receipt) -> no payment.
        
               | notch656a wrote:
               | Thank you Anh-Tho for your response.
               | 
               | What is the mechanism for French government to subpoena a
               | non-EU business to find this invoice? If the customer
               | (instead of vendor) produced an invoice that matched
               | their bank statements and non-conforming receipt,
               | hypothetically, would anyone really know the difference?
        
               | PeterisP wrote:
               | Probably they wouldn't as full audits aren't that common,
               | but audits do happen and most accountants won't care
               | about your purchase as much to personally commit a felony
               | and forge documents for no good reason (accountants do
               | have personal responsibility, and every accounting course
               | reminds wannabe accountants that "the boss ordered it" is
               | not an excuse) so they simply say that they can't/won't
               | do it and if the vendor can't send a satisfactory invoice
               | then they won't do business with that vendor.
        
               | notch656a wrote:
               | How would a French audit uncover anything wrong with a
               | conforming format invoice under the name of some random
               | American company that exactly matched the bank statement,
               | physical goods, and customs paperwork?
        
               | AnhTho_FR wrote:
               | Hey notch656a! I'm not a government expert, but the
               | challenges would start with:
               | 
               | - I am Frenchy (a French co) - Buying software from Ricky
               | (a US co)
               | 
               | If I don't have a proper invoice from Ricky to give to my
               | accountant at the end of the year, and I get a tax
               | control, then, I'll be fined.
               | 
               | If the tax ministry notices large amounts of similar
               | fines, they might look at Ricky.
               | 
               | So the risk is more on Frenchy (risk to be fined). But
               | I'd say that Ricky is safe for a while, unless the
               | invoiced amount are really huge.
        
               | DocTomoe wrote:
               | That american exceptionalism approach will work with
               | private citizen customers. With business customers,
               | leaning back in the legal framework encouraging tax fraud
               | will not fly. They just won't buy from you then.
               | 
               | That's why any US company wanting to do business in
               | Europe either has an European subsidiary, or follows
               | something that's compatible with EU invoicing schemes.
        
               | notch656a wrote:
               | >. With business customers, leaning back in the legal
               | framework encouraging tax fraud will not fly.
               | 
               | Yes which is why in nations like Portugal, where any
               | business invoice may be subject to accountability to
               | government, there totally isn't a massive informal (read:
               | tax-evading) economy to deal with the fact that the
               | government makes it literally impossible (at least in
               | above words) to accept an invoice legal in the
               | jurisdiction in which it was issued.
        
               | PeterisP wrote:
               | It's not literally impossible - the simple solution to
               | standard invoice being unacceptable is to issue a
               | different invoice that matches the requirements, and
               | almost every vendor is happy to do so in order to make
               | the sale.
               | 
               | Also, the informal tax-evading economy relies on personal
               | contacts and 'mutual understanding' - it's not easily
               | accessible to a foreign vendor, and when foreign vendors
               | do want to access that economy, it requires _much more_
               | adoption of local customs than just making a different
               | format of invoice.
        
               | notch656a wrote:
               | Yes literally impossible to take something in a format
               | legal in the US, that doesn't match the foreign
               | requirements, based on European testimony above (the
               | exact truth of which IDK).
               | 
               | Informal tax-evading (when the seller isn't evading, just
               | the buyer) doesn't require personal contacts. This is
               | just naive thoughtless statement. It happens all the
               | time. Example: business owner goes to Panama where they
               | know no one. Buys a pallet of llama wool, seller gives a
               | non-conforming receipt. Buyer goes back to France,
               | imports the pallet as "cotton" and creates a fake invoice
               | showing the Panamanian sold cotton. Seller then sells
               | llama wool on the streets for cash, marking in the books
               | that they sold "cotton" for significantly less. They then
               | use the on-the-books "cotton" proceeds to buy a shit-
               | wagon car or something, and fix it using the unrecorded
               | cash on the side. They sell the now nice shit-wagon and
               | record the proceeds as profit. Now all the money for the
               | llama wool is accounted for.
               | 
               | Cross country tax-evading is only assured in this case to
               | require personal contacts when the tax evading happens on
               | _both_ sides. When it only happens on the EU side,
               | there's no need for personal contacts on the US side.
        
               | gamblor956 wrote:
               | You keep bringing this up and it's simply not true. The
               | EU has a single set of VAT invoice requirements that
               | applies across the EU (the MOSS invoicing standard). Any
               | VAT invoice that satisfies these rules is legal in all EU
               | countries (https://eur-lex.europa.eu/legal-
               | content/EN/ALL/?uri=CELEX:32..., article 226).
               | 
               | My company does plenty of business with EU businesses and
               | we use a single standard EU VAT invoice without issue.
        
               | raverbashing wrote:
               | People are mixing up things here
               | 
               | It's not illegal to pay an US company with an US invoice
               | in the EU. (HN likes to invent problems where there
               | aren't, and companies do that all the time). It is not
               | even limited to the US, most other countries can't/won't
               | follow the format.
               | 
               | However there might be extra steps in adding those
               | invoices to their accounting. For example, when import,
               | the buyer will be charged the import tax (instead of
               | having it added to the invoice)
               | 
               | The informal economy of Portugal has nothing to do with
               | the above btw since that has nothing to do with American
               | invoices (and you can bet German rules are not much
               | simpler) - not saying the bureaucracy isn't, most of the
               | time, stupid. The US also has it fair share of stupid
               | crap that people have to deal as well but it is
               | "transparent" to most Americans.
        
               | orf wrote:
               | There isn't a massive tax evasion economy in the USA?
        
               | notch656a wrote:
               | Yes. It would be even larger if US companies couldn't
               | accept foreign invoices without being in a special
               | format. Does tax evasion in the US somehow disprove tax
               | evasion in Europe?
        
             | yupper32 wrote:
             | That's their point, they said "do business in the US".
             | You're saying the same thing.
        
           | mitchdoogle wrote:
           | Protecting consumers is always bad for business
        
             | baronswindle wrote:
             | In this particular case, do you think non-US governments
             | could protect the interests of consumers in their
             | jurisdictions in a way that is less unfriendly to the
             | businesses that want to sell to them?
        
         | wonton53 wrote:
         | I work on a payment system that invoices consumers on behalf of
         | other companies and pays out the money to these companies by
         | splitting the payout on multiple partners (luckily I do not
         | handle the support and follow-up). The system have ability to
         | refund invoices and customers some times end up paying more
         | than or just parts of the invoice. On top og all this it
         | integrates with several old 90s systems with poor datetime
         | handling and poor uptime (some times a windows xp box in the
         | cudtomers offices). It also handles card payments and over all,
         | by far the hardest thing to get right is the invoicing. Its
         | just so extremely fuzzy and time sensitive.
        
         | trollied wrote:
         | Yup, it's a nightmare. Invoices needing to be in specific
         | number sequences. Any corrections need to be dealt with by
         | reissuing a special "corrective invoice". Don't even get me
         | started on geocoding for taxes. Urgh. Also, when you've got the
         | invoicing right, you've got to work out how to do the feeds to
         | the accounting systems so that it all posts to the right place.
        
           | trollied wrote:
           | I'll add that the accounting side can get complicated really
           | quickly. You end up with lots of different scenarios. Earned
           | but unbilled: out of bundle call charges, for example. Billed
           | but unearned: a paid in advance monthly fee, for example -
           | this may need to be recognised as a percentage per day. Etc
           | etc. So much to take into account when feeding to ledgers.
        
           | radicalbyte wrote:
           | A credit note. How the ** do you handle it in the US without
           | issuing credit notes in your bookkeeping?
        
             | indymike wrote:
             | We issue a credit note*
             | 
             | * Except (these aren't the right thing to do, but I've seen
             | it in the wild many times):
             | 
             | - When someone in sales issues an invoice with a negative
             | amount on line 3. Hey, if I take payments with invoices,
             | why not give back?
             | 
             | - When someone agrees to settle up by providing free
             | services and throws it on the next bill.
        
           | Rafsark wrote:
           | Yep, fortunately in Europe we can issue credit notes, making
           | our job easier. I do think giving the possibility to send
           | charges information to a webhook is a great way to start:
           | this data can be plugged to any invoicing system (or any tax,
           | payment providers) who are trying to solve those things. The
           | hardest part for me, when working in that fintech, was to
           | build the whole logic to trigger the invoice, not so much the
           | invoice itself. But this company was a EU company, probably
           | easier to work with invoices
        
         | codegeek wrote:
         | And then just wait until you meet Invoicing's annoying cousin
         | Purchase Orders (PO). THere is a PO. Can I pay this in multiple
         | invoices ? Sorry the PO is not approved yet. We cannot accept
         | an invoice. Sorry the Invoice doesn't have reference to our PO.
         | Can you fix that please ?
        
           | AnhTho_FR wrote:
           | Hey @codegeek! I'm Anh-Tho, one of the co-founders of Lago.
           | 
           | We're working on making the 'CPQ' : Configure Price Quote
           | journey simpler, and this includes the PO dead end. We're on
           | a mission to make the pricing stack more open and
           | customizable for companies (hence the open-source angle), and
           | we're starting with the billing system. Join the journey,
           | we'll share our repo soon, and hopefully we can address these
           | painpoints faster with the community contributions too!
        
         | vidarh wrote:
         | Many years ago I led a billing team at Yahoo! responsible for
         | billing for premium services in European markets.
         | 
         | My team existed for the sole reason that the European business
         | did _not_ trust that the US payment services team understood
         | European needs, and the  "invoice is a legal document" thing
         | was one of them. I spent so many meetings repeating to the US
         | team that no, we could not switch to their invoicing as long as
         | a new software release might retroactively change the template
         | used to show already issued invoices (e.g. the registered
         | office might change, or the VAT number).
         | 
         | We didn't have to deal with printed invoices thankfully, but we
         | did ensure we produced each invoice once and stored it, so that
         | the European finance team could sleep at night.
         | 
         | At the time Yahoo! had _8_ different payment platforms. Some of
         | those were due to weirdness around acquisitions and Japan
         | (which was a joint venture), but apart from mine I believe two
         | others also existed because of local weirdness that the local
         | businesses decided it was safest not to let Yahoo! US mess
         | with.
         | 
         | At the time I left, after 3 years of that, we'd managed to get
         | agreements to migrate a few bits and pieces to the US after
         | they'd shown the understood requirements for specific features,
         | but it was like pulling teeth.
        
           | AnhTho_FR wrote:
           | I'm Anh-Tho, one of a co-founders of Lago, thanks for your
           | comment! I was the country manager of France for a US
           | Sequoia-backed company before, and I never ever managed to
           | convince HQ to work on EU invoicing, I think they just did
           | not want to open the pandora box you just described!
        
             | christkv wrote:
             | I definitively am interested in a couple of months. I
             | rather not build our own if we don't have too.
             | 
             | Do you have any early guides or api docs to take a look at.
             | Our use case.
             | 
             | 1. Base service fixed packages (based on users with volume
             | discounts)
             | 
             | Extra costs 2. Extra storage space usage 3. Add on services
             | (fixed or usage billing) 4. Invoicing third parties
             | (reselling content)
        
         | 908B64B197 wrote:
         | > You might be sending a truckload of expensive accounting
         | papers to your customer every month, one per transaction. And
         | each of those pages was printed using government prescribed
         | software from oddball vendors you must use or else.
         | 
         | I guess that's good for employment numbers? There's really two
         | ways to create jobs, innovate or regulate. The US and the EU
         | have apparently chosen very different paths. With every country
         | having it's own special snowflakes laws, there's a reason EU
         | founders always try to come to the US first.
        
         | dawkins wrote:
         | Invoicing gets even better in countries like Portugal, where
         | you have to send to the tax authorities every invoice that you
         | generate.
        
           | giomasce wrote:
           | In Italy too. They specifically developed an XML format for
           | that, and each time you issue an invoice you have to (well,
           | with some exceptions, but they are gradually removing all of
           | them) send a copy to the revenue agency, which will forward
           | it to the recipient (and keep a copy).
           | 
           | While it is a bit inconvenient, though, I don't think it is a
           | bad idea. I am pretty sure it helps a lot making the life
           | harder for people evading taxes, and to some extent the
           | availability of a standard machine-readable format makes it
           | easy to do accounting. My wife sells videocourses online and
           | I developed a thing that automatically issues invoices as
           | soon as people buy a product (with some human supervision,
           | mainly to avoid the machine doing havoc is some exceptional
           | situation happens; normally it is just "click a button to
           | send the invoice"). The invoices are then automatically
           | available to the accountant for doing accountant things.
           | 
           | You can find the XSD here:
           | https://www.fatturapa.gov.it/en/norme-e-
           | regole/documentazion...
        
         | bombcar wrote:
         | And even worse - your biggest customers won't even _smell_ your
         | invoice unless you enter it line by line into some ancient SAP
         | system developed 20 years ago, where everything cloud related
         | is classified as _telephony_ except storage space which must be
         | classified as _filing cabinets (movable)_ or your invoice will
         | be (very slowly) rejected.
         | 
         | And if it is rejected you have to enter it all again by hand;
         | _editing_ isn 't a feature.
        
           | deltarholamda wrote:
           | I said, over and over again, that moving away from goats and
           | salt as currency was a mistake, but nobody listened to me.
        
             | D-Coder wrote:
             | But the different conversion rates for each
             | kingdom/duchy/province/parish were a nightmare even then.
        
           | Rafsark wrote:
           | Wow, haven't lived this pain fortunately... but totally
           | understand how hard it is to try building a << modern pricing
           | stack >> but being forced to create invoices in old softwares
           | like SAP...
        
           | folmar wrote:
           | I don't get what you're talking about. Our biggest customer
           | reluctantly agreed to accept preliminary invoices for
           | acceptance over fax instead of signed-for mail, provided that
           | we also ship a paper version with a red stamp promptly.
        
         | [deleted]
        
         | Rafsark wrote:
         | Hi! We decided to aggregate all costs of a "billable period".
         | 
         | Imagine you bill your customers monthly (the billable period),
         | all the charges (usage-based features + subscription) will
         | appear as line items of a single invoice.
         | 
         | This enables you to gather all the fees of a period into a
         | total invoice, but still be able to provide granularity to your
         | customers (breakdown of all the fees to be paid).
        
           | onion2k wrote:
           | Hi, customer here. We'd like to change our billing period to
           | start on the 31st of _every_ month, and we 'd like to pay 90
           | days in arrears, and we'd also like you to invoice us ahead
           | of the billing month. Oh, and we're big enough that losing
           | our business will end your startup, so don't get it wrong.
           | Thanks!
        
             | AnhTho_FR wrote:
             | I'm Anh-Tho, one of Lago's co-founders here. Thanks for
             | sharing! What did you do then? I'm curious!
        
               | bckr wrote:
               | Hey, Anh-Tho, just as a point of feedback, since you're
               | leaving a lot of comments in this thread, it's not
               | necessary to introduce yourself in each one. Most folks
               | will be scanning the whole thread and seeing your
               | introduction gets repetitive and breaks the
               | conversational tone and makes it overly commercial.
               | Thanks.
        
               | burnished wrote:
               | I fear if they did not they'd be accused of something
               | else. I agree with your observation but I don't think
               | there is an obvious solution as you imply.
        
               | bckr wrote:
               | They can disclose their interests without the repetitive
               | intro. But for the above comment, just asking a question,
               | even this is unnecessary.
        
               | AnhTho_FR wrote:
               | I agree it was repetitive, but indeed, I did not want
               | people to think I was trying to pretend to be unrelated
               | to the post.
               | 
               | Thanks for the constructive feedback!
        
               | bckr wrote:
               | you're welcome
        
               | vincentmarle wrote:
               | Wait, who are you again?
        
               | AnhTho_FR wrote:
               | Noted thanks! It's my 1st post on HN, so I appreciate the
               | feedback.
        
         | marcosdumay wrote:
         | Yep. Invoice software is country specific. One can sell
         | invoicing software to several countries, it just can not be the
         | same software. And no, you can't just abstract the differences,
         | because the invoices focus changes widely.
         | 
         | At least we are in a situation where the seller is almost only
         | subject to the laws of the seller's country. There are some
         | exceptions, but one can mostly deal with those (the EU has
         | plenty, the good news is that if the seller is not also on the
         | EU, most do not apply).
         | 
         | Also, I haven't seen a country accounting system that made
         | accounting papers inherently expensive. Some make refunds very
         | expensive, but not the papers. It's more a matter of badly
         | designed software and processes.
        
         | duxup wrote:
         | Not even legal issues.
         | 
         | In my experience invoicing, and really all 'printable'
         | documents is the land of "oh someone did something wrong put X
         | on the document". And then again and again and again... And
         | "this is two pages long that's too much" and on and on ...
         | 
         | It's bike shedding insanity with no ideal or end in sight.
         | Every change is arbitrary with no real measure of success.
         | 
         | I swear the only time anyone LOOKs at these documents is to
         | bitch about them.
         | 
         | Oh man and just as if I summoned it someone just sent me a
         | ticket about something on an invoice.
        
           | gamblor956 wrote:
           | Just because you don't understand invoicing doesn't mean that
           | the concerns that appear trivial to you are actually trivial.
           | 
           | From the perspective of someone who works with the people who
           | process the invoices, putting "X on the document" and "two
           | pages long" can be a huge deal when you have to deal with
           | hundreds of invoices or when "X" can mean that an invoice
           | must proceed down a different processing path. These aren't
           | bike shedding concerns; they affect the actual processing of
           | the invoice. In many cases, these concerns affect the
           | validity of the invoice, meaning that the recipient's
           | obligation to pay (or the associated deadline) is not
           | triggered.
           | 
           | And doing something wrong on an invoice is _never
           | bikeshedding_. An invoice is a legal contract, and in the
           | E.U., an invoice is an _unmodifiable document_.
        
             | duxup wrote:
             | They're trivial... when you make the same change to add
             | something, remove it, add it, remove it and hear that it's
             | all being done "because X" and "X" never stops, it's
             | clearly not working and the changes are trivial.
        
               | gamblor956 wrote:
               | No, the changes aren't trivial.
               | 
               | It sounds like you simply don't understand why they're
               | doing it and you just assume that they're trivial because
               | you have no knowledge of the domain.
               | 
               | Off the top of my head, I can thing of a dozen reasons
               | for why they'd require something to be added, then
               | removed, then added, etc., from one invoice to the next.
        
               | duxup wrote:
               | > It sounds like you simply don't understand why they're
               | doing it
               | 
               | I don't know why you would think that considering I work
               | with them and you do not...
        
               | gamblor956 wrote:
               | I work with the A/R and A/P teams all the time. It's a
               | large part of doing tax in-house.
        
         | [deleted]
        
       | msluyter wrote:
       | I rewrote an invoicing system (originally in .NET) in Python and
       | yeah, I totally feel this. All the system did was generate a CSV
       | file that could be input into another system (Quickbooks, iirc).
       | The original .NET version was nonsensical at times, replete with
       | bugs, and I spent a lot of time trying to figure out what the
       | original intent was (there were no docs, of course, and finance
       | often had conflicting/incorrect ideas about what the system
       | should do.) Version 1 had to simply replicate the csv generated
       | by the original system exactly, which required purposefully
       | writing some bugs that I discovered along the way.
       | 
       | But yeah, there were all sorts of nasty complexities -- this was
       | a usage based system, but there were (optional) tiers (pay less
       | for higher tiers), as well as certain time segments that were
       | discounted. And then there were cases where multiple accounts
       | could share a set of data and get a discounted rate and/or only
       | one of the accounts would be billed. And on and on....
       | 
       | One lesson I drew from this experience was that, when discussing
       | things with finance to try to figure out what the requirements
       | were, it _really_ helped to have pictures. I would create these
       | elaborate usage /time graphs, and color in portions to reflect
       | different billing/pricing scenarios. These made it much easier to
       | discuss the current/future behavior of the system. Because saying
       | "really, this is simply the integral of a usage function over
       | time" didn't fly.
        
       | elietoubi wrote:
       | Hi! I co-led the billing stack re-write at Uber circa 2017 and it
       | was an absolute nightmare. Some of the unexpected hard things
       | that are not mentioned in this article: - Manage promotion was
       | very complex - Modeling money (we used to model it as cents ie
       | 1/100 of the common denomination ... turns out it broke a lot of
       | countries like Japan where the Japanese Yen doesn't have cents) -
       | Timezone is a hellhole
       | 
       | One interesting open source project was https://killbill.io/
       | 
       | PS: Since I built a billing and invoicing startup .. check it
       | out: zenbill.com
        
         | 0des wrote:
         | Hey thanks for showing me this. What lies beyond the starter
         | plan in concrete terms?
        
       | [deleted]
        
       | nickdothutton wrote:
       | The reason billing systems are hard is because they tend to just
       | accumulate features/behaviours/requirements. Forever. Although
       | billing is not my specialty I have had to involve myself in it as
       | product owner and business unit manager. Try and imagine the
       | amount of logic, complexity, rules, and exceptions involved in a
       | system that has accumulated perhaps 30-40 years of customer sign-
       | ups. Umpteen contracts, umpteen iterations of each contract, and
       | perhaps 50 or 100 products, each sold in 10 or 100 countries. I
       | now know more about the tax system in South America than I ever
       | wanted to.
        
         | Rafsark wrote:
         | Yep, totally right. Same at the previous company we worked for
         | and built the billing logic. You start doing it in house
         | because the first version is simple. It's getting complicated
         | when you keep adding paying features to a product. Often see
         | product managers becoming experts in taxes and accounting :)
        
         | r00fus wrote:
         | I see building or implementing these kind of systems as
         | "discovering" use cases for given scenarios/customers/markets.
         | That's why "billing" is almost too generic - instead "billing
         | for telco in South American markets" - is more useful because
         | those verticals have specific sets of use-cases and challenges.
        
       | Brystephor wrote:
       | I've worked at two companies in their payment systems. This post
       | does a good job of mentioning many of the billing system
       | challenges. I think it understates how difficult and important
       | idempotency is to maintain at scale with multiple teams though.
       | 
       | Additionally, it didn't mention financial regulation changes.
       | India had changes sometime in the last few years which required
       | whole new systems built that were specific to India customers.
       | One example of complexity is this: does the system apply to
       | customers who are in India or does it apply to businesses who are
       | in India (the owners might not be)?
       | 
       | He also did not mention fraud, which is basically uncollected
       | spend that results in charge backs typically. If you get too many
       | chargebacks, you'll get fined. If you get even more chargebacks,
       | you'll get kicked off the card network and will no longer be able
       | to accept cards within that network.
       | 
       | Post pay (customer gets the product and pays afterwards) models
       | are subject to more fraud, uncollected charges, etc.
       | 
       | There's also the fun of dealing with downstream payment
       | processors. I haven't worked with a processor or bank yet that
       | was very reliable. Sometimes they'd return 500 http codes and
       | then process a payment, requiring manual intervention. Sometimes
       | that happens with files of payments because most banks deal with
       | files for transactions.
        
         | tablespoon wrote:
         | > Additionally, it didn't mention financial regulation changes.
         | India had changes sometime in the last few years which required
         | whole new systems built that were specific to India customers.
         | One example of complexity is this: does the system apply to
         | customers who are in India or does it apply to businesses who
         | are in India (the owners might not be)?
         | 
         | IIRC, I've read this is one of the reasons that systems like
         | SAP are so popular. They might be an ugly monster from a
         | technical perspective and seem overly complex, but they provide
         | thoroughly tested implementations that handle all that stuff.
        
           | r00fus wrote:
           | It's not like SAP/Oracle/etc have some magical power. They
           | just pay attention to these things, build the product, THEN
           | release the product. And initial releases are buggy just like
           | most software.
           | 
           | So more agile players can get involved more quickly and
           | entrench position.
        
           | AnhTho_FR wrote:
           | Hey @tablespoon, I'm one of the cofounders of Lago here.
           | 
           | Products like SAP do seem complex because of (i) the
           | complexity of the billing problem and all the edge cases,
           | (ii) they were not built with an API-first or engineer-first
           | mindset
           | 
           | We're only at the beginning of the journey, but that's one of
           | the reasons why we thought of open-sourcing our billing API,
           | so that the work could be forked and tweaked to address edge
           | cases if needed (no need to wait for SAP to update the
           | product: and they will never prioritize small edge cases).
           | Also, it seemed to be no middle ground between 'Stripe
           | Billing' (it's great for B2C Subscriptions) and billing
           | systems that could address the millions of nuances of pricing
           | between 'subscription' and 'usage-based' (most companies are
           | a mix of both).
        
             | _glass wrote:
             | I am the last one to defend SAP, but they do have an API
             | first approach since some time, check this out:
             | https://api.sap.com/products/SAPS4HANACloud/apis/all Also
             | edge cases are taken care of, sometimes before you even
             | small updates, via notes, mostly tax regulation changes. So
             | yeah, for these things SAP is really made for. If you have
             | a SAP account, you can check out, just to see how many
             | changes are coming in: https://launchpad.support.sap.com/#/
             | solutions/notesv2/?q=pol...
        
             | mirchiseth wrote:
             | SAP and Oracle are always easy targets. Not sure about
             | Oracle but SAP has a relatively newer (10 yr old)
             | subscription and usage billing product -
             | https://www.sap.com/products/subscription-billing.html
        
             | jll29 wrote:
             | In the SAP R/3 family of products, there is also a
             | component Factory Calendar (IMG -> SAP NetWeaver -> General
             | Settings -> Maintain Calendar, transaction /SCAL) - a
             | component that knows about all the various calendar systems
             | incl. public holidays of the world and the dreaded leap
             | years. If I remember correctly, it's customizable for each
             | customer premise with respect to whether each day of the
             | year is salaried or not.
             | 
             | This is a component classified as "basis technology" relied
             | upon by many modules for billing (e.g. should a daily
             | salaray be calculated in a country for a particular person?
             | Should an invoice be considered "overdue" yet, based on the
             | number of business days passed since issue? etc.).
        
         | AnhTho_FR wrote:
         | Hey @Brystefor, I'm @Rafsark's co-founder. We could have spent
         | more time on idempotency, indeed. We have not deep dived into
         | the 3 other aspects you mentioned indeed, we're actually
         | planning to 1/ open-source the articles and add additional
         | challenges as they are mentioned 2/ open our roadmap based on
         | these inputs as well Thanks for sharing! Will ping you back
         | here when it's live PS: we had not thought of financial
         | regulation changes indeed!
        
           | Brystephor wrote:
           | Oh, I didn't even realize this was a blog for an open source
           | project. I assumed it was someones personal blog.
           | 
           | Two other things that you may want to consider:
           | 
           | 1. PCI compliance. If you're involved in the storage of
           | payment information, you may want to look into these
           | regulations.
           | 
           | 2. Regarding point 3 of your mission "...only integrating
           | with specific partners to lock you in (e.g., Stripe Billing
           | only working with Stripe Payments)...". I think there are
           | many companies out there who want to integrate with more than
           | a single payment provider (eg Braintree, Stripe, Adyen, etc)
           | but run into this problem. It increases the cost of payments
           | due to the "rent-seeker" charge method they use. Providing a
           | design framework for how a single company could integrate
           | with multiple providers could be beneficial. This is
           | something I've considered trying to build, but I think it
           | could fit with this initiative.
        
             | AnhTho_FR wrote:
             | Hi @Brystephor! I'm Anh-Tho, one of the cofounders of Lago.
             | 
             | We're building an open-source alternative to Stripe Billing
             | indeed, but we want to share our personal experience, hence
             | the personal blog post.
             | 
             | We'll open our repo very soon and our public roadmap too.
             | Thanks for adding the 2 points, we're working on 'a design
             | framework for how a single company could integrate with
             | multiple providers could be beneficial.' indeed!
             | 
             | Will ping you back here when we're live!
        
       | robot wrote:
       | Problem is it still requires an API to integrate. Stripe has all
       | these capabilities but API integrations are needed to use them.
       | If you are looking to build a micro SaaS without needing to deal
       | with billing API integrations check out our software:
       | https://saasbox.net. Built for completely eliminating any billing
       | related SW development. It doesn't handle all the corner cases
       | mentioned in the article, but some of them are handled, such as
       | plan upgrade / downgrades with pro-rating, editing plans on the
       | fly, migrating users across plans, notifying your application on
       | those changes.
        
         | Rafsark wrote:
         | Why is it a problem to use an API?
        
         | vikeri wrote:
         | My understanding is that Stripe billing can be managed
         | completely no-code from the Stripe dashboard? And I think it
         | includes automatic tax, prorations etc.
        
       | pizzaknife wrote:
       | first sentence. homie rip
        
       | 0xbadcafebee wrote:
       | Don't spend time, effort and money on things that do not bring
       | business value. Any time I see a company with engineers building
       | something they could buy off the shelf [and the thing they're
       | building is not the product] I know their priorities are whack.
       | I've worked for several companies that had more money than
       | brains. They'd spend _years_ , and millions of dollars in
       | salaries, to build shit they could have bought and implemented in
       | two months. And not only that, but multiple iterations of
       | _failing_ to build said thing, by _multiple teams_.
       | 
       | Just because a tractor is used for farming doesn't mean a farmer
       | should build her own tractor.
        
         | afarrell wrote:
         | At some companies, it takes more effort to go through the
         | procurement process than to build the thing.
        
         | kdeldycke wrote:
         | The essence of MVP I guess.
         | 
         | Now, back to the article's topic, the real question is: is
         | there an off-the-shelf billing product available out there?
        
           | indymike wrote:
           | > Is there an off-the-shelf billing product available out
           | there?
           | 
           | There are lots and lots of OTS billing systems. They might
           | work the way you want or need. Billing is the classic "I
           | wanted wheel, except I wanted a round one" kind of problem.
           | Right now, I'm looking for a system that will let sales
           | invoice whatever they put on paper, and be good a structured,
           | recurring billing that is easy to hook up to my SaaS
           | platform. Oh, and Bob in sales wants to be able to edit the
           | invoices after they are issued...
        
       | janci wrote:
       | I was working on a billing system for utility company and it was
       | a nightmare but not for the reasons from the article.
       | 
       | Dates are no problem, everything is billed at the end of month,
       | quarter or year.
       | 
       | Upgrades are downgrades are simplified, customer can legally
       | change tariff only on predefined dates/events.
       | 
       | Usage - yes, but exampled in the article do not even scratch the
       | complexity of this
       | 
       | Idempotency is not really needed, the billing process is not
       | continuous, it is a batch job.
       | 
       | Cash collection is out of scope of billing software.
       | 
       | Taxing was clear. Yes, there were multiple billable items with
       | different tax rates, but not too complex. All customers were
       | local.
       | 
       | The nightmare part was:
       | 
       | - customers can have multiple consumption locations, location can
       | have multiple meters and customer can request to split the bill
       | on multiple invoices or combine multiple bills to single invoice
       | as they please
       | 
       | - meters can be replaced at any time
       | 
       | - meter readings are available on dates totally independent from
       | billing cycle. Most of consumption data are mere forecasts.
       | 
       | - when the actual consumption data is available, everything must
       | be recalculated AND compensated (on a correction invoice showing
       | the difference)
       | 
       | - actual consumption data can be wrong and may be corrected at a
       | later date, even multiple times
       | 
       | - consumption points can be added or removed or moved to
       | different customer at any time, but this information is only
       | available after the fact
       | 
       | - the prices can change mid-billing cycle for some customers but
       | the consumption data is not available with that granularity
       | 
       | - customer legal information (company name, address) can change
       | mid-cycle
        
         | politician wrote:
         | Did the company use a relational database to deal with the
         | billing and subsequent adjustments? I've been there: it can be
         | more straightforward to use an event streaming approach that
         | recalculates billing as new events arrive.
        
           | janci wrote:
           | Yes, almost everything ended as temporal or bitemporal model.
           | Pain to work with. Even for simple questions like "What is
           | the customer #1234 company name?" the system needs to know
           | when are you asking.
        
             | gnat wrote:
             | By "temporal model" do you mean relational tables of
             | "customer X used Y amount of this resource at price Z from
             | timestamp A to timestamp B" or ... ?
        
               | benwilson-512 wrote:
               | In field metering situations you can have the timeline of
               | each meter, when it records data points, and then you
               | have the different timeline of the backend service, when
               | it actually _receives_ data points.
               | 
               | Bonus points if the meters can send data out of order.
        
               | gnat wrote:
               | Ah, thanks. OMFG and I thought our billing was hard.
               | You're in my thoughts and prayers!
        
           | GrumpyNl wrote:
           | Designed and build the system meter readings and calculations
           | for the Dutch market, all mysql, worked like a dream.
        
         | AnhTho_FR wrote:
         | Thanks janci for sharing your experience!
         | 
         | Indeed, we only scratched the surface of the complexity of
         | metered billing, we'll do a deep dive soon on this topic (it
         | does deserve its own post).
         | 
         | I think for the'nightmares' you mention: - some might be
         | specific to utility (not applicable to an online business),
         | such as '- meter readings are available on dates totally
         | independent from billing cycle'. - Some topics might be simpler
         | for a utility co: tax for instance (you know where your users
         | are, and they are limited to a geographic region)
         | 
         | - But some nightmares such as '- the prices can change mid-
         | billing cycle for some customers but the consumption data is
         | not available with that granularity' do really resonate for
         | online businesses too, indeed
         | 
         | Thanks for sharing, great insights for our future post!
        
           | formerkrogemp wrote:
           | For online businesses as well, selling above a certain amount
           | of revenue or product can trigger what's known as a nexus
           | event in taxation wherein the business becomes liable for
           | collecting sales or use tax. Now online businesses are on the
           | hook for collecting sales tax in every jurisdiction above
           | wildly varying threshold values. Should the business fail to
           | collect the sales tax for selling from Montana to California
           | for instance, then the business will be liable for sales tax
           | not collected for products or services sold to California
           | residents online even though the business might physically
           | reside in Montana.
        
         | _glass wrote:
         | I was also consulting for a utility company. Billing was easy,
         | we used SAP (lol). But CRM (where we also used SAP) was a
         | nightmare. The different processes where a nightmare. I mean
         | utilities are amazingly complex logistically. New metering for
         | a single house build, when it's ordered, installed, etc.
        
       | cletus wrote:
       | Pretty much everything is more complicated than people (including
       | engineers) think.
       | 
       | Take a simple example: selling clothing in a retail store. Sounds
       | simple right? You have an inventory of items and someone pays for
       | it. Should be a simple transaction, right? Well, now you're
       | dealing with:
       | 
       | - How do you determine the price? There might be a retail price
       | but there are sales, discounts, overrides for various reasons (eg
       | defective goods), etc;
       | 
       | - You have to handle different payment options eg cash, credit
       | card, debit card, gift cards, store credit. Payment methods can
       | be mixed;
       | 
       | - You have to handle returns. These generally have to go back to
       | the original form of payment. Some goods might not be eligible
       | for a return. What if the payment is split between store credit
       | and a credit card? Where does the balance go?
       | 
       | - Identity of the person making the sale or handling the return;
       | 
       | - Authorization procedures for returns and price overrides.
       | 
       | Everything is complicated.
       | 
       | As an aside, this is one reason why I'm so bearish on Web3 and
       | smart contracts in general. The edge cases are so complex and
       | possibly unknowable that codifying these, particularly on an
       | immutable blockchain, to remove the need for human intervention
       | seems doomed to failure.
       | 
       | Take Web3 identity. If you lose your password there are methods
       | for recovering your account. The first is a reset password
       | option. That may be insufficient and there'll sometimes be a
       | human avenue to recover your account. Now consider a Web3
       | identity. I've seen various incarnations of these such as
       | authorizing other identities who with consensus can recover your
       | account. Well, those identities can be compromises so you've just
       | added an attack vector. Alterantively that recovery mechanism may
       | become insufficient as people lose identities themselves.
       | 
       | If these problems weren't complex they'd be solved problems.
        
         | AnhTho_FR wrote:
         | Hey Cletus! I'm Anh-Tho, one of the cofounders of Lago.
         | 
         | Totally agree with you on web3 identity and its edge cases,
         | it's just billing ^10000 in terms of complexity.
         | 
         | I think for 'billing', usually people (especially non-tech
         | people), don't understand the different blocks of the pricing
         | stack: authorization, pricing grid, billing itself, invoicing
         | (they often only see end-result: a receipt or invoice), payment
         | gateways, dunnings, accounting etc). This post barely scratches
         | the surface of it, but we intend to write and deep-dive more on
         | each of these building blocks.
        
         | logicalmonster wrote:
         | > As an aside, this is one reason why I'm so bearish on Web3
         | and smart contracts in general. The edge cases are so complex
         | and possibly unknowable that codifying these, particularly on
         | an immutable blockchain, to remove the need for human
         | intervention seems doomed to failure.
         | 
         | I do think the potential for errors is currently real (people
         | mess up simple wallet transfers all of the time) but it's
         | reasonable to assume that big things and making them easy for
         | normal people to use is going to take time.
         | 
         | It's easy to forget how ridiculously early into crypto humans
         | still are. We're only about 14 years into the invention of
         | crypto. We're only about 7 years since the release of Ethereum.
         | The general public barely understands what crypto is other than
         | having some conception of it as some kind of Internet money.
         | Most people cannot discuss what a blockchain is, what smart
         | contracts are, or why oracles are important. And forget the
         | general public for a minute: even smart technical people on HN
         | can barely give a good description of how all of these pieces
         | work and fit together.
        
         | trompetenaccoun wrote:
         | >If these problems weren't complex they'd be solved problems.
         | 
         | That's an axiomatic and therefor meaningless statement. Knowing
         | something is hard to solve doesn't mean new tech won't bring
         | improvements regarding the problem.
         | 
         | It doesn't follow that having an immutable ledger means it has
         | to be used for every single application. That would be like
         | claiming trains are useless because they can't climb stairs.
         | They don't have to do that, we keep walking the stairs just
         | like we've always done.
         | 
         | Immutability is great in situations where you want to record
         | that something has taken place and don't want disputes about
         | this. Some of the things you mentioned can be automated to some
         | degree. Take returns as an example: You sell the item with a
         | unique token that makes it identifiable and everything else can
         | be automated, including chargebacks. We already have this to
         | some extent with bar codes and RFID tags, but it can be taken
         | to the next level with a non-fungible and non-falsifiable token
         | that's connected to a smart contract which automatically
         | returns money, does the accounting, updates the inventory,
         | reports the tax data and so forth if authorized by the right
         | person. As the owner you can easier monitor and analyze the
         | flow of money, better detect fraud and come up with a myriad of
         | improvements. Let's assume we have autonomous delivery trucks
         | soon, then the entire supply process could be automated,
         | including the billing as soon as the product is accepted. With
         | something like the Helium Network shipments can be tracked, so
         | there can be no dispute over where they are located.
         | 
         | For company owners who really doesn't want to spend much time
         | at the office you could go a step further and even set
         | conditions for disputes like contracts triggering a certain
         | action after a suppliers products have been rejected too many
         | times because of quality issues, or vice versa is a customer
         | keeps ordering and returning products from a factory. The
         | contract could switch to automatically ordering from a
         | competitor.
        
         | [deleted]
        
       | ben7799 wrote:
       | I agree with thesis but there are entire aspects of this that he
       | didn't even touch upon. There is a multiverse of different
       | billing nightmares for engineers.
       | 
       | I worked on a piece of software that bridged billing data from
       | IBM mainframes out to the web. The hoops that had to be jumped
       | through to get data out of the mainframes and the number of hacks
       | and kludges involved was legendary. Likely everyone here has paid
       | many bills in their life on websites that used that software. At
       | one point I knew the vast majority of my personal bills had gone
       | through it. Credit Cards, Utilities, Gas cards, etc.. Stuff
       | everyone had to pay with paper before the web.
        
         | colejohnson66 wrote:
         | Could you expand on what kind of hacks/kludges were required?
        
           | ben7799 wrote:
           | Basically the mainframes were almost incapable of any data
           | exchange that was meaningful in the 21st century. Instead of
           | IBM doing something same the market just built software to
           | scrape bills off the mainframes printer output, which you
           | could intercept in electronic form. But then every accounts
           | bill files were different. And sometimes the mainframes moved
           | data around on the page, and so on and so forth.
        
       | schwinn140 wrote:
       | This is some brilliant, next-level, content marketing here.
       | Nicely done.
        
       | nico75 wrote:
       | Solid job unearthing the numerous billing system challenges
       | (almost triggering PTSD from prior experiences interacting with
       | such systems...). While I haven't fully checked out the details
       | of the solution you offer, I'm excited to see builders embarking
       | on building better solutions :huggingface
        
         | spookthesunset wrote:
         | I occasionally get PTSD flashbacks from my time maintaining a
         | home brew billing system.
         | 
         | That shit is _hard_. There are so many ways to fuck it up
         | because you didn't know what you were doing. The list of
         | unknown unknowns for a billing system are huge unless you are
         | an actual expert in billing, which you aren't and neither is
         | anybody in your team.
        
       | perlgeek wrote:
       | I work at a b2b company with a 25+ years history, and OH MY
       | GOD...
       | 
       | * Sales is payed (partially) off commissions, so they do their
       | very best to sell whatever the customer wants, not what the
       | engineers know how to bill, or that product management has
       | prepared. It's really hard to push back against a contract with
       | revenue 10x your yearly salary "just" because the new features to
       | bill it don't fit together with existing features.
       | 
       | * It's very hard to keep track of which customer pays for what,
       | exactly, and is entitled to which service. Easy for standard
       | products, hard for bespoke products, nearly impossible for shared
       | services (it took us >9 months to sunset a shared HTTP proxy that
       | was in use by just 4 customers that didn't even pay for it...)
       | 
       | * Legacy contracts: imagine 25 years iterating on product design,
       | and keeping the old contracts running (except when the customer
       | leaves on their own). Some of the old contracts are hard or
       | impossible to find, nobody wants to spend their time rummaging
       | through them to find out what exactly a customer is entitled to.
       | A year ago we still had a customer that still pays for 8EUR per
       | GB HTTP traffic (web hosting), because that was the going rate
       | back in the days
       | 
       | * Usage-based billing: half of our customers want to be flexible
       | and only pay for what they use, and the other half uses SAP and
       | for them, invoice amounts changing from month to month are the
       | pure horror. So clever sales people invent hybrid models ("pay
       | for what you use, but fixed price until a certain threshold,
       | we'll notify you when you get close to reaching the threshold").
       | Another source of complexity.
       | 
       | * Usage-based billing: it's basically a topic for the whole
       | company, most departments provide services that needs metering,
       | but metering is usually an afterthought to the architecture, hard
       | to verify for somebody on the outside
       | 
       | * Usage-based billing: for big customers you cannot put all the
       | details on the invoice (our mailing service provider is limited
       | to 99 pages per invoice...), so you need separate reporting to
       | drill into the details. Fire and brimstone will rain down if
       | reporting and invoice disagree on some numbers...
       | 
       | This just scratches the surface. Customers that want to split
       | their bills along cost centers that don't align with access
       | control tenants, different electricity prices based on location,
       | the list is endless.
        
         | Rafsark wrote:
         | The article just scratches the surface too. I could have
         | written a book to describe it!
         | 
         | Reporting for revenue is a hard game, indeed. Spent a lot of
         | time trying to reconcile revenue streams in the same company we
         | ended up building the whole billing system. It's also not easy
         | because metering is not something that is predictable nor easy
         | to make it fit into a finance report.
        
       | christophilus wrote:
       | This has been my life for the past few months. Billing and dates
       | / times are the worst part of the job.
        
         | AnhTho_FR wrote:
         | Have you looked at existing solutions? Why did not they fit?
        
           | gen220 wrote:
           | Not the OP, but anybody who has built a deep integration with
           | any billing provider (inclusive of Stripe) knows there are
           | some bodies buried, although you typically don't discover
           | them until you're late in the game.
           | 
           | 90% of your use cases are covered, and with excellent UX and
           | docs to boot. But that sweet 10%!
           | 
           | ---
           | 
           | For a concrete example, Stripe has a very nice "subscription"
           | abstraction that makes it easier to operate a SaaS business.
           | They also offer a nice "tax" product, that doesn't do filing
           | for you, but does offer tax computation if you code your
           | products appropriately. Sounds great!
           | 
           | But if you want to sell 2 subscriptions to the same customer,
           | and those 2 subscriptions are fulfilled in 2 distinct taxable
           | regimes (say, you're shipping widgets to NYC once per month
           | and to a vacation home in NH once per quarter), you're
           | screwed because Stripe only allows 1 shipping address for
           | customer for tax purposes, and each subscription references
           | this address when computing tax.
           | 
           | We went through support, which filtered through to
           | engineering, and the eventual answer was "no plan to change
           | this anytime soon", which is difficult to interpret any other
           | way than "good luck". :)
           | 
           | There is no clean or even acceptably-dirty solution to this
           | problem, tragically. So as a business we can't allow
           | customers to transact with us this way. Oh well.
           | 
           | There's another, similar, story around creating draft
           | invoices to give people quotes before checking out. The
           | dashboard API has a function to modify the line items of a
           | draft invoice, but it's not a public-facing API and there's
           | no short-term intention to make it public-facing, so one has
           | to build an ugly workaround.
           | 
           | This effectively means one needs to maintain internal models
           | for subscriptions, products, taxes, invoices, invoice items,
           | products, shipping addresses, on and on. And Stripe becomes a
           | somewhat-dumb processor for these models (although the state
           | machine for subscriptions is admittedly very valuable).
           | 
           | I'd love to "offshore" everything to Stripe, status as the
           | source of truth for data included, but it's not feasible in a
           | surprising frequency of scenarios.
           | 
           | Caveat that _every_ payment provider is like this, Stripe is
           | much better and actually improves over time.
        
             | Rafsark wrote:
             | I think it's easier for billing systems to have 1
             | subscription for 1 customer. The reason behind this is
             | mainly because you can apply several prices to the same
             | feature belonging to two different subscriptions. Stripe
             | does not work on it because they might consider this as a
             | edge case.
             | 
             | When you look at usage-based billing, even if a billed
             | feature is linked to consumption, it needs to be related to
             | a subscription given the fact that this feature can be
             | priced differently for several plans. Every company has a
             | singular pricing model in mind and it's hard to have an
             | all-in-one model fitting all the needs. Even when we built
             | internally the whole system for a fintech back in 2016, we
             | had some edgecases creating conflict inside the company.
        
               | gen220 wrote:
               | It definitely is an edge case.
               | 
               | But I'd push back on the 1 subscription per customer
               | idea. Consider any physical fulfillment business, where
               | you have an optional annual membership (amazon prime,
               | costco, whatever) and N subscriptions of varying
               | frequencies for physical products.
               | 
               | It doesn't make sense to roll these into a single
               | subscription on the backend (unless the periodicity
               | happens to line up perfectly, and even then there's a
               | heated debate, since you still probably want them to be
               | separate charges).
               | 
               | You can go down the route of creating N "virtual"
               | customers for each "real" customer, but it doesn't really
               | solve the problems, because these N customers have a
               | complex relationship with each other that you need to
               | encode and manage.
               | 
               | Hence, the name of this post :). It's definitely not
               | easy!
        
               | christophilus wrote:
               | This is what I'm doing, but then you don't get a clean
               | history in Stripe, which is annoying to folks (e.g. to
               | our support team). So, it's something I'm thinking about
               | changing.
        
             | phphphphp wrote:
             | A lot of the time there's trade-offs that can be made that
             | engineers don't even consider because they're not pure. For
             | example, why do you need a one-to-one relationship between
             | your customers and Stripe customers? I am guilty of it
             | myself, where an 80% solution is unacceptable from an
             | engineering perspective but, actually, when balanced
             | against the cost of building out a perfect solution, the
             | business may well find it very acceptable.
             | 
             | One of the most important things I've learned about working
             | with third-party systems is that there has to be some
             | amount of surrender to their way of doing things.
             | Essentially, the price of using Stripe is not being able to
             | use invoices as a quote, and that has to be articulated to
             | the business. If that's not acceptable, then the business
             | should be considering the requirements in aggregate when
             | evaluating a solution, rather than deciding on Stripe and
             | then gradually re-implementing parts of Stripe internally
             | because they aren't right for the business.
             | 
             | (Obviously that's easier said than done, and for engineers
             | it's a fun challenge to make something impossible possible,
             | but it's almost always a mistake and as engineers it's our
             | responsibility to articulate the burden of owning
             | workarounds.)
        
               | gen220 wrote:
               | The example you give is a smart one that we did explore!
               | 
               | Effectively, relationship is no longer user -> stripe
               | customer, but user -> shipping_address -> stripe
               | customer.
               | 
               | We decided the cost of implementing and maintaining this
               | solution wasn't worth the benefit to the business. A
               | credit to your later points.
               | 
               | We came up with a solution that allows us to ship one-off
               | things to arbitrary addresses with correct tax
               | calculation, and if a customer really wanted to setup a
               | subscription to a distinct address, we could implement it
               | in the future, hackily, with this primitive.
        
               | dqv wrote:
               | >One of the most important things I've learned about
               | working with third-party systems is that there has to be
               | some amount of surrender to their way of doing things.
               | Essentially, the price of using Stripe is not being able
               | to use invoices as a quote, and that has to be
               | articulated to the business.
               | 
               | We have this same limitation on another payment platform.
               | We just change the concept on our end to "payers" and
               | allow an account to have multiple payers. When the user
               | adds a payment method, they can either select that
               | existing payer or, if they need to change the name or
               | address, they create a new one.
               | 
               | The provider we use had an invoicing product, but it has
               | several misfeatures that just make the product
               | unworkable. We absolutely have to be able to enforce
               | first-in-first-out invoice payments. Users _will_ pay the
               | May invoice before the April invoice and pretend like
               | they are all paid up. I 'm not sure why they didn't
               | consider this with a subscription-invoice product...
               | users paying the invoices out of order was a big problem
               | because users saw it as an exploitable vulnerability they
               | could use to get a free month here and there.
        
             | lfittl wrote:
             | > There's another, similar, story around creating draft
             | invoices to give people quotes before checking out. The
             | dashboard API has a function to modify the line items of a
             | draft invoice, but it's not a public-facing API and there's
             | no short-term intention to make it public-facing, so one
             | has to build an ugly workaround.
             | 
             | There is a similar "not a public-facing API" limitation
             | with configuring multiple invoice email addresses for
             | Stripe customers (works in the dashboard, but blocked in
             | the public API, where you can only set a single email per
             | customer).
             | 
             | I'm actually quite surprised Stripe does this, since their
             | initial reason for being was developer-friendly payments.
             | But oh well, maybe I should take a look at an alternative
             | (like Lago) sometime.
        
               | AnhTho_FR wrote:
               | We're working on making the quoting process simpler
               | indeed. What we've learnt that the only companies that
               | can afford a proper quoting system are enterprises: they
               | implement Salesforce CPQ (configure price quote) or
               | Zuora. They are mostly sales-driven, so the investment is
               | worth it.
               | 
               | But it does not make sense for PLG companies, who start
               | with self-serve and layer sales afterwards: the
               | investment is not worth it, and it creates 2 different
               | systems: self-serve and sales-driven billings, not great
               | for the user experience (and for the internal processes!)
        
       | my_usernam3 wrote:
       | Reading this article gives me a smidgen of sympathy for Xfinity.
       | They have so many plan options/timed promotional deals, and seem
       | to run into so many issues every seemingly minor change, now it
       | makes sense to me why.
       | 
       | But in the same breadth still ... F** Xfinity
        
         | AnhTho_FR wrote:
         | Anh-Tho, one of the co-founders of Lago, here! yes totally,
         | each time I open a pricing page, I have full sympathy for the
         | engineering team who made it happen! I used to be the one
         | tweaking with pricing plans on a spreadsheet and handing it
         | over to engineers in a 'just make it happen' fashion!
        
       | bcrosby95 wrote:
       | I've had to deal with subscription based billing, and in my
       | experience it wasn't a nightmare. There are some corner cases,
       | but, those exist in every domain. And the stakes are definitely
       | raised since you're dealing with people's money.
       | 
       | Usage based billing sounds like a nightmare though.
       | 
       | Taxes in the USA are a nightmare too. I have a friend that lives
       | on a street, and for one side the tax rate is 7.5%, and the other
       | side its 9.25%. Literally no company we tested got this right.
       | Even Amazon.
        
         | Rafsark wrote:
         | For simple subscription-based billing, it's somehow not this
         | hard, you are right. It also depends on how much plans you
         | provide to your customers, and you still need to scratch your
         | head for upgrades and downgrades.
         | 
         | I truly believe in usage-based billing, so I do think pricing
         | are getting more and more complex over time.
         | 
         | Taxes are a nightmare for everyone also (in Europe too...)
        
           | spookthesunset wrote:
           | Dont forget price changes. Gotta deal with that. Then
           | discounts, trials, weird durations, and a bunch of other shit
           | I forget.
           | 
           | My advice for anybody thinking of building their own
           | subscription management system is to stop and go look at
           | something like Zuora. You do _NOT_ want to get stuck
           | maintaining some home grown subscription management system--
           | it will never be better than Zuora and you 'll always be
           | playing catchup, leaving your company unable to quickly react
           | to the market. All the time spent adding functionality you
           | can buy from a third party is money that you could have
           | invested in your actual product. And worse, the fact you
           | couldn't quickly react to the market because some key feature
           | was missing in your homebrew thing is literally leaving money
           | on the table.
        
       | awillen wrote:
       | Once upon a time I was the first product person at a now-
       | decacorn, and my first task was fixing the billing system. It was
       | quite the monster, and we ended up implementing a combination of
       | Zuora and an internal system, as there were some parts of the
       | billing model Zuora couldn't handle.
       | 
       | I came away from this with one big lesson - if you're considering
       | a complex billing model, consider the engineering implications
       | first. With most products, engineering feedback gets taken into
       | account - often product proposes something, engineering breaks it
       | down, product realizes that feature x is vastly more complicated
       | than they thought and not worth the effort, and the requirements
       | are changed to simplify or remove it.
       | 
       | The one thing that never seems to be true of is pricing models -
       | that decision gets made at the very top and handed down with no
       | chance for feedback. I think that if it the folks designing the
       | billing system realized the costs, they might simplify things. If
       | the complexity of your billing system means that 3% of your
       | engineering team (plus additional folks in support and finance)
       | is going to be working on it forever, but if you simplify it a
       | bit you could keep 90% of it and only have 1% of engineering
       | working on it, that might be a good tradeoff - after all, that
       | leaves you more engineers to build features, which should drive
       | additional sales. Unfortunately, that analysis never seems to get
       | done up front and the cost is only understood after the billing
       | system is deeply integrated into everything and would take an
       | unpalatable amount of effort to change.
        
         | Rafsark wrote:
         | Couldn't agree more on this. Even if finance, sales, marketing
         | or other deps are involved, billing is an engineering thing!
         | Back in 2016, while building the billing system for qonto.com
         | (european fintech unicorn), we were surrounded by people
         | willing to add complexity to a thing they don't understand. A
         | team of 2 engineers building it ended up in a whole squad
         | called "Pricing Cross Functional Team"... even the name of this
         | team was complex :)
        
         | PeterisP wrote:
         | Yes, this is a big thing - there needs to be a clear model of
         | how variable pricing and discounts are going to work in this
         | company, with the sales team being able to apply the actual
         | amounts of any prices and discounts, but not arbitrarily
         | changing the model.
         | 
         | It doesn't work when the model is too simple or restrictive,
         | which will simply result in the model being violated; you do
         | need at least the ability to customize pricing for individual
         | customers, and for specific invoices, but other than that the
         | decisions (e.g. whether you apply invoice discounts as
         | percentages or specific amount or both) can vary but you just
         | need to pick any reasonable option and stick with it.
        
           | awillen wrote:
           | Yeah, this is tough because when the VP of Sales knows that
           | one particular change will close the deal, they're going to
           | push for it no matter what the cost. In reality it may be
           | better from a big picture perspective to give a concession
           | that is actually better for the customer and worse for the
           | company than x as it relates to that particular deal, because
           | the larger concession fits within the current billing system
           | with no custom work, so the overall cost to the business is
           | less.
        
       | simonjgreen wrote:
       | There's few things worse in B2B than encountering a system where
       | engineers have reinvented general accounting principles from
       | scratch.
        
         | kdeldycke wrote:
         | The only worthwhile re-invention of late might have been
         | triple-accounting.
        
       | awinter-py wrote:
       | billing is a chronological typesystem and is only hard to build
       | because most languages don't offer time-safe types
       | 
       | (and because municipalities don't expose their tax rules as
       | types)
        
       | asciimike wrote:
       | Nit: there's a lot of noise being made in comments about it being
       | an open source product, but I haven't found the source (maybe I
       | have to speak to an expert to get it?). github.com/getlago has
       | the docs, which is nice (and gives a lot more info than is
       | available on the website about how the product works), but not
       | quite the same.
       | 
       | Also note:
       | 
       | > Our open-core version is forever free. We will introduce paying
       | add-ons in the future, with a consumption-based approach.
        
         | AnhTho_FR wrote:
         | It's coming soon, we're in the final steps of QA, but we could
         | not wait to share this post! Thanks for the comments on the
         | documentation, by the way!
        
           | asciimike wrote:
           | Awesome, glad to hear, would love to take a look whenever
           | it's available! Looking at the docs it seems like the current
           | state of the product is much more about subscriptions than
           | usage based billing (e.g. no aggregation or rating). Any
           | plans to add those in?
        
       | bhawks wrote:
       | 'Tax logic' is an oxymoron and a trap for smart technologists to
       | fall into. Tax codes are not logically consistent or clearly
       | defined. They're a bunch of illfitting laws,
       | beauracratic/regulatory guidance and interpretations of judicial
       | decisions.
       | 
       | I tell folks working in this area to accept the illogical nature
       | of it all and to be ready for all sorts of arbitrary last minute
       | changes. As the article points out understanding time plays an
       | important role here too - when do different tax treatments take
       | effect is an important question to answer.
        
       | MarcinMas wrote:
       | Yeah I can agree. I made custom integration with Chartmogul and
       | it was a nightmare. But we did it! And now I feel like real
       | engineer
        
       | lelandbatey wrote:
       | Billing is a nightmare, and if I had one piece of advice for
       | people building a pay-for-what-you-use system like most SaaS,
       | it's this:
       | 
       | DO NOT bill against your business logic entities. They change,
       | and doing a COUNT at the end of the month won't catch all things
       | which changed or which cost you money _during_ the month.
       | Instead, figure out what you bill for and and when you do that
       | thing, record a row in a DB or into a steam of that  "billable
       | event".
       | 
       | Reconciling billable events is much easier to do, and it's
       | tolerant of all the weird edge cases (such as a support person
       | hard deleting data when they should soft delete, which would
       | otherwise throw off your end of month counts).
       | 
       | There's a reason AWS (in general) can produce a log of everything
       | you did which cost you money. It's painful, but it's less painful
       | than the alternative.
        
         | Rafsark wrote:
         | Couldn't agree more! I do think the best way to do it is to log
         | ingested events in a db, and decide which way you want to
         | aggregate a billable feature at a defined billable period. This
         | way lets you (i) keep track of everything, (ii) invoice complex
         | behaviors and (iii) provide great granularity to your customers
         | inside a final invoice.
        
         | theptip wrote:
         | Sound advice. Anything to do with accounting, you'll probably
         | want to treat as an append-only log of events. (Note, you can
         | also use event-sourcing and have your domain entities _be_
         | events, in a billing bounded context that might make sense. Not
         | usually the first approach I'd recommend though.)
         | 
         | On a similar note, make sure you think about bitemporality as
         | well. In other words, "effective_at" vs. ""created_at". You
         | might learn that due to a bug, you didn't record a billable
         | event, and you need to insert it into the history (say, to put
         | it in the correct billing period). But setting the "created_at"
         | in the past brings a bunch of issues; it's confusing and you'll
         | soon hit issues where lying about created-time trips you up.
         | (Migrations, reasoning about what version of the code applied
         | what events, etc).
         | 
         | Fowler has good further reading here:
         | https://martinfowler.com/articles/bitemporal-history.html.
        
         | bob1029 wrote:
         | I think event sourcing / logging is _the_ way to solve this
         | kind of thing.
         | 
         | You have an obvious start/stop checkpoint in the log,
         | processing can be done in batch after hours, no information
         | ever gets destroyed, etc.
         | 
         | Mutable database rows that are used for accounting purposes
         | should sound dangerous to anyone trusted with these systems.
        
         | bombcar wrote:
         | And depending on how you do it, it's not as hard as it sounds -
         | for example, the first minute of "cloud server V1" can get a
         | row in the db, and each "period" that row gets _updated_ with
         | the current minutes.
         | 
         | Or you can log them into tables that get processed into other
         | invoice tables.
         | 
         | This also lets you keep grandfathered customers around as long
         | as you want.
        
         | flappyeagle wrote:
         | If you squint, this is similar to how e-commerce billing is
         | done. You have stock keeping units that represent the logical
         | item being sold, and every transaction clones that row as part
         | of the order record.
         | 
         | This way, if the price changes, the item description changes,
         | the images on the item change, etc, you can still have a record
         | of what was _actually_ sold and how much to refund a return
         | etc.
        
       | rsanaie wrote:
       | I'm getting PTSD reading this article
        
         | Rafsark wrote:
         | Ahah so sorry. Hope this is because of the substance, not about
         | the form ;)
        
       | api wrote:
       | Any kind of business or accounting system tends to be an endless
       | long tail of "can the invoicing system send the invoice in
       | Esperanto using only 16-bit Unicode characters on Tuesdays but
       | only while it is raining and only for customers whose last names
       | end with E and who signed up more than one year ago according to
       | the Chinese calendar?" type features.
       | 
       | That's why attempts at "no-code" systems where biz/accounting
       | people can design their own system are a perennial fad, but as
       | these systems are developed they always just end up evolving into
       | weird domain specific programming languages.
       | 
       | It's also why any sufficiently large company ends up implementing
       | their own in-house accounting system and/or customizing some
       | byzantine monstrosity like SAP which is really just another way
       | of implementing your own.
        
         | nikanj wrote:
         | The #1 reason those systems are moderately successful: When
         | your sales person needs to write the logic for billing customer
         | X, they'll try to make the customer contract more reasonable.
         | 
         | Normally sales people are deal-driven, and if promising the
         | customer "14% off on the first three transactions on every
         | rainy Tuesday, unless Monday was also rainy" gets the deal
         | closed, then that's going in the contract.
         | 
         | No better way to ensure the contracts are reasonable, than
         | making sure the person negotiating the deal feels the pain of
         | billing it
        
           | Rafsark wrote:
           | Agreed! this triggers also complex behaviors because sales
           | people want to handle this in their env (Salesforce, hubspot
           | or whatever); You also have to build the logic to update
           | subscriptions and pricing directly from it, in a two-way
           | sync. Things getting crazier ;)
        
       | biermic wrote:
       | Absolutely agree with the poster. This is my life at the moment.
       | Just to take money for a small piece of software I built.
       | 
       | Multiple currencies, trial periods, when in the process do you
       | ask for the creditcard, country specific taxes,... And the worst:
       | invoices.
       | 
       | While paddle.com takes care of many of those things - I was
       | shocked after realizing how much work this is going to be.
       | 
       | Please think carefully about those things before you quit your
       | job to work on your "Micro SaaS" or "unicorn startup".
        
         | Rafsark wrote:
         | Agreed! But I do prefer to build it for me rather than someone
         | else's startup, though
        
         | dand31 wrote:
         | Have you not looked at Stripe? Their product is fairly straight
         | forward to set up
        
         | herdrick wrote:
         | Have you looked at Outseta? https://www.outseta.com/billing and
         | https://www.outseta.com/demo . I haven't used it but it looks
         | great. I'd love to hear what you think.
        
         | akrymski wrote:
         | Have also been considering Paddle. Would love to know what you
         | found it's missing?
        
       | micromacrofoot wrote:
       | Ok now integrate billing with flight booking and timezones... the
       | devil's stack
        
       | dboreham wrote:
       | Note OP makes a billing product (OSS, granted) so is motivated to
       | characterize the field as complex and hard. In reality billing is
       | just like many other processes humans engage in. For sure it's
       | more complex than computing prime numbers, but hey try writing
       | software to capture medical services processes :) In the end this
       | is exactly what engineers are supposed to do: figure out ways to
       | model/capture/represent complex processes and data.
        
         | spookthesunset wrote:
         | Or better, buy a billing system instead of inventing one
         | inhouse. Billing is hard to do correctly. For one thing it
         | interconnects with so many different platforms in your company.
         | For another thing, the cost of fucking something up is high--
         | people don't exactly like seeing mistakes in their bill. Hell,
         | think about tax... you wanna deal with that shit?
         | 
         | To do it "correct" you've got to have people who truly
         | understand accounting concepts like double entry bookkeeping,
         | financial reporting, cash vs. accrual, financial regulations,
         | auditors, etc. Unless your company's product is billing, good
         | luck hiring an engineer who knows this shit.
         | 
         | But trust me from experience. Don't build your own billing
         | system. There are several good ones out there that will grow
         | with your organization. Buy one.
        
           | piva00 wrote:
           | Similar experience in some companies in my CV. Billing
           | systems aren't fun to maintain, develop nor debug. They take
           | a non-trivial amount of time when done wrong and if you are
           | building one in-house you'll inevitably run into some
           | mistake.
           | 
           | Buy a billing system, it'll save engineering hours having to
           | deal with it and if you choose right they'll scale with your
           | company.
        
             | jdenquin wrote:
             | I totally agree with you, I had to work on the Qonto's
             | billing system (that Raffi is talking in the blog post) and
             | it wasn't fun to maintain. I remember the pain it was to
             | change anything without breaking the whole system, not
             | because the system was bad, but because it's complex and
             | when you build it in-house, you will certainly take some
             | shortcuts that makes it not so flexible!
        
             | spookthesunset wrote:
             | Not only will you get mistakes, but much worse in my
             | opinion is the opportunity costs involved. You will always
             | be playing catchup to add new (very basic) features that
             | the real packages offer right out of the box.
             | 
             | For example if your homebrew thing doesn't handle price
             | changes, that might take you quite some time to build in
             | functionality. That time spent is time where you couldn't
             | quickly react to market changes, which is money left on the
             | table. Had you bought something that supports a simple use
             | case like "change the price", you'd hit a couple buttons
             | and boom... your product now sells for a different price.
             | 
             | A companies billing system is one of the most important
             | systems in the company. It is literally how money gets into
             | your pocket. If you build it yourself, you will sign up for
             | pissing away a ton of time writing code that literally will
             | let you collect _more_ money from your customers. Had you
             | bought something, you 'd just fucking go do the change
             | right away and collect _more money from your customers_
             | almost instantly.
        
           | jermaustin1 wrote:
           | Could not agree more. Even building your own billing system
           | atop something like stripe is super complicated. Rebill
           | dates, proration, upgrade/downgrade, cancel, updating card on
           | file, refunds, charge backs. These are all things you end up
           | patching as you come across them.
           | 
           | There was a really nice and simple to use billing software
           | that was built on stripe. I used it for a handful of products
           | after I decided to never roll my own again. It is gone now.
           | GoDaddy bought them and shut them down.
           | 
           | I think Stripe checkout is a valid solution now if you don't
           | mind sending your customers away from your site, but I
           | haven't played with it since they rolled it out.
        
           | gopher_space wrote:
           | "How to realize when you're about to build your own billing
           | system" would be a more useful discussion.
        
           | vishnugupta wrote:
           | As you say; billing system is tip of an iceberg. There's
           | reconciliation, settlement, payouts, tax, financial reporting
           | and what not. For a small mom-and-pop store, sure build it.
           | But for any half-complex business billing is a rabbit hole.
        
         | dhosek wrote:
         | This feels like a good moment to mention my most embarrassing
         | bug which was, of course, in a billing system. I had written
         | code to handle the overdue billing of customers' usage on an
         | internet telephony service. The code seemed to work great in QA
         | so we went ahead and pushed it to production.
         | 
         | A couple days later we got an angry call from a customer whose
         | card we'd maxed out. The final stage of the process was to
         | adjust their bill by the amount that they paid, but there was a
         | sign error in that adjustment so instead of lowering their
         | balance by the amount paid, we increased it. As a consequence,
         | for a user with, say, a $50 balance, we kept doubling the
         | amount that we charged them each day.
         | 
         | Exponential growth is a powerful thing.
        
         | alfalfasprout wrote:
         | I'm not sure this comment is exactly in good faith though-- OP
         | does make a billing product but as a result is also uniquely
         | qualified to provide insights into what can make it hard.
         | 
         | This isn't OP trying to claim it's the most difficult problem
         | to solve from an engineering standpoint. Merely why it's hard.
         | 
         | Of course engineers solve problems, hard or not. That's not
         | really being debated here is it?
        
         | RockRobotRock wrote:
         | I think this is a great article and sales pitch for the
         | company, since a lot of the comments have been anecdotes of how
         | its actually even HARDER than the author leads on.
        
         | [deleted]
        
           | [deleted]
        
         | AnhTho_FR wrote:
         | Hi dboreham, I'm one of the co-founders of Lago here (the OP).
         | 
         | I completely agree with you, billing is not the most complex
         | process of all, medical services may be of higher complexity.
         | 
         | Our post was meant to highlight the discrepancy between the
         | perceived low complexity (lots of teams who have never done it
         | think it's simple) and the reality, with our own experience
         | building a fintech.
         | 
         | I think for some processes (medical services? I'm not an expert
         | in this field to be honest) people might suspect it's going to
         | be challenging.
         | 
         | That was our intention. Basically we think no B2B saas should
         | be building billing themselves, unless they are 300% sure their
         | pricing will always remain subscription based only, and very
         | simple (same amount every month).
         | 
         | Hope I helped clarify!
        
         | [deleted]
        
         | zippergz wrote:
         | I have no vested interest in selling billing products, and my
         | experience is that billing is somewhat unique in the delta
         | between how hard people who have never done it THINK it is, and
         | how hard it actually is. There are many hard things that appear
         | simple, but time and time again I have seen inexperienced
         | engineers be caught off guard by just how much harder billing
         | is than it looks.
        
         | Aeolun wrote:
         | If it's as annoying as translating human processes into code, I
         | can see how they'd want to standardize it so they'd never have
         | to do that particular part again.
         | 
         | Then again, if you make it too customizable, you end up with
         | current single sign on solutions.
        
       | Andrew_nenakhov wrote:
       | As someone, who has built a billing system not once in my life,
       | but twice (one for an internet privider I worked for, which
       | counted _the amount of traffic_ , and another one for a SaaS
       | project(, I fully sympathize with the post. Billing is an
       | unbelievable can of worms even before you get to taxes. Add in
       | all the things the marketing people want from billing (trials,
       | discounts, per-seat per usage pricing, etc), and you have enough
       | tasks to last till retirement, no matter how young you are.
        
         | Rafsark wrote:
         | Yep, do agree that non tech team created a lot of pricing
         | complexities, sometimes without any reasons. Remember a
         | marketing team updating plans on webflow and telling the
         | product team << see, not that hard >> ;) Ended up with a whole
         | squad of engineers called << the pricing cross functional team
         | >> ...
        
       | londons_explore wrote:
       | Random idea:
       | 
       | Don't build a billing system. Or at least not a precise one.
       | 
       | Have a price list as normal, but just guestimate the user's bills
       | based on any easily accessible information. Eg. For a hosting
       | company I might just count how many VM's they have active when
       | the billing script runs . If the user isn't happy with the total,
       | give them a button to correct the total and pay that.
       | 
       | Spot check what the user's pay, and warn then ban any users which
       | are clearly deliberately paying substantially less than list
       | price for your services.
        
         | CharlesW wrote:
         | How does auditing work if billing is non-deterministic?
        
         | AnhTho_FR wrote:
         | I love it, sounds like the Swedish shops with no cashier
         | https://mashable.com/article/swedish-store-cashiers Has it been
         | tried before? How were disputes managed?
        
         | Hackbraten wrote:
         | You'd still have to apply the right tax rate for every line
         | item. If you allow the user to edit the total, then which of
         | the tax amounts are you going to recalculate?
        
         | __alexs wrote:
         | This is a great way to be bankrupted by crypto currency miners.
        
         | recursive wrote:
         | This sounds like trouble at several levels.
         | 
         | Someone's going to reverse engineer your heuristic and min-max
         | it. At that point, you'll need to defend your heuristic against
         | edge cases. And then you may as well just make it official.
         | 
         | Also, B2B customers are allergic to "pay what you feel"-type
         | schemes.
        
       | bokohut wrote:
       | As a co/founder and core architect of multiple PCI level 1
       | compliant payment processing companies in the last two decades I
       | will add as others have that billing and payments is exactly like
       | anything else which is "difficult". Once you spend enough time in
       | the trenches dealing with the challenging technical issues your
       | experience and creativity leads to the proper solutions that
       | further enhance the system. Everything is just inputs and outputs
       | yet it is what one does in between those "puts" which matters and
       | thus where experience can reduce such challenges.
        
       | walnutclosefarm wrote:
       | Always has been. Marketing and sales create complexity on the
       | front end, devising all kinds of products, plans, discount
       | schemes and related complexity; jurisdiction, taxes, and
       | accounting rules add complexity on the backend. In the middle,
       | measuring what you're billing for is the hook around which all
       | that complexity chaotically orbits.
       | 
       | Decades ago - the computer involved was an honest to goodness
       | System 360 (which is to say, not a 370, Z, or any of the the code
       | compatible 360 successors) - I spent an evening trying to figure
       | out the service charge on my bank account. I couldn't get at all
       | close to the figure on the statement by applying the bank's
       | schedule of charges. I took it into the bank, and got bumped by
       | the teller to a department manager, and thence to a VP (small
       | town; small bank), whom I told, "I will pay the service charge if
       | you can explain to me what I'm being charged for." 2 hours later
       | he gave up, having not gotten any where near an explanation,
       | grinned, and said, "I can fix this." He set some flag on my
       | account, and I never again paid service charges at that bank. Yep
       | - that flag remained set on my account for nearly 20 years,
       | through multiple software and hardware upgrades, until the bank
       | was acquired by a big, expanding regional bank, and I left for a
       | different, entirely local bank.
        
         | Rafsark wrote:
         | The marketing team of my previous company created a whole fake
         | price plan that never existed in the code base. Somehow it
         | works to drag acquisition, but it's a pain in the ** to explain
         | why it's not as easy as updating webflow ;)
        
         | [deleted]
        
       | hammock wrote:
       | Double-entry accounting is tough for a lot of people. It's a
       | different domain and trying to fit it into traditional "math"
       | will only cause headaches.
        
         | tabtab wrote:
         | An alternative to DE is "Assume Balance". See near the bottom
         | of http://wiki.c2.com/?AccountingModeling
        
         | kdeldycke wrote:
         | Still, someone tried in the "Algebraic Models for Accounting
         | Systems" book: https://www.amazon.com/Algebraic-Accounting-
         | Systems-Salvador...
         | 
         | Source: https://github.com/kdeldycke/awesome-billing#finance
        
       | daxaxelrod wrote:
       | Poked around their site a bit, they claim to be open source but I
       | don't see a link to a git repo anywhere. Also searched GitHub a
       | bit but might have missed it.
        
         | AnhTho_FR wrote:
         | Hey @daxaxelrod! I'm one of the cofounders of Lago, the lib
         | will be opened very soon, we're in the final steps of QA,
         | that's why. I will make sure to ping you back here when it is.
         | We wanted to share this post about our first-hand experience
         | with billing a bit ahead of this. Thanks for your patience!
        
           | daxaxelrod wrote:
           | Hi! Cool, can't wait to poke around. I've used killbill
           | https://github.com/killbill previously and would be
           | interested in your offering.
        
             | AnhTho_FR wrote:
             | Will ping you asap!
        
       | fatnoah wrote:
       | My very first startup (wayyyy back in 2000) built a billing SaaS.
       | I fully agree that rating, billing, invoicing, and all of the
       | related things are hard. I learned a lot in that role about
       | dealing with complexity...and date/time.
        
         | Rafsark wrote:
         | What are the top 3 things you learned that every company should
         | be aware of? Could be interesting to have an experienced view
         | on this :)
        
       | aerovistae wrote:
       | > To solve this problem at scale, we adopted a radical sharing
       | approach. We've started building an Open-Source Alternative to
       | Stripe Billing (and Chargebee, and all the equivalents).
       | 
       | This is so great. I personally haven't had to deal with this
       | problem, but I've worked at a number of organizations (and heard
       | about many others!) where this sort of business logic had to be
       | implemented. It's just reinventing the wheel. I shudder to think
       | how many companies have implemented a system for managing
       | recurring subscriptions.
       | 
       | We have things like Ruby-on-Rails, Django, Laravel, and many
       | others to take the bite out of building web applications. They
       | keep us from having to reinvent the wheel.
       | 
       | We need similar open source frameworks for common business use-
       | cases - billing, subscriptions, order/purchase management, and so
       | on.
       | 
       | Sometimes it's weird to remember we're in the stone age of
       | technology - all of this is a few decades old at most, and even
       | early predecessors don't go back more than 70 years. Human
       | history goes back tens of thousands of years. There's so much yet
       | to come.
        
         | ptsneves wrote:
         | This is where solutions like WooCommerce shine. WooCommerce is
         | an amazing piece of software that is many times used for free,
         | but generates thousands of dollars.
        
         | intuxikated wrote:
         | > We need similar open source frameworks for common business
         | use-cases - billing, subscriptions, order/purchase management,
         | and so on.
         | 
         | You mean like an ERP? There's 2 open source ones I can think
         | of:
         | 
         | - Odoo, which is the bigger one, mostly Open-source (CRM /
         | sales / subscriptions / invoices / webshop / inventory /
         | purchase) but some enterprise-only modules (Rental, Field
         | Services), I work with this software daily as an Odoo Developer
         | (Customizing Odoo for customers' needs).
         | 
         | - Erp-Next, which is completely open source as far as I can
         | tell, through my limited testing it seems to be less advanced
         | than Odoo currently.
         | 
         | EDIT: you can even check runbot.odoo.com for some test-
         | environments which are automatically built, where you can
         | test/experiment, login is always admin:admin
        
           | aerovistae wrote:
           | I hadn't heard of that! Maybe that is what I meant.
        
       | sandworm101 wrote:
       | Do not worry. Blockchain will solve or at lease simplify all of
       | these problems.
       | 
       | It is the way.
        
         | StevenWaterman wrote:
         | Look, Poe's law!
        
         | Rafsark wrote:
         | Even if with blockchain and crypto you need to define a logic
         | to bill your customer. This logic is pre-transactional and
         | define how much you need to price the transaction.
        
           | anticensor wrote:
           | Adopt a _nothing is fungible, everything is serialised_
           | approach and maintain real equivalence classes instead of
           | assuming fungibility as a proxy of replaceability.
        
       | oznog wrote:
       | It's missing when you find out that business people don't know
       | how the business must be executed with total precision.
        
       | kache_ wrote:
       | nightmare, or job creator?
        
         | bloodyplonker22 wrote:
         | nightmare job creator.
        
         | Rafsark wrote:
         | Job creation comes always because of hard-things to build; When
         | getting easier, it cuts job!
        
       | giantg2 wrote:
       | I work on a team collecting fees at a financial company. It is
       | tedious and boring. There is a lot of complexity. I've often
       | asked the business if they had ever thought about a different fee
       | model that would be less complex. They just want to stick the
       | legacy business model into the new tech...
        
         | AnhTho_FR wrote:
         | I'm Anh-Tho, one of a co-founders of Lago, thanks for your
         | comment! Financial and cloud infrastructure companies are the
         | ones with the most complexity. I've been on the business side,
         | and sometimes you do want to change the pricing but there's so
         | many implications: - Maybe existing users will churn and/or
         | revenue will decrease as a result - If you change the billing
         | system, there's a risk of bugs/errors and complains - If you
         | spend engineering time on this, then you need to deprioritize
         | other projects So... business teams often end up giving up, and
         | that's a shame because iterating on pricing is a very powerful
         | lever of revenue growth.
        
       | welder wrote:
       | I implemented billing at WakaTime with Stripe, Braintree, and
       | Coinbase as swappable payment providers. It's definitely a source
       | of edge case bugs, but overall it works pretty well. It supports
       | prorating subscriptions across providers, monthly & yearly
       | billing, trails, discounts.
       | 
       | * We don't remit taxes for customers because that would be
       | impossible to build in-house, but everything else was achievable.
       | 
       | * We have tons of logging, and generate transient Quotes on our
       | end, then check that the expected charge matches what the payment
       | provider actually charged.
       | 
       | * Each Quote is reproducible, so if any bugs come up we can give
       | the "create quote" code the same input and see what went wrong.
       | 
       | * What helped when building was hourly tasks running in the
       | background to make sure customers who should be billed were being
       | charged, and make sure we didn't double charge any customers, and
       | then alerts so we could find and fix those bugs.
       | 
       | I would do it again to support both PayPal and Stripe, but it's
       | definitely a source of complexity for the code base.
        
       | hedgehog wrote:
       | Can corroborate, my experience working on an upgrade to an
       | existing multi-platform (iOS IAP + Strip for web product)
       | subscription service was certainly a bit painful.
        
       | dekhn wrote:
       | Basically everything about enterprise is a nightmare for
       | engineers. What amazes me (after having worked at some of the
       | most profitable companies in the world) is just how little
       | intelligence the leadership has about their own revenue or costs,
       | beyond "wow huge amounts of money is coming in or going out". And
       | how many critical processes are implemented manually, by
       | individuals, with personal spreadsheets, on their laptops.
        
       | cdkmoose wrote:
       | Just wait until you have to do this under government controlled
       | (tariff) environments. Years ago I worked on a tele-conference
       | platform for large international telecom. We built the software
       | to run all aspects of their platform including billing.
       | 
       | Government tariffs covered billing rules for each leg of a call
       | including rates based on caller's local time of day. Converting
       | bridge time to local time via area/country codes(only data
       | available) and time-zones is quite a mess. Add DST calculations
       | to that per locale to reconcile negative duration legs or legs
       | that should be 1.5 hours but show up as .5 hours just makes it
       | cloudier.
       | 
       | If your system repeatedly gets it wrong, you could be in trouble
       | for billing fraud or tariff violation. No joy in that job.
        
       | chasd00 wrote:
       | I spent a lot of time right out of college working on the
       | equivalent of an invoicing system for a pharmacy chain (rx drug
       | pricing, electronic carrier submission, and reconciliation).
       | 
       | Account receivables is also another nightmare. We would get
       | checks that randomly show up at corporate for no reason from
       | insurance carriers but then when the carrier realized their error
       | instead of handling it as a separate process they would deduct
       | the check amount from whatever invoice ( or even across a range
       | of invoices! ) from us they felt like. We literally had a bucket
       | called "magic money" these random deposits went into that we
       | would use to fill in the A/R gaps from insurance carrier
       | insanity. There was no connection between magic money and
       | whatever invoice they decided to short change us on so it was
       | just a hope-for-the-best process.
        
       | po1nt wrote:
       | Implementing and maintaining billing is my daily job for the last
       | 6 years.
       | 
       | I would also mention topics like: - Reporting (various data
       | aggregation and audit reports) - High reliability, nothing hurts
       | company more than unability to bill their customers - Rounding,
       | this can be seen as a subset of "taxes" but it's much more
       | complex - Locating user, also can be seen as a subset of "taxes"
       | but user can have country A set in profile configurations,
       | country B on credit card and country C geolocated from IP address
       | - Timezones, issue everywhere but when we talk accounting it's
       | super important - Talking to moronic payment gateway providers.
       | This is the biggest ones. I would love to just flip Apple and
       | Google like Linus flipped of nVidia. Proprietary, poorly
       | documented, "find out yourself by weeks of experimenting"
       | bullshit with no easy way of getting technical support even when
       | you bring those companies millions per year. Things don't work,
       | deprecate monthly or weekly and expect you to be always ready to
       | make changes. Some implementation make zero sense at all with
       | complete paradigm shift of handling payments like between Google
       | in-app pay and Google subscriptions.
       | 
       | But as my SO says "Don't cry, it pays well"
        
         | AnhTho_FR wrote:
         | Wow, thanks for sharing! We found out 'billing engineers' are
         | very rare and really demanded, as it requires to be very detail
         | oriented, technical, and business processes oriented. But even
         | if there is high demand (and I guess: corresponding high pay,
         | as you mention), very few engineers are up to the challenge!
        
         | Rafsark wrote:
         | Yep you are right, indeed. We could have mentioned
         | Reporting/Analytics for revenue, which is always a huge pain
         | for companies!
        
       | mc4ndr3 wrote:
       | "Should we build it in house?"
       | 
       | No. No, spelled F-U-C-K-N-O.
       | 
       | Should you compare and contrast off the shelf solutions, test one
       | or two, and slowly expand its use to cover more of your business?
       | By all means, yes.
       | 
       | Should you develop an in-house custom variant after that? Still
       | no. For billing or anything else.
       | 
       | Even a pure tech company like Google should not vertically
       | integrate everything. You quickly end up wasting time making
       | horrid systems instead of generating your main business revenue.
       | 
       | "Oh, but our needs don't align with the way the industry standard
       | third party systems work." That's a symptom of the disease. You
       | won't cure it by enabling the virus to proliferate even further.
       | 
       | People who don't execute I.T. low level changes mistake computers
       | for magic. Yes, computers can do a lot. But even the tiniest
       | feature takes an incredible amount of focus, cost, development
       | time, maintenance time, headaches, and gnashing of teeth to
       | accomplish. The magic is that it looks easy, from the user's
       | point of view.
       | 
       | Let's put it bluntly: We can draw a direct line from third party
       | systems with multiple businesses as customers, with cost savings.
       | It's far more likely to be a complete waste of resources to in-
       | house a new software system.
       | 
       | Maybe you don't have a name for the kind of system you want or
       | need. That's okay. Keep assuming it's probably already out there,
       | and continually search for it. Googling is cheaper than building.
       | 
       | "But we can build it better than them because..." Please, that's
       | the fallacy of exceptionalism. Remember, every company wants to
       | believe they're truly pioneering, talented, and logistically
       | capable of doing all the things. Don't spread yourself so thin.
       | Keep the lights on. Grow your customer base. Everything else is a
       | pipe dream.
       | 
       | "But the third party systems suck."
       | 
       | Yes, they very much suck. And yet the cheapest path to success is
       | pushing them to un-suck their product. Not starting from scratch
       | to create a second, even more immature product.
       | 
       | Frankly, computer systems are already quite flexible. You can
       | often bend an existing one to fit your needs. This happens with
       | Jira, for example. They customize it until it can't function at
       | all anymore. But this sad extension situation is still cheaper
       | and more effective for conducting business than invention.
       | 
       | If you truly believe a new kind of system needs to be built, go
       | and start a new software company. Or pay a software vendor to do
       | it. (Software vendors, just take their money, smile, and nod.)
       | But for Warren Buffet's sake, don't spend a dime on a new line of
       | code if at all possible.
        
       | einpoklum wrote:
       | > Why billing systems are a nightmare for engineers
       | 
       | My guess: Because basically nobody wants to develop one of these
       | as a hobby FOSS project. The whole idea is collecting people's
       | money, which when you write your own code for public benefit, you
       | basically don't do :-)
       | 
       | > We quickly decided to add plans, and 'pay-as-you-go' features
       | 
       | So, the author talks about things getting more complex, beyond
       | their expectations. But - why did they not expect this? I mean,
       | they know that companies pricing changes over time; that payment
       | models change, including rates, cadence, use of internal credit
       | etc. We all know this without ever having worked on a billing
       | system.
       | 
       | > Qonto is a 'neobank' ... Fintech unicorn
       | 
       | So they were expecting billing to be easy for a bank-like
       | endeavor? Hmm.
       | 
       | > #1 - Dates
       | 
       | The date problems per se are quite mundane and any non-trivial
       | software system which involves timed activity deals with them.
       | The billion period problems are not really date problems and are
       | a recap of what OP had already written about. They are also
       | problems most of us are well aware of from our personal
       | experience as people in modern society ("Does my bus pass expire
       | a day after I bought it, i.e. 24 hours later, or does it expire
       | at the turn of the day = at midnight?")
       | 
       | etc.
        
       | CSMastermind wrote:
       | I just want to say that this article is a great intro to the
       | topic and I credit a lot of my growth and development as an
       | engineer to working on billing systems in my first job out of
       | college.
        
       | thibo_skabgia wrote:
       | Love this comprehensive article. I've seen that pain in many a
       | company I freelanced for. And it's much deeper than they even
       | know.
        
       | hkon wrote:
       | Depends on your requirements I would say. If your target
       | customers are global, then yes, you'll have to deal with a lot of
       | rules and regulations. But the engineering side of things I don't
       | think is that hard.
       | 
       | Perhaps when you first enter the domain it seems like a lot
       | because you are unfamiliar with it, but such is it with all
       | things.
       | 
       | Also, these guys have an economical incentive of convincing you
       | it's hard. So keep that in mind.
        
       | fhrow4484 wrote:
       | Since founders are commenting here. getlago.com webpage is
       | strange:
       | 
       | "Lago is backed by Y Combinator"
       | 
       | "The Open Source Stripe Billing Alternative"
       | 
       | Why would YC invest in both Stripe and a competitor of Stripe?
        
         | abraae wrote:
         | To avoid the innovator's dilemma?
        
       ___________________________________________________________________
       (page generated 2022-05-18 23:00 UTC)