During my time working at XING I believe my single biggest contribution for the company is a side project I’ve developed called Xing scripts. This project started with a personal need for working with our development environment in a more automated way. I’m a big proponent of automating everything you can and so when I started working I realized that there were these tasks that I would do over and over again. Since I couldn’t bare doing all this manual work I started writing my own scripts.
One day I showed them to one of my fellow team members and he liked them very much. They were just a mix of quick and dirty ruby and bash scripts. Some other people wanted to use them too so I started packaging them as a ruby gem. And then this scripts began evolving. I kept adding more features and it felt good. Through word of mouth more people started hearing about them and asking for support for their own applications, so I did. With time the gem started to gain more traction inside the company and people have started sending patches to add other features and supporting many more applications. This has been very regarding for me, many people have praised me for the work I’ve put into this, since it helps them work much faster.
When a new project is started one of the first things they do, or ask me, is for support with the xing scripts, this fact helps me feel like I’ve accomplished something very good and that my work on this project is important to many people and for the company as a whole. This feeling is the same when I do Open Source, when someone uses one of my projects or when I collaborate on another project. The lessons I’ve learned while working on this project have been many, from a technical point of view as well as personally. For my “regular” work I’m basically doing web stuff with Rails, but this has been an opportunity to work with Ruby on something non web. I had some experience doing command line applications but none of this scale. With the growth of the number of features and applications that need to be supported I’ve had to solve some very interesting problems. I’ve learned a lot about OOP and software design, testing CLIs and how they interact with other services, the importance of semantic versioning, creating a ChangeLog, writing proper documentation, giving support to the users, “selling” your project, etc. All these things that are not part of my daily work and that without this project I couldn’t have learned.
I guess the lesson here is that you can create stuff to solve your own problems and maybe other people’s too. Other people might be struggling with the same problems and have their own solutions, so you can unite and work together. Open source doesn’t have to be code on github, it can be internal projects inside your company, whether they’re tools, libraries, silly web sites, etc. just share them.