Showcasing Flow: My homemade chat application!
Tags: programming, learning, webdev, dotnet
Published: 2024-04-03 23:41:38

## Hello everyone!
Today's article is not going to be educational like my usual articles, instead, I wanted to take a moment to share with you a personal project I've been developing for the past few months, and I'd heavily appreciate it if you take your time to try it out and give me your feedback!


## Meet Flow
Here're some images demonstrating the UI of the application and its features!

![Flow's User Interface](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4tr8h8509o8kdujnqx5y.png)


![User search in Flow](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7ru2t3u8jq9k7jew8v3m.png)


![Flow's appearance settings page](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g95zds3ndgnfcji24bfw.png)


Started as a basic project for learning Signal R and Web Sockets, to becoming one of my most beloved personal projects of all time. Flow is a web-based, real-time instant messaging application where users can sign up, create their profile, and start adding their friends & other users to chat with them in real time, along side other features like sharing images, deleting messages, and themes. Flow is currently a Beta release, so bugs are definitely inevitable at this point, and I'm expecting you to encounter them if you decide to test it. 

However, since this article isn't teaching you something about C# or .NET, I wanted to take this opportunity to share something with you that I happened to learn from building Flow.

Flow's Link: https://rasheedflow.azurewebsites.net/
Source Code: https://github.com/rasheed-k-mozaffar/Flow

> ⚠️ **NOTE:** If you attempt to sign up and face an issue with a generic error response stating that something has gone wrong, it's due to password validation. Your password must at least contain 6 characters, a capital letter, small letter, non-alphanumeric, and numbers. EX Password: `Hello@742`.

## Project-based learning, but more!
One commonly known practice of learning how to code is building projects from scratch, these projects could be your own ideas, clones, or a project to help solve an actual problem in your life. This type of learning is the most effective, and there're many arguments that support that. However, the thing with Project-Based learning, is our attraction to new ideas, like when you're pondering and you get that new spicy, shiny, super attractive idea, there's a great likelihood you'll end up doing on of these two possibilities:

1: Abandon a project you're currently building.
2: Rush to finish it and move on. 

While it's beneficial to build many projects, it's also necessary to take your current projects, a step further. You might ask by now, what does this mean?

I'll explain it with my own projects. In 2023, I started off many projects, and I ended either abandoning them, or rushing their development so that I could kick off a new project, which unsurprisingly, would put me back in the same dilemma. In 2024, at the end of January, I set off to build Flow, and after a month or so, I got a basic working version, and also achieved the intended purpose of learning about Signal R. I was tempted to just tick it off my list, and start something new, but instead, I wanted to keep working on it, so I wrote down a bunch of features, and began developing them. Once I was done with everything, I went back and refactored some old code, optimized it a little bit. 

## So, why should you do this?
Well, most people say software development is always largely about **maintaining** and **debugging** existing systems, and extending them with new features. Doing that on a practice project will set you up for knowing how to actually maintain, and extend an application even after it's grown in complexity and size. Additionally, having to maintain a large project fosters your ability to traverse and navigate a massive codebase which is mostly going to be the case for you when you get hired to work on a team.

If you read this far, I want your opinion on the matter, and which side do you recommend? 
Is it **Building many projects?**
Or having a **Selective few with continuous development?**