Get personalized advice by specifying your request details so that the system can match you with the right mentor
Help others succeed by providing the areas you are experienced in and ready to chat with others about
Get connected via a fully-featured in-app chat with image support and read receipts so that you can have a detailed conversation
Get paired with a new person each time you create a request. You can also find group conversations in the lobby.
A community focused on real professionals willing to help
With all the damage COVID has had on the world and careers, we were trying to solve a few key problems/patterns we saw:
- Many people posting on LinkedIn messages of support and "reach out to me if you need help" but not having a good platform to really reach the people beyond their network that actually need support
- People that need help having to go through the friction of finding individuals and cold-messaging them only to get ignored countless times
- Forum or Quora-based help being very general given the public and async nature of the conversation
- Professionals being willing to help on an ongoing basis without a good platform to do so unless they get randomly pinged on LinkedIn or have a strong social media presence. However they also want to limit their time commitment to something that works with their schedule.
We wanted to solve this by building a platform that essentially automatically matches people to someone in the community that can answer their question and help. It is essentially a two sided marketplace with mentors and mentees. Mentors can turn on and off matching when they have spare time to help, and specify the types of topics or job functions they think they can support. The system will throttle requests to ensure they aren't flooded, as well as give them controls to accept only the requests they think are relevant. Mentees simply put in a request for what they want help with and the system handles finding them the right match. The actual help is all conducted via a chat session. We hope this will democratize mentorship, giving everyone an equal opportunity, as well as a chance to form bonds and lasting connections.
What it does
Firstly, the user must create an account and build a basic profile. We allow you to provide a profile photo, pick from a large database of companies and career tracks, as well as share a freeform text summary of yourself. This forms the core of your identity on the platform.
Once in the app, there are three main flows you can go down:
Turn on your mentoring settings. If you are an experienced professional and willing to help others, it is as simple as enabling "mentoring" in the app and providing the details on who you would like to mentor. This allows you to specify which career tracks and topics you are ready to chat about. Once it is on, the system will automatically match you with inbound requests for help. You won't get a second request until you've interacted with the first one, so you don't have to worry about your chats getting flooded. If you're feeling swamped and don't have the time, simply flip the switch off on the main screen and you won't be matched with anyone. The goal is to make it as easy as possible to help the community.
Ask for help by creating a connection request. You can specify the topic and career track you are looking to talk about, provide a short blurb describing your request and even specify a specific company you want to be connected to. The system will then automatically start trying to find you a match based on your criteria and the mentors that are currently available. When a mentor receives your request, they have the option to accept it or pass on it if they don't think they are well suited to help based on the information you provided. If a mentor doesn't respond fast enough the system will automatically move the request onto other mentors until we find you someone. The goal here is to make getting help only a few simple steps for the user, and let the technology handle the heavy lifting.
There is also a lobby section where you can have general public conversations with others. Chats exist for each of the career tracks available in the app allowing you to connect quickly for casual or group conversations with others in your field.
We believe the best way to provide support is through a direct conversation rather than anonymous asynchronous messages or emails. Chat-based conversation also encourages more lightweight communication that is more personal and creates less pressure to be absolutely polished which may discourage some from getting help. For that reason, we built the app around chats. Once a match is created, everything occurs inside of a chat thread. We built the chat infrastructure from scratch to cater to our needs, and it supports text and image messages, read receipts and push notifications.
With a versatile platform that makes helping others and getting help a few clicks away, we hope to lower the barrier for everyone in the professional community to come together and help each other succeed.
How we built it
Given a large network is important to the success of this project, we needed this app to be available on both Android and iOS with minimal effort. We chose to build the app purely in Dart/Flutter so that we can deploy the same codebase on both and iterate quickly.
To also further streamline the amount of languages we needed to write the system in, as well as to use this as an opportunity to learn, we made the decision to also try to build the server in Dart as well. Server side Dart support is still in very early stages but we came across the Aqueduct framework which we used as the foundation of our system.
To support the chat infrastructure, we integrated heavily with Firebase. Firebase Storage is used to store the images and profile photos, while Firestore is used to facilitate realtime updates to the application to allow for a fast chat experience without needing to poll the server. Firebase Cloud Messaging is then used to power our push notifications.
The server is split into three main components, a frontend, a backend and a matcher. The components all communicate with each other using Google PubSub. They all also share a common Postgres database.
Finally, the whole system is deployed using Kubernetes on Google Cloud allowing for easy scalability of each tier separately. We utilized free versions of monitoring systems such as Instrumental and Sentry to enable cloud logging and realtime monitoring to round out our deployment operations.
Challenges we ran into
We ran into countless technical challenges on both the client and server side. Having no knowledge of Dart or Flutter prior to embarking on this project, that was a challenge on its own. Server side support for Dart being very nascent meant that many libraries were not available for some of the frameworks we needed, and we decided to build them out ourselves. We debated several times reverting back to a language like Python that is more commonly used here, but stuck with Dart as the learning experience made it worth it and we saw promising performance from it.
Aside from the technical challenges we faced, the product experience itself was a challenge to shape. The big questions we kept facing were "how do we reduce the number of steps involved?" and "how do we make this work for everyone?". Different careers can each have very specific needs so we struggled to distill things down to a set of key steps and actions that we felt would benefit the most people. We started off with the tech industry (which was also a challenge to get a readily available data set to use for both companies and career tracks) and then expanded from there.
Accomplishments that we're proud of
- Fully released application on both Android and iOS
- Server backend that is able to handle high QPS (based on our load tests) without noticeable slowdown in response time
- Deployment system that is able to scale the system easily as our community hopefully grows
- Visually pleasing, especially considering this was built by only engineers, user experience that is easy to use
- Fully-functional chat system built from scratch
What we learned
We went into this project having never written a line of Dart before. That was a fun challenge to overcome and we learned a lot in doing so. It had been a while since we had taken a project from scratch to release on both Android and iOS, and those processes have changed a lot over the years. Navigating those release processes was a learning process all on its own.
While building the project we also spent a lot of time talking to friends and reading through LinkedIn to understand the challenges and pain points of mentorship right now. That was an eye-opening experience especially as we talked to people in other fields we were less familiar with such as education, medicine and finance. While we haven't fully catered to all their needs in this initial launch, we learned a lot that will hopefully help us shape the future of the service.
What's next for Nadeeni - Find Professional Success
Our ability to help is directly proportional to the size of our network. We need a strong and healthy network of professionals onboarded in the app, and that will be one of our first priorities. Based on the types of conversations we see being struck up we hope to also add a few other features that can enable new ways of providing help:
Voice notes: Since we are fully mobile based and some of the conversations can be lengthy in nature, providing a quick way to send a voice note might encourage busy members to provide more detailed responses without the fatigue of typing on a small keyboard.
File sending: One big topic we see in other networks such as LinkedIn is resume critique. By allowing file sending we can start to enable some of that within the app as well and potentially build an experience more tailored towards resumes specifically.
There is a big social element to providing help as well, with people wanting to spread the word to others about help they received or have given. We would like to better integrate that into our app experience to encourage our community members to help grow the community organically.