Q: Tell me about your Neo4j project.
Mark Joslin: We actually have kind of the perfect use case for Neo4j. We’re building a card-based social network, so it’s one card at a time into your feed. It started out as just question cards, for example, it might ask: "Do you like cats or dogs?" You would then hold down on cats and see how everyone else responded. Neo4j was great for handling all of those relationships.
But now we’re expanding out into general cards, so it’s going to be into text cards, image cards, link cards, etc. We’re trying to spice it up because if people just look at questions all the time they get kind of bored.
Q: Why did you guys choose Neo4j? What made it stand out?
Mark: It was actually one of the first early technical decisions that we were 100 percent sure of. Because with something like this, we’re looking to do machine learning down the road.
We’re looking to get pretty advanced AI tactics, and if you compare options–from a database perspective–you have relational databases, but graph databases excel when it comes to recommending things, learning about your users and being able to identify when Person X answered 70 percent similar to Person Y. Pattern matching like that is huge, and it does a ton for us. So just the fact that Neo4j is the premier graph database right now, it was just the obvious candidate, so we chose it.
Q: What have been some of your most interesting or most surprising results?
Mark: I’d say the nicest thing that benefits us every day that is always pleasantly surprising is just relationships being first-class citizens. It’s huge. I’m not having to make a new table every time I have a question about how users are related.
Another thing: We were about to add in a feature for Users You Might Know. All these people are connected or on the platform, but they still are connecting with people they actually know in person. It’s so easy with Neo4j to match those patterns, because it’s just like: "Okay, you’re following this person, now let’s just add one more edge to see who they’re following, sort it by how many users that you’re following that are actually seeing that person."
When I hand over this concept to a developer, they have no problem understanding it. If it was a relational database, it would be more like, "Okay, let me conceptually get this out, and we count how many people, and we’ll really make this a super complex JOIN."
Finally, I don’t know if it stands out as a surprise–because it’s something I expected–but Neo4j is so powerful as a pattern match. At the same time, you can apply all of the filters and criteria that you can’t see already, so you get the best of both worlds. That’s nice.
Q: If you could start over with Neo4j, taking all of your current knowledge of everything you’ve done, what would you have done differently?
Mark: I probably would have started out building our app again. It would make my life easier.
I manage five developers at any given time, so once I started seeing the pattern of Cypher queries maybe I wouldn’t need a simple utility or tool just to accomplish these common patterns I keep seeing in Cypher queries. I think getting significant Cypher experience helps with that.
What else? It’s hard to really mess up your data model in Neo4j, so I have no regrets there. Our data model is still pretty good. Also, I would have started using Neo4j a lot earlier. But overall, no regrets.
Q: Anything else you want to add or say?
Mark: Well, if someone is reading this, they should definitely look me up and talk about Neon with me or come to the NYC Meetup, since I’ll be starting to host those–the more the merrier if you’re in New York, definitely.