“Simplicity is the ultimate sophistication” - Leonardo da Vinci
A human being is a complex organism because it is made up of a million individual systems. When you are ill, the doctor tries to find the root of the problem by often trying simple tests first. The same thing happens with software as well. As software often becomes complex, its debugging usually requires simple steps. That is one of the best things which I was able to learn from my journey up till now and I believe that over time, I will be further able to master my capability to simplify things. Simplification was one of the aspects which I was able to grasp but there were a few challenges along the way that helped me grasp other things as well.
When you are working on code that has a really great impact on the software, you always have to be extra careful. I started my work on the core component of the software as most of my other work was highly dependent upon it. Making changes to that component and then merging that change to the main software was a challenging task. Changes or commits made used to go through Wikipedia CI/CD (Continuous Integration and Continuous Deployment) software called Zuul. As Wikipedia is an open source platform, dozens of people commit their code every day. Hence, there used to be a possibility that continuous integration would fail a few times so figuring out why it failed used to be the first challenge. It becomes even more challenging when other developers are working on the same library so when it used to fail, you need to figure out whether it’s your fault or someone else.
A complex platform is often dependent on multiple packages and from time to time, these packages get updated as well. There is also a possibility that the updated package would stop providing particular functionality and if your platform is using that functionality, you might get an error. It usually happens when you update the package in the platform as their support is no longer available. This was the second challenge that I faced during the debugging sessions and figuring out the right package version for the platform was a complicated task. However, after multiple tries and countless hours, I was able to figure out the package version and the code was able to pass all the tests in the Zuul.
Achievements and Learning
After facing multiple challenges in my journey up till now, I was able to learn a lot of things. Simplicity was one of the aspects which I was able to grasp and came to know about new software like Gerrit and Zuul. Even though I have worked with similar platforms and software, using it felt a bit different. Pairing programming, thinking out of the box, and debugging were some of the other aspects which I was able to learn. After working for multiple weeks and learning new things at the same time, I was able to get my first major commit merged for the MediaWiki Core!