November 12, 2023

How GitHub changed open source

Recently, I saw someone on LinkedIn sharing their first commit. It was from 2009. I was curious about mine, so I visited myfirstcommit.com. Although I joined GitHub in 2011, my first commit was from 2014. I was surprised that it was that late.

That reminded me of my early days. Around the end of the 90s, I was using Linux. I jumped from Slackware to Mandrake, tinkering with some projects. I was amazed by the amount of information available on the internet. Although programming was not my number one passion, it was a way to make things happen. I have been coding since I was a kid. It started with copying code from magazines into my uncle's Commodore 64.

I wasn't so collaborative back then. I was just a consumer of open source. I was surprised to find out I could contribute. However, the groups I found could have been more welcoming. It felt like a closed club. My excitement faded fast. For many, even the purpose of the contribution was to have control over the project, and as an outsider, you don't have a say in it when you don't pay for something. That was the mentality.

It changed a lot when GitHub came along. It became easy to contribute and find projects to contribute to. The community also became more welcoming. Main contributors became more pragmatic rather than protective.

I was on a Discord channel recently, helping people with their questions. Recently, it struck me that developers are spending so much effort on things that are not the primary concern of their projects. I noticed that even the experienced developers need help setting up a new project. Dotnet has a lot of boilerplate code. It gives you much freedom, but it takes work to make the right choices. I wanted to build something that would make the challenging parts easy.

I plan to create an opinionated dotnet framework that provides things most projects need. So that beginners could focus on the fun part: making their ideas come to life. I am planning to add the following features:

  • Authentication
  • Role-based authorization
  • Feature flags
  • User management
  • Audit logging
  • Error logging
  • Health checks
  • Metrics
  • API Documentation
  • API versioning
  • Caching
  • Background jobs
  • Scheduling
  • Message Queues
  • File storage
  • Email sending
  • Push notifications
  • Search
  • Database migrations
  • Database seeding
  • Transactions
  • Concurrency handling
  • Enforcing TDD
  • Deployment
  • Monitoring

It will be open-source, and I'll share my progress on this blog.