If you inhabit this platform, you are probably a fan of it's design and development aspects. This is a call for Hashnode's founders, designers & engineers to share their experience building the platform from all aspects - motivation & drive, business logic, design and execution workflows, which dev stack & why - we want you to spill the beans and tell us all about it.
And we have many questions to ask you. Upvote this question if you'd like this door to open.
Cheers
Ajar
As @prank7 mentioned, our tech stack has been discussed here. But I would like to answer the question asked by @deviantony.
Before Hashnode was launched, we got sponsorship from both AWS and Azure. While AWS is the industry standard, Azure is catching up fast. We wanted to do an "Across Region" (haven't done it yet) deployment and Azure had their DCs in both US & India at that time. Also, the Azure folks were very helpful - so we decided to give them a try. The experience has been great so far.
Regarding infrastructure - We have two Node.js instances running under Azure Load Balancer. There is also Nginx which acts as reverse proxy. Further, these Node processes are managed by PM2 and are running in cluster mode. Because of clustering and multiple node processes we are able to achieve zero downtime while deploying new features.
We use MongoDB as our data store which is a 3 member replica set. As of now I have not felt the need for sharding, but we'll get there soon. We are also using Redis for caching and pub-sub mechanism.
For image hosting and CDN, we are using Cloudinary.
This was the high level overview of the infrastructure. Do let me know if you want to know anything else. 😃
@Sandeep and @fazlerocks have already provided great answers explaining the story of Hashnode. I would like to touch upon the development and execution workflows. A brief discussion of our tech stack took place here.
Hashnode is an isomorphic app built with Mongo, Express, React, Node(MERN). Isomorphism was a big deal for us because our site is content-driven and we needed top-notch SEO but at the same time we didn't want to miss the advantages of client-side rendering. Considering how important isomorphism is for us, we wanted to make it easy for other developers to get started with isomorphic apps, soon we are going to release an open-source project in this field.
In terms of our development process, we have an internal list of features that we think are helpful for developers and steadily we are introducing them to our system. User feedbacks have a great say in our development process, a lot of user feedbacks have been incorporated as features in our current site. If you have any feature request that you think will help developers get better, please send it to us asap.
We are a growing community and we want to make it super easy for developers of all level to be able to express themselves here. Our design team tries hard to communicate this particular message to developers, our why-join page is one such example.
We have a closely knit team with diverse skill and common goal, all of us are driven about helping other developers get better (including ourselves 😉 ) and we like to stay ahead of curve in adapting newer technologies. We believe in experimenting and shipping features quickly.
Thanks for asking this question Ajar. I'll first talk about the motivation behind building Hashnode. We'll write about engineering, dev stack etc in a separate answer.
Fazle and I love writing and teaching people how to code. We have written many tutorials, books and articles for SitePoint. While doing this we realised that there should be a network for developers which helps them learn new things and stay relevant in software development. Stack Overflow already does a great job at solving specific errors and issues. But where is that platform which is welcoming to beginners? Where should a developer go if they need opinions from experts or need help with a specific technology? We want to be that platform. That's why we focus more on subjective and opinion based questions rather than specific errors/issues.
Hashnode was previously known as Devmag which was launched in late Jan 2015. After the launch, we saw good response from the developers' community. Also it was very nice to see so many interesting people from around the world discussing stuff on Devmag. We didn't do any marketing or run any campaign to get sign ups - everything was organic and natural.
Back then we were just two people working on it. So, we realised that we need to form a company and build a team to scale things up. So, we registered a company (in Delaware, US) and became a legal entity. After that our focus was raising money so that we can operate without thinking about immediate monetisation. Fortunately, we raised a seed round of funding from a top VC firm (undisclosed as of now). We'll announce the funding news some time soon. :)
Once funding was done, we went ahead and searched for people who shared the same passion and vision as us. It was difficult, but soon @prank7, @mayank, @alkshendra joined us. So, we are now a 5 member team and all of us are developers. We gathered many useful feedbacks and insights from active users of Devmag. We then worked on those feedbacks, improved a lot of things and relaunched as Hashnode on Dec 17, 2015. We believe the name Hashnode connects with Developers and matches our goals and future plans.
Our goal is to help software developers stay relevant and connected. We are expanding the team slowly. But we make sure that we are doing something meaningful everyday to take the community one step further. We are still in very early stage and the platform needs many improvements. We are working on (and fixing) some important things and you are going to see many useful additions to the community very soon.
Feel free to ask any questions you may have. I'll add a new answer where we'll talk about Dev stack, execution, engineering etc.
Thanks @Ajar for the nice words. 😊
Let me talk about the design process of Hashnode here. Then @sandeep, @prank7 and @mayank can talk about the engineering side.
Designing Hashnode wasn't an easy task! After we decided to rebrand Devmag.io to Hashnode, we were pretty clear how Hashnode is going to look. Even though we were appreciated for Devmag's design, we were clear that at some point our users are going to get bored with bold and bright colors (Material oranges, blues, reds and greens).
We wanted Hashnode to look clean and fresh. After a few brainstorming sessions, we zeroed on two different colors: Accent blue (#00BCD4) and white! Developers love simple design. Our challenge was to make the design clean and modern at the same time.
We also took some inspiration from Material Design guidelines. However, we didn't follow it strictly and violated the guidelines to make the website look good on desktop browsers first!
We experimented with the blacks which are used on the text on Hashnode. They aren't #000. We are following blue grey band of Material color palette. So, the darkest color is #263238. These greys matched appropriately with our primary color and theme.
I hope this gives you some idea about how we ended up with the current Hashnode design. Feel free to ask more questions. 😊
We are a small 5 people team and are trying really hard to build a network for software developers that helps them stay relevant and connected.
I hope you are enjoying Hashnode. Do let us know how we can improve.
Cheers!
+1 I'd also like to know more about the infrastructure(how is it hosted, how many nodes...) and the deployment pipeline you guys currently have.
Sandeep Panda
co-founder, Hashnode
Anthony Lapenna
Open-source enthusiast
Thanks for the info @sandeep ! I've got more questions, so I've decided to write a new reply post ! Which one of you is in charge of infrastructure management and sysadmin? Does everyone play a role in it? Regarding MongoDB, I guess you're using version 3? What's the size of the current dataset ? How do you manage your backups: mongodump/snapshot and where do you store them? I'm also guessing that you're using CI/CD tools, if so which one? And a last one: what tools(s) are you using to deploy new versions of the app?