@MichelDiz
The thread is titlted: What is Dgraph lacking. I don’t think going over issues is getting my point across so I’m going to speak more high level
What is missing? What will get developers to want to use DGraph?
Money Everything boils down to money. If DGraph makes financial sense, then developers and companies will use it.
Money can come in the form of Cash or Time. I’m not going to weigh in on Cash topics like pricing strategies etc, except having a free/super cheat tier is essential to get new users to try things. Your UX team should be discovering if your free tier is adequate or not.
Let’s talk Time, because that’s my biggest concern and what all my thoughts on DGraph stem from. We have multiple ways time factors in:
- Time to develop a new product - 5/10 here, all the benefits of a graph schema and auto-generated API are lost to the unpolished parts and poor documentation
- Time to implement new features on an existing product - 5/10 or 9/10 - If you need to move data, this is painful. Otherwise it’s a pretty smooth experience.
- Time to pipe data in and out - 9/10 I occasionally get at timeout when getting < 100 records.
- Time to architect/design schema and data flows - 7/10 Graph schema is amazing. I love it. Without examples of good patterns, I’ve had to come up with my own and re-work them a few times. Adding
- Time to validate and maintain data integrity - 2/10. No validation, orphaned predicates, poor tooling support, extensive time spent on discuss.dgraph.io needed because docs are inadequate. I estimate 50% of my time in Dgraph has been lost to this.
- Time to update/maintain the schema and data - 5/10. For the most part this is okay. It’s bad when you want to rename something that has data already, or worse if you want to move it. I have to build my own tooling. If I start with graphql, I have to learn DQL too.
- Time to learn new syntax and patterns - 6/10. The core stuff is in the docs. There rest is discuss and trial and error. Heaven forbid I had a junior dev learning dgraph without my help.
- Time to implement scaling - 9/10. Theoretically this is why I pay DGraph big money when I need it. Haven’t got their yet though.
- Time to coordinate working on a product with my team - 2/10. I started with graphql, and yet 4/5 of my answers have been to go learn DQL, create yet another repo and connect it for basic schema tasks and updates, and then spend extensive time reviewing any change ever because getting anything wrong in DGraph the first time is very very expensive.
- Time to train less senior team members - 4/10. To use Graphql in Production requires strong understanding of DQL and graphql, and the nuances of how to use both together. The docs are decent for building a TODO or basic movie app. But nothing real and more serious is covered.
There are others, but I think those cover the important parts. The more the DGraph team can increase how much time they will save other developers doing those tasks the more DGraph will attract users and make money. Your competitors require significant less time invested to determine quality of the offering. As is, any new user has to invest significant time to get up to speed.
I architect 6-12 new products/system a year on average. I’ve been developing for 15 years. Because of that I can see the significant value that a product like DGraph has, but when it comes down to it, DGraph costs me too much, not in $$, but in time.
It is hard even for the GraphQL community to try to convince people to a new paradigm and leave the old behind. The old does his job, but it is not the same.
In your whole life, you were introduced to the SQL world(from some course degree or dev courses) and just now you are learning a new thing.
I think the user can expend 3 or 9 months mastering Dgraph. I did the basics in 2 weeks and mastered them in about 2 months.
See? you still are in the SQL paradigm. The way Dgraph works is like a puzzle. Some tasks that you do in SQL are too expensive for us to put natively to users. Deleting something in cascade is dangerous, so ideally, the user should create their own query for it. Thus avoiding unwanted results.
That’s 4 of your quotes from your responses in the last day only in this thread. Do you notice the pattern? You shift responsibility and investment to your users or others. If you want money, you need to add value. DGraph has significant value for certain use cases. It does not for many others.
You are the experts, no one will get DGraph like you do, wo do it for me or give me tooling that will guide me to do it right.
Lets take your 3rd comment, and say that a user spends 3 months mastering DGraph. With an average developer salary of 120k/year (upper mid-level/low-senior) that means you are costing the company 30-90k in salary, per employee that will be working with DGraph.
So using that math, let’s talk through some common scenarios:
- Is an investor going to allow a company to use DGraph, and burn through an extra 3-9 months of runway? No
- Is the CTO of the next big unicorn going to stall releasing his MVP an extra 3 months so he can learn dgraph when he’s making almost nothing? No.
- Is a 100 million/year company going to tell their investors there will be a 6 month delay so they can train and adopt DGraph? Probably not.
You want users, you need to deliver value, and currently the value is there, but the missing polish is too costly.
Here is a high level, database agnostic checklist:
- Insert One: Pass
- Insert Many: Pass
- Update One: Pass
- Update Many: Fail in GQL, pass in DQL
- Update Many from other data: Fail in GQL, pass in DQL
- Update Many Conditionally: Fail everywhere. (See bugs below)
- Update Many using data across relationships: Fail everywhere (See bugs below)
- Delete One: Pass
- Delete Many: Fail in GQL, pass in DQL
- Read One: Pass
- Read Many: Pass
- Read Many Nested Filters: Fail in GQL, pass in DQL (or so I’ve read)
- Read Many Nested Loops: Fail everywhere (See bugs below)
- Update One to one relationships: Pass
- Update one to Many relationships: Pass
- Update many to may relationships: Fail (See bugs below)
- Create new schema: Pass
- Update Schema: Fail, data integrity at risk (Acceptable short term fix could be fixed with tooling, but DB constraints should be added)
- Read Schema: Pass
- Delete Schema: Fail, data integrity at risk (Acceptable short term fix could be fixed with tooling, but DB constraints should be added)
Summary
Hopefully this helps me get my point across. Please note that I have spend hours writing these thoughts. I really really do want to see DGraph succeed because it would be amazing for me. Here’s to Dgraph getting some of these core operations in soon so we can both make more money together!
PS - Here is one instance of the bug I mentioned: Bug with multi-level (nested bocks) in Upsert Block
And another similar one: Fixing Inverse Relationships