ec changed the topic of #elliottcable to: a 𝕯𝖊𝖓 𝖔𝖋 𝕯𝖊𝖙𝖊𝖗𝖒𝖎𝖓𝖊𝖉 𝕯𝖆𝖒𝖘𝖊𝖑𝖘 slash s͔̞u͕͙p͙͓e̜̺r̼̦i̼̜o̖̬r̙̙ c̝͉ụ̧͘ḷ̡͙ţ͓̀ || #ELLIOTTCABLE is not about ELLIOTTCABLE
<ljharb> ELLIOTTCABLE: i'll sketch something up to reply to isaacs and i'll ping you first
<jfhbrook> I mean
<jfhbrook> idk I wouldn't engage w/ isaac anymore
<jfhbrook> having not read the scrollback, like
<jfhbrook> yeah idk I Lost Faith around the time CJ got fired via text
<ljharb> was that him tho, or brian
<jfhbrook> I mean
<ljharb> but yeah either way him and laurie's handling of things was subpar :-/
<jfhbrook> laurie had scriples
<jfhbrook> he quit at least
<ljharb> eventually
<ljharb> but yes
<jfhbrook> isaac put his head in the sand and continues to pretend everything is fine
<ljharb> while npm remains the center of the js ecosystem tho, i can't afford to ignore isaac ¯\_(ツ)_/¯
<jfhbrook> python's chill :)
<jfhbrook> my current problems don't involve the programming language - like the python ecosystem sucks for its own reasons but I have much bigger problems
<jfhbrook> I was at a party today and met an accountant and I showed her some of our whiteboarding drawings and she was like, if you wanna talk more you can pay me
<jfhbrook> that far off base
Sgeo__ has joined #elliottcable
Sgeo_ has quit [Ping timeout: 276 seconds]
<jfhbrook> this job has made me realize that I have a bunch of very strong opinions about how to run a software company
<jfhbrook> and that if nothing else I can use this information to convince someone to make me a line manager
<jfhbrook> which is where my career has been creeping towards for the last 4-5 years anyway
<ljharb> i don't understand
<ljharb> you were at a party and she wanted you to pay her to talk?
<jfhbrook> the questions I were asking about accounting were so basic that it was clear we needed to hire consultants to teach us accounting
<jfhbrook> as an enterprising accountant, she hires consulting
<jfhbrook> er provides*
<jfhbrook> frick I'm high
<jfhbrook> the point is that I realized that my boss thinks we're going to "get above water" - read, stop having working on the weekend grade outages literally every month - by drawing uml diagrams on a whiteboard with the staff engineer for an entire quarter, mostly without an accountant in the room, and then implementing the Full Rewrite 3+ months later
<jfhbrook> meanwhile I try to keep these weary soldiers in shape as they spend half of their jobs on-call in the most brutal sisyphean system I've ever sine
<jfhbrook> I sketched out the steps to do a full release and it was four pieces of paper
<jfhbrook> idk if you know airflow but I had the same scaling problems with the manual steps as airbnb engineers have with "subdags"
<jfhbrook> in terms of drawing it out
<jfhbrook> of course, the way we ``get above water'' is by making deploys an order of magnitude faster, and only then applying DDD to rewrite the system incrementally
<jfhbrook> DDD is a good book but even in DDD eric evans is always talking with a domain expert; in other words eric evans would insist on talking to an actual fucking accountant
<jfhbrook> sorry I didn't mean to go on a rant
<jfhbrook> I uh
<jfhbrook> like I said I have a bunch of surprisingly strong opinions about how to run a software project
<jfhbrook> man fucking how do you read DDD and come to the conclusion that it involves waterfall in a vacuum
<ljharb> what does an accountant have to do with UML diagrams?
<jfhbrook> I work on accounting software
<jfhbrook> it's poorly architected
<ljharb> aha
<jfhbrook> the book domain driven design is about the M in MVC, and it suggests a general set of architectural patterns for structuring them, but is ultimately a book about making your models match the actual domain
<jfhbrook> so if we were to do DDD it would be more like
<ljharb> pretend i'm non-snarkily asking, how hard is it to have software do t-charts and formulas
<ljharb> (like, what's the complexity i'm probably wildly unaware of)
<jfhbrook> ok so backing up, here's what I do
<jfhbrook> I work for squarespace, moving lots of cash around, could go public if their accounting software didn't suck
<jfhbrook> now, if you're doing accounting for what is now a multinational site host
<jfhbrook> so subscriptions to products
<jfhbrook> you have to follow an accounting standard for what's called "revenue recognition" called "asc 606"
<jfhbrook> asc606 replaced asc605
<jfhbrook> so here's the core idea behind revenue recognition
<jfhbrook> so let's say I'm squarespace, and you give me a hundred bucks for a year of website and I haven't given you any website yet
<jfhbrook> have I really earned that money?
<jfhbrook> according to "generally accepted accounting principles" or gaap - see also oboa
<jfhbrook> ocboa ("other comprehensive basis of accounting")
<ljharb> right, gaap is the normal one
<jfhbrook> anyway, according to gaap, the cash money that stripe gives us
<jfhbrook> starts out as /deferred/ revenue
<ljharb> cash basis versus something else
<jfhbrook> and based on a bunch of business rules, we amortize that revenue over time
<ljharb> for some business it makes sense to count the revenue when the cash comes in, but for most it should count when the work is performed
<jfhbrook> accounting as far as I can tell is actually very event-driven
<jfhbrook> right, exactly, so it's a complex set of algorithms that implement the idea of starting with a pile of people having paid you and turning it into money you earned as you actually, y'know, host sites
<jfhbrook> of course that's "just" revrec
<ljharb> sure, makes sense
<ljharb> so why's that particularly hard
<jfhbrook> well it's not 🙄
<ljharb> you'd have an "incoming $" table and an "billed $" table, and you'd just compute how much is where
<jfhbrook> they've made it hard by being idiots
<ljharb> lol
<ljharb> ok
<ljharb> glad my intuition isn't off
<jfhbrook> well it's not *that* kind of easy
<jfhbrook> it's like this
<jfhbrook> we get a big pile of really nasty fucked up invoices and payments
<jfhbrook> if this was working the way it was supposed to, tbh imo irl
<jfhbrook> we would process all of these invoices and payments, do basic validation, warehouse them using our Reference Architecture, keep records of all invoice and payment ids that didn't make it through the system with materiality estimates and wired to send sentry alerts to the billing team
<jfhbrook> the billing team has bigger problems than us we'll just say that
<jfhbrook> so in an ideal world we would do this processing and by the time the revrec system saw them they would be conformed and ergonomic to work with
<jfhbrook> as it stands our ingestions do an insane amount of work with like
<jfhbrook> unvalidated gnar-dogg json
<jfhbrook> we could fix this in two sprints
<jfhbrook> but assuming you've made the raw data come through the gauntlet, the basic architecture, and you can get hints of this talking to accountants and googling revrec
<jfhbrook> so we would take billing data, which is already event driven, and then conform it to a concept of events that a revrec system runs off - so a billing event might be an invoice created, invoice completed, whatever - and you would basically combine that plus events that trigger the recognition of revenue (a work center ran for a day, or more realistically a daily cron)
<jfhbrook> that gets processed by a thing that "knows about posting rules" and inserted into a journal, which appears to be events involving debits and credits to accounts, which seem to mostly be modeled as a namespace or dimension
<jfhbrook> from there it's reporting concerns. some reports are simply casting that onto a dimensional model, others involve making predictions, or calculating cohorts, whatever - all things that are tractable with a good base
<jfhbrook> the things that make accounting hard are that the state diagrams of invoices and payments will lead to wildly complicated business rules (what do you do if someone makes an account, buys a site/domain bundle, buys a site on a second account, transfers a domain between those two accounts, and then cancels both sites?)
<ljharb> the billing and revenue are per-account
<jfhbrook> and that the standards are exacting (these two numbers are off by 0.2%, that's enough to flag auditors)
<ljharb> but sure, it can get complex
<jfhbrook> billing is a little complicated because they stuck with stripe for way way too long and are in the process of trying and failing to build a billing system in-house
<jfhbrook> ljharb if these people just hired a fucking product manager they'd be fine
<jfhbrook> it's challenging but in the same way that anything else is
<jfhbrook> the great thing about these posting rules is that if we built a UI around it the accountants would tell us what to make and it would exactly match the domain like almost tautologically
<jfhbrook> but no it's not a special crazy thing, a team of six should be able to crush this
<ljharb> it's pretty sad when a PM is the difference between success and failure instead of the difference between "efficient" and "a bit inefficient"
<jfhbrook> right, developers should have basic competency in this
<jfhbrook> and yeah, at first I was like, wait I know what we have to do I just have to try to explain it to people
<jfhbrook> but then I realized the issues were way too deep for me to do anything about
<jfhbrook> I can write all the RFCs I want but if people don't understand the basic language around fucking shipping
<jfhbrook> I could teach the devs, I can't school my boss - who by the way is not a team lead but a manager of team leads; my team does not technically have a lead
<ELLIOTTCABLE> hm
<ELLIOTTCABLE> how do, You All, feel about it if I added a lexical feature to a language that was 1. semantically incorrect, and 2. inaccessible to non-macOS users ... if that feature is entirely redundant?
<ELLIOTTCABLE> specifically, I'm extremely tempted to add «guillemet» quotations to the lexical-syntax of a shell-like interface I'm responsible for
<ELLIOTTCABLE> they bypass a *ton* of "\"really "dumb\"", complicated\"'escaping'rules ... but only for users who can access them easily
<ELLIOTTCABLE> i.e., macOS users (⌥\ and ⇧⌥\).
<ljharb> why is that inaccessible to non mac users
<ljharb> alt + numeric keypad codes work fine on windows
<ljharb> but yeah « » aren't even characters i know how to type offhand
<ELLIOTTCABLE> well, it's one chorded keypress on a Mac; and may be slightly faster than the additional keypresses for `"\"` or whatever. On Windows, *four* chorded keypresses (or whatever) is definitely not faster; I doubt it would see any use there.
<ELLIOTTCABLE> the idea would be to document this lol, perhaps as an inset at the end of a section on quotation and escaping: "Note for macOS users: «these quotes» are also offered as a simple way to avoid most of this escaping; they can be entered with ⌥\ and ⇧⌥\, and must be balanced «like «this.»»"
<jfhbrook> personally I would not
<jfhbrook> I wouldn't use the obscure cords on mac either most likely
<jfhbrook> but I don't think it's offensive or anything
<jfhbrook> after all many languages allow arbitrary unicode in variable names at least minus a few oddball "first letter must be ascii" style constraints
<ELLIOTTCABLE> yeah, I went to considerable effort to implement UAX #31
<ELLIOTTCABLE> lmao
<jfhbrook> not sure what that means <_<
<ELLIOTTCABLE> the thing you're talking about, allowing unicode in identifiers
<ljharb> it seems like a bad idea to add support for something that mac users will use but windows users won't be able to ergonomically replicate
<ELLIOTTCABLE> as with ... almost anything you can think of, the smart people at the Unicode consortium considered that topic in more detail than you or I ever possibly could, and published extremely-dry recommendations about how to Do That Right
<ljharb> imagine a windows user editing a mac user's file
<jfhbrook> I actually do non-trivial amounts of python hacking on windows
<ELLIOTTCABLE> ljharb: hahahah literally just finished typing something about exactly that, but: basically, that's not a concern in this environment, as input is immediately evaluated, and unlikely to be replicated, saved, or persisted, nor shared or collaborated on
<jfhbrook> since it's a nice computer and I have a good terminal + notebook app now
<jfhbrook> and anaconda is anaconda on all my machines (python data science centric distribution)
<ELLIOTTCABLE> (vi-like command-line, but already with a first-class scripting-language for persistent configuration or scripting or w/e.)
<ljharb> ELLIOTTCABLE: copy-paste from blogs/examples/tutorials
<ljharb> ELLIOTTCABLE: windows users will see it typed somewhere, and try to type it themselves in the repl
<ELLIOTTCABLE> hm
<ELLIOTTCABLE> but that's enough of an edge-case that I'm unconvinced it trumps the massive "niceness" gains of making this alternative available, even if it's only available to a subset of users
<ELLIOTTCABLE> ugh relatedly the input stuff like this is a _massive_ thing that always drives me back to macOS for editing
<ELLIOTTCABLE> I use —, “/” and ‘/’, →, and so on extremely heavily in my running text — whether it's documentation, communication, whatever. have for years. having to be restricted to, effectively, ASCII, is so painful, that it always stands as a serious barrier between Windows or desktop-Linux and I.
<ELLIOTTCABLE> why is DRAM so pure
<jfhbrook> if you wanted to be a *real* jerk you could use smart quotes :)
<ELLIOTTCABLE> hahaha swapping quotes out from under people, i h8 it so much
<ELLIOTTCABLE> man I want to rant about cool Vim things
<ELLIOTTCABLE> how have I been missing out on {Visual}g-Ctrl-A/X for so many years
<jfhbrook> today is not the day for learning new things :)
<ELLIOTTCABLE> oh hey turns out Perl 6 does something like this
<ELLIOTTCABLE> I no longer feel bad 🤣
<jfhbrook> I mean this is perl 6 we're talking about
<jfhbrook> frickin' perl man
<jfhbrook> my how the mighty have fallen!
_whitelogger has joined #elliottcable