Do This Before Start Your GitHub Project

Artem Maksymov
6 min readJul 17, 2023

My name is Artem, I’m 20 years, I have the couple of years in DevOps engineering blah blah. It’s boring. You already know or not interested.

So, suddenly, It’s appeared that I’m still studying at university on the software engineer bachelor degree. That means, I need to come up with a brand-new cool software project that will tell professors I am really worth something to deserve the bachelor. Something more complex than windows forms program.

I have decided to implement a monitoring system. Like Datadog or Grafana but with my features. As a programming language, I’m going to use Python, Fast API as a Web Framework and Svelte for the front-end. This information is just for the context, but the article’s topic is a bit different.

What I really want to tell you is what do I usually do before actually starting work on a project, for instance, as I told you above. In my opinion, it’s a big mistake to create your repo and immediately start to code. At first, you need some pre-configurations to be more effective while developing your project.

It’s also supposed that you use GitHub, but anyway you can find a fine alternative.

You can find the example of the project (and still repo with my diploma) here. IT IS NOT READY YET! (In case if you think that I am bad at programming).

Before we start, I would gently ask you support me on my Patreon, so I can make more content and give special thanks to VIP Jay Dohe for supporting me on Patreon!

Code editor

Code editor is the place you will spend most of your time (after web browser) while working on a project. Seems like you require finding an editor that will fully match with you as a developer, isn’t it?

The answer is yes, but honestly, it’s unreal. You will find pros and cons in every editor, so allow me to explain my approach while choosing an editor.

The editor must provide you a good skeleton with a vast number of extensions, so you can modify it and make it ideal for yourself.

My personal choice is Visual Studio Code and VIM (or NeoVIM).

They both lightweight, community provides you enormous number of plugins for everyone.

I usually code at VS Code because I don’t feel myself validated for VIM, but in the future I hope I will get some skills to handle this dragon.

Someone like JetBrains solutions, but I really don’t like java desktop applications because they are slow and consume an enormous amount of memory.

My code editor with all extensions looks like this now:

Workflow management

Issues

The best way to deal with big projects — decompose them into small parts and complete one by one. A good idea would be to record all your tasks and thoughts in one place, so you always know what you need to do exactly at the moment of time.

For this, we have ticket systems like JIRA. But since Jira costs too much, and I’m a hobo, I use GitHub issues as a place that will store all my tasks I need to do to complete the projects. Here you can see how I decompose my project and store all my ideas and tasks in GitHub issues.

My github issues

Milestones

Long story short, milestones are simply a set of issues that must be done due exact time. They are good at setting up sprints. You just split your issues into blocks with specific due dates, so you always know what you have to do at the current point of time.

Milestone

GitHub projects

Oh, I’m still not able to describe it correctly. Treat “GitHub Projects” as the visualization and more elegant management of your issues you have done earlier.

Unit testing

Unit testing (and any kind of test) is a mighty tool for development. Someone thinks that development and testing are two separate domains, but it’s actually not.

Unit testing guarantees that your code works and provides you the ability to rapidly check whether your code is safe and follows quality standards.

Spent some time on writing tests, so you won’t need to waste enormous number of hours for seeking the bug that could be easily found in case of unit testing.

Every programming language provides its own way for testing. If you don’t like built-in methods, you can always use community libraries and frameworks for testing.

Linters

Linters are completely unavoidable when we want to reach code quality and readability. It won’t help you with your architecture, with finding bugs, but at least will show you violations of best practices.

I use a ruff as a python linter and markdownlint for linting markdown. There are many linters for every language. Find your own.

Protecting main branch

Everybody knows that direct push to main is evil, but everybody proceeds to do it. Let’s forget about pushing directly to main by protecting the branch from direct pushes, even from repository owners.

Remember, your main branch is the gold copy of your software: it’s always tested, always linted, always the best.

Adding your SSH key

Tired of Code — Commit — Push — Enter login and password cycle? Create your own SSH keys and add public key to GitHub to be able to push commits with no need to authenticate yourself!

I won’t explain what is SSH keys because the topic deserves its article if not a book. Simply google it. My task is to give you a correct direction.

CI/CD (GitHub Actions)

Last, but not least, CI/CD pipelines will help you automate most of the topics I have described above.

By CI/CD I mean any automation system like GitHub Actions, Jenkins or Travis CI. Long story short, an automation system allows you to define pipelines that are simply a sequence of commands you want to execute on your code in case of a specific event. The event could be a pull request to master or merging with exact branch, etc.

In my case, I gathered all unit tests, linters and moved them to my GitHub actions. You can check pipeline configuration here. So, every time I make a pull request, a set of specific checks is being run. If something fails — GitHub doesn’t allow me to merge pull request. It guarantees you that all changes that are going to appear in the main branch will be tested and linted and, as a result, higher quality because your main branch will always contain only tested and linted code.

There are much more routine jobs that could be done using automation systems as GitHub actions or Jenkins, you should try to do that!

Congratulations!

Today, we have found out what tools and principles would be good to involve before starting your project, using my diploma repository as an example.

Thanks for reading!

I would be grateful if you support me on PayPal!

--

--

Artem Maksymov

Do IT-stuff and other trash. #Linux #DevOps #Software #Development #Clouds #Hacking. Patreon: https://www.patreon.com/artem_maksymov