← Blog

Episode 10

Testing LowFlow like a real customer

For a long time, I tested LowFlow as someone who knew the system.

I knew where to click. I knew which data should appear. I knew where to look when something was missing.

I could open the server, check the logs, inspect a file, change a configuration, restart a service.

In short, I tested like the person who had built LowFlow.

But a customer will never do that.

And that's where a different kind of test becomes necessary.

The technical test is no longer enough

A button can work. A server route can respond correctly. Stripe can confirm a payment. A license can be generated. The download can exist.

All of that can be true separately.

But the customer doesn't test the pieces. They test the complete journey.

They arrive on the site. They choose. They create their account. They confirm their email. They pay. They come back to LowFlow. They download. They install. They open the application. They activate their machine.

And if a single one of those steps is poorly connected to the next, their experience stops right there.

It took a real person

For this test, I no longer wanted to simulate the customer myself.

I could always unconsciously work around a problem because I knew the system.

It took someone who would use the journey exactly as it is presented.

A friend helped me with that.

A second machine. Another computer. A real browser. A real email. A real card.

And above all, someone who should never need to understand the architecture behind LowFlow.

If I had to explain a technical step for them to continue, the test had already revealed a problem.

Testing with real payments, without paying 200 dollars every time

I also wanted to test Stripe in real conditions. Not only in simulation.

But charging $199.99 just to verify a journey would have been absurd.

So I created three temporary validation offers that reproduce LowFlow's three commercial paths:

1A — full payment: $1.00
1B — 12-month plan: $0.75
1C — 24-month plan: $0.50

The real offers stay unchanged. The only goal is to run a real small payment through the real system.

Same site. Same Stripe. Same account. Same server. Same activation logic.

The only thing different is the amount.

And that's where the real problems appear

The first lesson was brutally simple.

A successful payment does not mean a successful journey.

Stripe could accept the card. The transaction could appear in the dashboard.

But if the server wasn't listening for the right event, LowFlow didn't know which customer to attribute the payment to.

Stripe had the money. The server had received something. But the customer had no additional rights.

Technically, several systems had worked. Commercially, nothing had worked.

Then the customer paid… and fell into a void

Another problem.

The payment went through. But after the payment, Stripe simply showed its own confirmation.

No clear return to LowFlow. No download. No next step.

The customer had just paid and had to guess what to do next.

It was exactly the opposite of what I had wanted to build.

The original mockup had already defined the journey: payment confirmed, then download LowFlow, then install and open the application, then finish the activation.

The real site had to follow that sequence.

The Stripe return was connected to a dedicated LowFlow page. The payment is no longer an end. It becomes a transition to what comes next.

The returning customer also revealed a gap

Another test showed something even more obvious.

What happens if someone already has an account?

They shouldn't have to recreate their account. They shouldn't have to remember their LF-ID by heart. They should enter their email and password, find their account, choose their product, and continue.

The login page already existed. The pricing page already existed. But the two weren't sufficiently connected.

Once again, all the pieces existed. The journey itself was incomplete.

The trial got the same treatment

At one point, I had a doubt about the free trial.

Something didn't seem logical.

I checked. And the doubt was justified.

Validating the account didn't unlock the download.

The button existed. The page existed. The trial system existed. But the customer wouldn't actually have been able to download the application.

That's exactly why testing the complete journey is different. It reveals the gaps between two features.

The real test starts after the installation

After the site and Stripe comes the part I had spent a lot of time building: the activation.

A brand-new machine opens LowFlow. It doesn't have any license yet.

The customer enters their email and their LowFlow ID. The machine is linked to the account. And the license arrives on its own.

The customer never had to copy a license key.

That was exactly the goal.

But activation isn't the last check

One important test remained.

A permanent license must never become a permission to bypass the protections.

The final test is deliberately simple:

The machine has a real license. It is activated. Then, from the server, I revoke its access.

If LowFlow keeps working normally, the architecture is wrong. If the application respects the server's verdict, then the separation between Activation and Access truly works.

That difference is what mattered from the beginning.

Paid doesn't mean immune. Activated doesn't mean uncontrollable.

The tester must never become the developer

One rule came out of that day very clearly.

I never want to ask a customer to open technical tools, copy error messages, or explain to me what the server responds.

If something doesn't work, it's on me to look at the logs, the code, and the server.

The customer must stay the customer. Their only job is to use LowFlow normally.

And that's precisely what makes their test so valuable.

Stripe also had to be tested as a complete system

Going through the Stripe dashboard, I discovered something similar.

Receiving a payment is only a small part of the configuration.

There are receipts. Notifications. Expired cards. Failed payments. Additional confirmations. The customer portal. Subscriptions. Refunds. Redirections. Error alerts. Anti-fraud rules.

A single forgotten setting can break part of the experience.

Once again: the details stay behind the screen, but someone has to check them.

In the end, testing a product isn't checking that it opens

Before, I could say: LowFlow starts. Trades come in. Calculations work. Data stays local. Updates work.

All of that still matters. But it's no longer enough.

Now, testing LowFlow also means:

Can someone discover it? Create their account? Come back later? Pay? Receive what they just bought? Install the application? Activate their machine? Manage their subscription? Get proper help if something fails?

And do my protections keep working once everything else works?

It's another level of testing.

Because LowFlow is no longer just a program. It's now a complete journey.

What's next?

From here, the next improvements become much easier to identify.

Adding several machines to one account. Allowing the purchase of a second slot. Framing computer migrations. Further improving the account pages. Continuing the translations. Adding the next markets and platforms.

But this time, the commercial foundation exists.

Someone can arrive. Buy. Install. Activate. And start using LowFlow.

Without needing to know everything it took to make that possible.

And that's probably the best sign that LowFlow is truly becoming a product.

← Back to blog