Quickly create a POC/MVP with GraphQL and NodeJS!
Tags: graphql, javascript, typescript, node
Published: 2021-02-24 08:38:18

Discover graphql-sequelize-generator and the magic of schema-generated GraphQL!

##Tldr;
Graphql-sequelize-generator is a library that will help you to quickly setup a Node.js POC/MVP with [Sequelize](https://github.com/sequelize/sequelize) and GraphQL.

#We want a POC, and we want it now!

When we started to work on Teamstarter we wanted to quickly test it on our user base and see if the concept worked. We needed a very simple implementation of the core of the concept, a private crowdfunding platform for organizations, a [proof of concept](https://en.wikipedia.org/wiki/Proof_of_concept) (POC).

Usually, when I do a small POC of a random idea, most of the time it ends up as a dead repository on my Github after a few weeks, like an ECS based on redux or a procedural generation library based on Postgis. Many ideas, low energy: Motivation is bitch 😩.

I learned through a painful experience that the *quicker I produce a POC, bigger is the chance I kept some motivation* to iterate on it and make something of it at the end.

But being fast is sometimes not enough. From times to times, I get super motivated after reading a tweet or an article and search for an old repository to get it back on his foot. Sadly, most of the times *my “fast and ugly" code prevent me to do so* by being *impossible to understand!* 🤬😭.

To sum up, in my experience, a useful POC is:
* 🏃🏾‍♀️ Created quickly
* 📚 Simple to iterate on
* 👀 Easy to understand and pick up after having forgotten about it

#Is GraphQL a good fit for Proof of concepts?

GraphQL is amazing for many reasons ([here](https://www.youtube.com/watch?v=zVNrqo9XGOs), [here](https://www.robinwieruch.de/why-graphql-advantages-disadvantages-alternatives) and [here](https://programmingwithmosh.com/backend/why-should-i-pick-graphql/)) and is a top choice for efficient API development nowadays.
Yet, even if it might generate *a nice and easily understandable API*, it is *most of the time painfully slow to setup* and extend compared to REST 🥵.

The setup is slow because you have to spend time describing your schema field by field, while there is a huge chance you already did it in your ORM.

The addition of new endpoint is slow too as GraphQL only describe what a resolver(link) is and not basic methods to fetch the data in your database.

After a few painful POCs we decided to work on tools that could help on the two last points, setup and extendability.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lu5kqx7morl9ywb5jppt.png)

#What is GSG?

From those problems we created [graphql-sequelize-generator](https://github.com/teamstarter/graphql-sequelize-generator) 🎉
*The setup is way faster by using the definition of the ORM (Sequelize) to generate procedurally the endpoints.* We do not generate a full schema by default, it’s up to you to decide what do you want to expose. But it only takes 3 lines of code!

The extendability is solved by using graphql-sequelize and custom made create/update/delete mutations.
*We also provide a lot of hooks and advanced options that you can discover in [the documentation](the documentation).*

#Get started in 2 minutes

We made 2 boilerplates: In [javascript](https://github.com/teamstarter/gsg-boilerplate) and [Typescript](https://github.com/teamstarter/gsg-boilerplate-typescript) to quickly create a create-react-app application backed by NodeJS and Express.

For both we tried to reduce the setup to a bare minimum:
```
$ git clone git@github.com:teamstarter/gsg-boilerplate.git; cd gsg-boilerplate
$ nvm use
$ yarn
$ yarn db-reset
$ yarn dev
```
And you’re good to go!

#What’s next? What about the MVPs?
We did not intend to develop something that could do more than a POC as deeply nested queries tends to end in a huge amount of database queries.

But surprisingly, thanks to our configuration of grapghl-dataloader your POC can become an MVP without any problem! 🥳 By hooking on Sequelize query hooks and batching the intercepted requests, the query count is kept to an acceptable level.

To make is easier to understand you will find below a small visualisation of the problem and the solution ✍️

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wxiuy6w2y168nunkxzgc.png)

We are currently using it in production with a Postgres AWS medium database, with more than 20000 active users per month and have no performances problems! 🚀
Also, due to its minimal code footprint the maintenance is really easy and simple 😊

##Thanks for reading!

We are using GSG every day and we hope that some of your next ideas will avoid the Github graveyard of the forgotten projects! 🙏

If you have any problem with the lib or the boilerplates, do not hesitate to open an issue on Github or submit a PR!

##Links

If you want to discover GraphQL :
* Zero To GraphQL In 30 Minutes https://www.youtube.com/watch?v=H8YnVk2vhzg
* A recent white paper on [how using Graphql could be faster than Rest](https://export.arxiv.org/pdf/2003.04761.pdf)
* A few slides on how GraphQL is [a good fit for a startup](https://vincentdesmares.github.io/talk-startups-and-graphql-benefits-and-drawbacks/#/0)

More about GraphQL-Sequelize-Generator
* https://teamstarter.github.io/gsg-documentation/gettingStarted
* https://github.com/teamstarter/graphql-sequelize-generator

##We're hiring
You are a junior dev able to work in Paris quickly? [Reach us!](https://www.welcometothejungle.com/fr/companies/teamstarter/jobs/developpeur-fullstack-nodejs-react-h-f_paris)