Disappointed by Laravel Spark.

Nassuf Mmadi
8 min readFeb 4, 2023

--

I develop in PHP language since more than 15 years.
I used Symfony framework during 5 years.
Then switched to Laravel, in 2021.
It has been a game changer.
I love coding with it.
But Spark is crap.
For real.

If I could meet Laravel Spark support.

From Symfony to Laravel

I worked with Symfony on various projects, from MVPs to large companies’s apps. Even if I was getting less and less fun coding, it was ok for all my needs. A well structured framework, with good bundles and a large french community.

Late 2018, I met Harissa-Man (Arpanext).

I started a freelance mission as a Symfony developer.
Harissa-Man (HM) was one of the senior developers.

We were working for a big french company on a web app with pretty simple features.
It was basically forms and lists to manage water pipelines.
No complexity, no scalability issues, but a big head tech architect as manager, Toto.

Toto “BigHead” the Architect.

Toto is a very tall guy.
He looks sporty, never takes the elevator, runs in stairs up to 4th floor every morning.
He likes showing how skillful he is and saying things like “truth is in the code !” or “It’s coldy today ! You are not used to that in your country !! It will wake you up !!” or… “In Africa people dont have medicine” 🤓

Toto created an overly complex architecture for this project.
Microservices, Kubernetes, with lot of “generic-re-usable-multi-projects” bricks, authentication gateway and way more genius things.
We ended up with 6 different Symfony apps, all connected, with complex workflows, resulting in a slow application full of bugs.

We daily complained about the project’s complexity.
HM daily preach me Laravel, like a cult member.

“Look at those 12 lines of Symfony code !
Do you know how to do it with Laravel ?!
In one line !! Just like this !
Look how simple and beautiful this is !! How “eleganté” !”

He often said while preparing harissa sandwiches.

That looked interesting, but he looked too emotionally engaged with Laravel, too biased to convince me investing time on it.

Even if the Symfony project was a disaster, it was fun to work together.
A small team of cool dudes.

At some point, Toto introduced a new generic-re-usable-multi-projects-idea.
I rage quitted.

The worst Symfony project ever.

My next freelance mission was a Symfony lead developer position for a company that got screwed.
Deeply screwed.

A company that runs two IT jobboards since the 2000s.
Its owner bought it two years before.

He define himself as a modest experienced entrepreneur.
Short, well dressed, sometimes with a colored silk scarf around the neck.
He likes analyzing people from hair to feet, with an “El Professor” looking.
He actually looks like a french bald version of El Professor.
A version that looks as smart, but can be fooled more easily.
Let’s call him EA, Eude-Archibald.
EA is nice guy tho.

The websites were built in old PHP legacy code. It was time to re-develop everything with modern evolutive technologies.

A chance to technically manage an interesting project while finally work close to a successful-entrepreneur-who-buys-companies 😎

I actually met EA in January 2018, but did not succeeded to convince him.
At this time, he rather choose to work with an agency, owned by Jean-Jeannot-De-La-Baguette.

I totally got it. It is more reassuring to work with an agency that have multiple developers than to rely on a single freelancer.
Furthermore, Jean-Jeannot-De-La-Baguette has a reassuring name and comes from the same social environment than Eude-Archilald. Bourgeoisie.

EA found a secure and efficient way to move forward.
JJDLB commited to deliver the project within 3 months.

EA and JJDLB shook hands 🤝🏻
They laughed like Jeff Bezos.

The problem is… More than a year later, the project was still stuck.

JJDLB and his team, the baguette guys, did not delivered.

EA called me back.
It was exactly at the time I was rage-quitting Toto’s company. Perfect timing.

Before joining them, I audited the project that the baguette guys started.
It was very bad:

  • Symfony framework helps maintaining a well structured code if you follow the best practices. None where followed.
  • Custom AbstractController that manages authentication. Misunderstandable asynchronous queries everywhere. Custom everything !
  • A single page took 3 to 5 seconds to load.
  • All was made by junior developers without any experienced developer to help them.

I talked about it with Harissa-Man and another friend to get their advices. They both advice me to either run away, or burn the code and start from scratch.

💰 JJDLB had already charged +100k€ for this creative mess.

I had to announce the diagnosis.

“I have a very bad news for you Eude-Archibald. You’ve been screwed. It’s deep.”
I thought.

“There is a lot to re-organize and re-develop before launching the website, I’m in”
I said.

Fast-forward.

After a lot of struggle, COVID lockdowns, and 15+ delayed deadlines, we managed to launch the Symfony website.

I learned that using a well structured framework doesn’t prevent from building a messy project.
That paying more to go faster is not always the right choice.

We fired Jean-Jeannot-De-La-Baguette and the baguette guys.
We hired an internal team.
Eude-Archibald was happy, unscrewed.

I met another Laravel cult member

One of the guy we hired has more than 20 years of experiences in development. A real passionate.
The kind of guy who can debate hours about technical choices and coding philosophy. Even longer about Laravel.

