It’s been a year and a month since I left the Oracle Linux team to join TeamDrive Systems, and I wanted to quickly recap and summarize some of the highlights and notable achievements in my new role.
Here at TeamDrive, I’m primarily responsible for the backend technology, the servers that support the TeamDrive Client applications. It consists of two LAMP-based server instances, which customers can either deploy at their own premises, or in a public cloud like Amazon EC2 (or in a mixed environment). The grunt work is handled by custom Apache modules, and we rely on MySQL to manage the required meta data and a custom application framework to provide the required infrastructure and functionality.
Even though my official title is “Product Manager”, I quickly realized that I needed to get my hands dirty in order to make progress on the things that I deemed absolutely necessary. In particular, I’ve been focusing a lot on improving the product packaging, installation and documentation, as well as setting up release engineering processes and tools (e.g. setting up dedicated Jira projects for the server components, creating components and releases).
Initially, the Server documentation consisted of some Word documents that were partially outdated or incomplete and made installing the server components quite challenging. I think I spent nearly two weeks until I managed to get my first test server environment up and running, mostly due to missing steps or inaccurate descriptions in the installation instructions. I started taking notes and writing small HOWTOs on how to overcome the hurdles I ran into, but I also wanted to make the documentation itself more accessible and easier to update and maintain.
So I did some research on how to set up an automated documentation build system that builds HTML and PDF documents automatically and which allowed me to put the documentation sources under revision control. I opted for using Sphinx and reStructuredText as the foundation. With the help of another developer, we then converted the existing documentation into the new format, re-organized it into multiple documents, e.g. an Installation Guide, an Administration Guide and a Reference Guide. Next, we started overhauling, restructuring and updating them, so the documentation actually reflected the current state of the product and had a better flow. Over the course of the year, I constantly added more content and new chapters.
In parallel, I also reworked the entire build and release process of our server software. When I joined, the software was provided in the form of tar archives, and it was up to the customer to extract the files and copy them into the appropriate location. Some of the binaries were built on an older Linux system, which required customers to install compatibility libraries or creating symbolic links to other system libraries in order to satisfy the dynamic linker. I got rid of that by moving the build process to the same platform that we actually deployed on. I also added scripts and support files to create RPM packages that we provide via public yum repositories, so customers can now quickly install and keep our software up to date using the operating system’s native tools.
In addition to making the build process more automated and repeatable, I consolidated and restructured parts of the code base, e.g. by migrating related code from external CVS and SVN repositories into a single Mercurial repository. Now all components of a product version, including the respective documentation, can be managed in a single branch. This makes it much easier to work on both a stable release and the current development version in parallel.
I also spent a lot of time doing QA of the installation and configuration as well as enhancing the product usability. I tested our web based Administration Consoles and reported my findings via Jira, working with the developers on how to improve the user experience and get rid of gotchas. In total, we made three major releases of the server software over the course of the year, each of these had several minor releases to publish bug fixes and minor improvements. The turnaround time for publishing new release builds has been drastically improved.
In order to being able to test the server software locally, I started using Linux containers (LXC) for quickly setting up a small virtual server farm consisting of dedicated MySQL instances and TeamDrive Server containers. I also familiarized myself with Docker and Ansible and plan to make more use of these technologies for upcoming projects.
All in all I had a lot of fun working on “low level stuff” again last year, and I must say I enjoyed going back to my roots here. I actually wrote some C code, too — I changed parts of our server code from using a public domain reference implementation of the MD5 algorithm (from L. Peter Deutsch) to using the optimized one from the OpenSSL library instead. This resulted in a 70% performance boost for computing MD5 checksums, especially on larger objects.
I also supported several customer projects, e.g. by assisting and advising them during the project planning and implementation phases, actually doing or helping with the installation and configuration of servers, and handling support questions and bug reports after the go-live project phases.
When I joined, it usually took new customers several days (if not weeks) and lots of hand holding from our side before they had a functional server setup. Now, our customers can perform the installation and setup of our server infrastructure all by themselves, and get up and running within hours. I’m quite happy and proud of these improvements.
Apart from improving my existing and learning a lot of new technical skills, I also expanded my theoretical knowledge on product management: I attended two seminars about Product Management (hosted by the excellent folks from proProduktmanagement) and passed both certification tests. I can now boast about being a certified strategic and technical product manager based on the Open Product Management Workflow™.
After laying out the technical groundwork, I hope to focus on the more high-level and strategic aspects of the product this year. Actually working on the code base helped me a lot to gain valuable insight into the inner workings of our products, which will be useful going forward.
It has been an interesting ride so far!