HN user

mtamizi

44 karma
Posts2
Comments18
View on HN
[dead] 3 years ago

Ask questions of YC alum (S13) and ex-Visiting Partner, Edrizio de la Cruz.

He’s publishing his new book, The Underdog Founder, on September 19th where he shares his odyssey from when he sold guavas in his Dominican barrio all the way to when he sold his company to Mastercard.

Edrizio will present the book in a YC off-the-record founder story format. Then, we’ll do an AMA to answer any questions you may have. We’ll cover topics like fundraising, M&A, mental health, overcoming extreme obstacles, and more.

The advanced preview copy of the book impacted me in it’s brutal honesty about the challenges Edrizio had to overcome. It’s a version of the founder story that’s rarely told and refreshing to read.

Leave your questions in the comments for the AMA.

More about the book: edriziodelacruz.com

It's one thing to rely on phone numbers for authentication, it's yet another to store the messages. The same scenario on WhatsApp would have given the attacker access to the account but not the message history, which is presumably what they were after.

You can start the migration process and continue to use Balanced. Your existing cards, bank accounts, and seller data will be ported to Stripe, and all new cards, bank accounts, and sellers that you create on Balanced will be mirrored on Stripe.

TDD your API 12 years ago

"I have sufficient funds in my marketplace" is defined here: https://github.com/balanced/balanced-api/blob/master/feature...

  Given(/^I have sufficient funds in my marketplace$/) do
    step 'I have tokenized a card'
    @client.post("/cards/#{@card_id}/debits", {
                   amount: 500000
                 })
  end
Here's another example from the scenario above:
  Given(/^I have a tokenized debit card$/) do
    @client.post('/cards',
      {
        name: "Johannes Bach",
        number: "4342561111111118",
        expiration_month: "05",
        expiration_year: "2015"
      }
    )
    @debit_card_id = @client['cards']['id']
    @client.add_hydrate(:debit_card_id, @debit_card_id)
  end
TDD your API 12 years ago

Here's an example of how we do it:

The scenario: https://github.com/balanced/balanced-api/blob/master/feature...:

  Scenario: Push money to an existing debit card
    Given I have sufficient funds in my marketplace
    And I have a tokenized debit card
    When I POST to /cards/:debit_card_id/credits with the JSON API body:
      """
      {
        "credits": [{
          "amount": 1234
        }]
      }
      """
    Then I should get a 201 Created status code
    And the response is valid according to the "credits" schema
    And the fields on this credit match:
      """
      {
        "status": "succeeded"
      }
      """
    And the credit was successfully created
There's several things in there like "And I have a tokenized debit card" that setup the scenario to be able to do things like "/cards/:debit_card_id/credits", which refers to an actual card ID created in the test API.
TDD your API 12 years ago

It feels so good to see some of the comments here and elsewhere on our approach at Balanced. I've been trying to put this process/system in place for close to two years now. Steve was finally able to make it possible where I couldn't.

There's a lot of other companies facing the same challenge and have also come to the conclusion that there isn't a sufficient solution pre-built. Hopefully, we'll get to the point where there's a standard solution that everyone can use instead of tons of homegrown solutions.

TDD your API 12 years ago

The challenge we had with that approach was being able to reference the response of a previous request.

As a simple example:

1. Create customer

2. Add tokenized card to customer

3. Charge the card

Step 2 requires the HREF/ID of the customer. Step 3 requires the HREF/ID of the card.

There's a few differences: 1. You have to hunt down a check or track down your account number and routing number from your bank where you have your debit card in your wallet. 2. We've found that customers are more skittish to share their bank account than their debit card number. I can try to guess why, but that's at least what we see. 3. Bank account numbers can't be verified in real-time (takes 2-3 business days) where debit card numbers can. This can lead to big issues the first time a customer gets paid and a poor initial experience.

(ceo of Balanced)

Under promise. Over deliver. That's the best way to answer that. :-)

We have partnerships and direct ATM network integrations to clear in real-time for ~55% of debit cards. I didn't want to promise that until we've done enough volume to see that clearing time for ourselves instead of basing it what our partners have communicated to us. Once I have enough data/proof, I'll update the language to reflect the faster speed.

My payment processing company has tried to call the Ally Bank agent for 2 days with no avail.

Ally isn't going to help you in this case. Ally doesn't know you, and you're asking them to give you money from one of their customers.

Who is your payment processor? You can issue an ACH reversal. You would get your money back if the money is still in the recipient's bank account. It's worth a try since they may not be expecting you to reverse the transaction and will still have money in the account.

Congrats Sam! Thank you for the advice to continually focus, focus, focus even in the face of temptation to do more.