He likes to think and learn. He likes to learn about new technologies. Use those technologies to think. Think about what he learned, and learn to think more.

Let’s call him Think-Learn-Man.
You always learn something interesting when you talk to Think-Learn-Man!

TLM rapidly started criticizing Symfony.

“Look at those 13 lines of Symfony code !
Do you know how to do it with Laravel ?!
In a half line !! Just like this !
Look how simple and beautiful this is !! How “eleganté” !”

TLM said, while thinking.

What he said seemed familiar to me. Reminded me… my dude Harissa-Man !

Same passion.
Same love about Laravel.
Same hate about “Symfony’s complexity”.

Knowing two guys, that doesn’t know each other, with such enthusiasm for Laravel finally arouse my curiosity.

I promised them to try Laravel with an objective mind when I would have the opportunity to.

I joined.

The opportunity came months later.
For some reasons, I rage-quitted Eude-Archibald’s company.
For other reasons I failed my Amazon e-commerce business.
So I decided to start a SaaS. From scratch. With Laravel.

My gurus, Harissa-Man and Think-Learn-Man, were happy and very helpful.
HM helped me a lot setting up the project. TLM gaves me advices about Laravel’s ecosystem.

My learning curve was smooth. The documentation was perfect.

Going from Doctrine entities that includes all properties, to almost empty models and a lot of manual migrations was the only thing that bothered me.

But the “eloquent” ORM was just… “eleganté” ! 😅

It was so nice to build complex queries very easily.
To write intuitive, readable, beautiful code !
To do more with less code.

I realized that it has been a long time since I did not get real fun coding. That I code better and more longer when I enjoy it !

I sometime needed to build complex pages in short delays. Laravel made it so easy compared to what it would have been with Symfony !

Laravel kept his promises. A framework “ with expressive, elegant syntax. […] freeing you to create without sweating the small things

Then I dig into its ecosystem.

Becoming a guru among gurus.

I wanted to start fast and avoid spending too much time on docker configuration: Sail was there 😮

I needed to build a smooth frontend, as clean and fast as possible, without a complex JS framework: Discovered AlpineJS and Livewire 😍

I needed a better way to manage my server and deployments: Started using, and paying Forge 🚀

I got so efficient and happy using Laravel that I started preaching it… to my wife… who is not even a developer 😅

Last black friday I paid for Laracast as I will need the optimization courses.

Months later I needed an admin panel where I can track user activity. I went for Nova. I paid once again.

That said, not everything was magic.

My SaaS has a lot of queues so I used Laravel Horizon to track them. But as I define those queues in Laravel Forge, I can’t track them on Horizon. Besides, Forge interface is not meant to track queues, just to define them and manage supervisord to keep your consumers up.

First little disappointment.

The biggest one came two weeks ago.

After more than a year working on this SaaS, trying features, changing directions and finally going in the right direction, it was finally time to set up a subscription system !

As a convinced member of the cult I checked Laravel Spark.
I paid for it. Convinced that it will help me build everything within a few hours.
I even paid the “Unlimited Projects” plan, at $199.

Spark made me feel screwed, like Eude-Archibald.

You can’t hide non-eligible plans

My SaaS plans are quite simple.
Users are Amazon sellers. They spend money on Amazon ads and get revenue. The tool helps them manage and improve their ads.

To be fair and aligned with them, the prices are based on revenue -ads costs.

If last 30 days revenues minus ads costs is below 1000€, the only eligible plan should be “Start”. “Grow” plan for up to 7500€ and Business up to 20k.

To make it simple for the users I just wanted to only display the plan they are eligible for. Well… that is not possible.

At least to disable the “Subscribe” button on non-eligible plans ? Not possible !

Publish and edit myself the templates so I can disable the buttons / apply my own templates ? Nop ! 🤬

It seem to me to be a very basic use case so I spend hours searching for the solution. I asked on Twitter, and eventually contacted the support.
There is no solution.

I am not happy with the cult Dries…

I am okay with paying for tools that saves you time.
Not for things that looses you time.

I just lost 200€ on Spark + 2 days of work for something that I will have to rebuild from scratch. That makes me feel like Eude-Archibald. Even if it is not 100k, it still dont feels good to feel screwed.

Eleganté is not everything.

Beautiful eleganté stuff is nice.
In “Laravel Origins”, I learned that Taylor Otwell (creator of Laravel) even take care of the beauty of the comments.

Laravel is a great open source framework to kick start a project. I think they should not forget to take care of letting things open when it comes to using their paying solutions like Spark.

Spark team, please don’t act like a Jean-Jeannot-De-La-Baguette.
Let paying users “free to create without sweating the small things”.

--

--

Nassuf Mmadi

Lead Software Engineer & ex Amazon Seller. Sharing experiences related to e-commerce, Amazon SP-API and building a SaaS. https://twitter.com/Nassuf_