I interned at Evolphin Software during summer holidays of 2015, for which I was selected via my college. Evolphin software is B2B company providing digital and media asset management solutions to other firms .
My work involved automation of build process of plugin which comes into play when a developer want to package the plugin with latest patches and is ready to deploy it to a continuous integration server , we used Jenkins at Evolphin.
I used Gradle for doing this project and practically implemented or tried to implement various aspects of software development which I have only read about in books prior to this internship .
Some of the key things I learnt :
1.Choose your tools wisely : There are many tools available to accomplish a certain task but still some are more suited than others for a particular task or are easier to learn quickly , and selecting Gradle to do this task proved to be a wise decision .I am thankful to my mentor ,Omprakash, who trusted me to select the tools myself .
2.Make it readable : Have empathy for other who might have to modify or read your code .
3.Make it testable : Once I learned Gradle and understood the requirements completely, I was able to write my build logic pretty quickly and I put it all in a single file consisting of many different tasks , but then whenever I have to modify the build script and if it broke my code , tracing the task which caused the issue was really difficult, and it was then I decided to break my build logic into multiple files , each containing no more that 2-3 related tasks , added comments which provided a nice stacktrace like output which made it immediately clear which task has caused the build to fail.
4.Make it extendable : Once I implemented the core functionality of my build logic and was feeling happy , my mentor asked me to add some extra features such as checksum , properties file etc , and it was then I have to figure out how to add these features without having to do many modification in my current build logic , and while doing so , I used topological sorting of dependency graph formed by tasks in build logic , and ultimately created a build logic which can be extended pretty easily.
5.Avoid coupling as far as possible : My initial build logic contained tasks having many cross references and a modification in one task required modification in all tasks dependent on it and it was then I decided to improve on the ultimate design of the entire build logic in which a task referred to or is referred by at most 2 tasks which resulted in less coupled build logic.
6.Understanding different phases in Gradle : It’s a trap and requires attention to detail. Gradle performs a build logic in three phases : initialization ,configuration , execution and understanding how this works is very important if you are coming from Ant / Maven background .
7. Continuous Integration :In the last part of my project , I had to deploy the build logic on Jenkins CI server used at Evolphin and gave me an opportunity to learn about practices used in software development .
8.Get and give help :Well , although it is non technical aspect but it is key to building a high quality software / product which you as well as others can easily understand . Many a times , having someone else review your code can help you solve an issue you’re stuck on from hours .Raymond’s proposition “given enough eyeballs, all bugs are shallow” is absolutely true.
Overall , it was a great learning experience working with people who are really awesome at what they do . Evolphin is cool place to work and learn where all are expected to be their own managers and take ownership of their work . People here trust you that given a problem , you’ll be able to figure out a solution. Thanks to all people at Evolphin for a wonderful time we had together .