792 karma · joined February 4, 2012
Some of them will bullshit you, others will give honest advice. Figuring out which is which is a skill that can't really be taught, you've just got to take meetings and practice.
Our goal is simple: to make it possible to use your phone number to pay, anywhere and everywhere, with zero friction. We have a ton of cool ways to make that work, and a bunch of brands already using our platform.
Email: hello@onetext.com
Our stack:
- Front-end: JS/TS/React
- API: Node/TS/Postgres/Redis
- Services: Shopify/Twilio/PayPal/Stripe/Authorize.net
What we do: payments, vaulting, automated conversations, and merchant-facing dashboards. Plus a whole load of interesting things in-between.
Most important skill: be able to communicate well, and learn quickly. Doesn't matter if you haven't used every technology listed above, so long as you're a fast learner and happy to jump quickly into new things.
Experience level: any. So long as you can code, if we like you and you're a good fit, we'll find a role for you.
Expectations: it's a startup, and we just got accepted into YCombinator 2023. So it will be busy, there's no avoiding that. But we want to create a great engineering culture that fosters innovation, learning, and mentorship. We want to teach, and we want to learn from you too.
Location: we're both CA (bay area), open to remote anywhere in US, may be able to make non-US work with some kind of contracting role but priority given to US-based folk. Not sponsoring Visas.
Salary: completely dependent on experience and skill. Equity on the table.
Send us an email about yourself!
1. Wait until TS complains about a possible null
2. If you have a good default value, use that instead
3. If not, throw a meaningful error
Either way, don't propagate the nulls further than they need to go.
Optional chaining or null checks should not be used "defensively". They should just be used whenever TypeScript tells you to. Otherwise you just exacerbate the problem and end up with more unanticipated null values.
If you're dealing with an API with untrustworthy types or lots of null values, the solution is to:
a) Write mostly optional type definitions for that API, and/or
b) Use zod to verify the API data before you use it, to make sure it matches your expectations.
There are a few things I miss, and a few things that Flow did do better; TS is obviously not perfect. But it's a real joy to use.
As for people writing JS in 2022 without any kind of static typing: I fear for you.
That said -- I feel that any arguments along the lines of "humanity should use less energy" are doomed to failure. More technology, a larger population, and third world nations developing into first world nations, and the world's energy usage is only going to go up. It's not a question of whether that's good or bad, it's just inevitable.
The number one goal of humanity should be to find or create clean sources of energy that give us orders of magnitude more supply than there is demand.
Then we can stop arguing about which uses of energy are legitimate and which aren't.
> I quoted the First Law of Mentat at her: ‘A process cannot be understood by stopping it. Understanding must move with the flow of the process, must join it and flow with it.’
1. You get a virtual card number to use for subscriptions
2. We detect recurring charges
3. We send you a text 24h before any refills
4. If you reply 'skip' we block the next charge, if you reply 'cancel' we cancel the card entirely
Take a cart recovery: If I send you a link, I'm just blindly assuming you forgot and your only objective is to complete your purchase.
But if I ask you a question, there's an opportunity for you to tell me one of the myriad of things you actually want. You may want to complete your purchase, or schedule it for another day, or check the delivery time first, or change what you ordered -- or even just opt out of texts.
Campaign registration and 10DLC stuff is annoying but not the end of the world. Honestly, we prefer doing real-time messaging based on user events rather than mass-campaigns, so it's less of a problem when you're spreading messages out that way.
1. Do it manually
2. Automate the common cases
3. Goto 1
The other trick is to build good tools to make it stupid-simple for an agent to do the complicated part, like setting up a subscription or a scheduled order.
let x = <something>;
If this compiles, <something> is a statement: <something>;
Both, either, or neither can be true.At that point of measurement/detection we HAVE to start talking about probabilities, not just waves, right?