Sharing Code

In a couple of cases, we might want to share the code with others. When working on a software project, instead of working alone, there is a high chance that more than one person is working on the same thing. Sharing code becomes critical when different people are collaborating on the same codebase. For open […]

Testing and Code Coverage

Software should be tested regularly throughout the development cycle to insure correct operation. Thorough testing is typically an afterthought, but for larger projects it can be essential for ensuring changes in some parts of the code do not negatively affect other parts. Two main types of testing are strongly encouraged Regression tests – given a […]

Continuous Intergration

Continuous integration (CI) automatically builds your codes,runs tests on a variety of different platforms, and deploys all manner of builds and documentation as desired Typically this may be run when new code is proposed (e.g. through GitHub Pull Requests), or committed to the  repository. CI is useful for catching bugs before they reach your end […]

Code Style

Code that lives beyond its initial development will be read many times more than written as the project is maintained and new features are added. Establishing and following a standard style in your projects will increase readability, make maintenance easier, and can reduce onboarding time for new developers. While code style can be personal, languages […]


The importance of documentation in an organization is often determined by multiple factors including the adopted software development practices (waterfall, agile etc.) and the size of the software being documented. Regardless, the documentation is a vitrine for the software which reflects its health and mirrors the livelihood of the software ecosystem with regular updates. Ideally, […]

Build Systems

Generally, at least part of a lot of software must be compiled. Doing this in a clean (and possibly cross-platform) way is not trivial. However, having a somewhat standard build system makes uptake by new users and developers much easier and makes it more likely that the code will be maintained in the future. Therefore, […]

Best Practices in Software Design

Software quality depends on many factors such as: Functionality, usability, performance, reliability, portability, interoperability, scalability, and reusability (see full description here). There are many aspects that contribute to a good design and to the quality of your software. An important one is to follow the best practices and give thoughts to the design of your […]


Containerization is a tool that allows you to launch and work with many different environments (known as “containers”) on a single computer, each of which might be running a different operating system, a different set of installed libraries, different environment variables, etc.  Each container operates in isolation from the others; effectively, you can think of […]

Version Control

Version control keeps a complete history of your work on a given project. It facilitates collaboration – everyone can work freely on any part of the project without overriding others’ changes. You can move between past versions and roll back when needed. You can also review your project’s history through commit messages describing each added […]