DEV Community

Cover image for My Journey to Open-Source Development
John P. Rouillard
John P. Rouillard

Posted on

My Journey to Open-Source Development

Welcome to the first article on the ongoing development of the Roundup Issue Tracker. Before we get started, a little about me.

I have a B.S. in Physics which included some advanced computer science courses. But, my career ended up in system administration. I have taught and published a few peer-reviewed papers at conferences over the years. Trying to reduce toil and improve operations, lead to my interest in ticketing systems. Tools from LEAN and Six Sigma have proven valuable in analyzing ticketing and real-time logging data.

Issues Need Tracking

In 2002, I ran a lab that installed a system monitoring solution on Sun computers. We needed to track requests that came to the lab. I evaluated ticketing systems across a few dimensions. The Roundup Issue Tracker scored the highest.

Five minutes after downloading the software, I had a classic tracker running in demo mode. After entering a few tickets and adding a few keywords (tags), my co-worker and I decided it could work. It was flexible and looked like we could extend it to support our future growth. Little did I know that this was the start of a 20+ year relationship.

Roundup Basics

Roundup tracker has two components: the Roundup core and the tracker instance. The core is written in Python. The tracker instance supports one of two HTML templating engines: (Zope Page Templates or Jinja2). It is programmed in Python. The tracker instance controls the look/feel/functionality of the tracker. It:

  • defines the database schema/data model,
  • provides the web interface (with customizable HTML and CSS),
  • executes Python code to validate entered data and react to a change (e.g. by emailing notification messages),
  • can hook into the core code to control how the core operates.

One instance of the Roundup core can run many trackers. Each tracker can have a very different presentation and function.

Getting My Feet Wet

When I started, Roundup was still very new. I started developing my customized tracker to learn Python and experiment with Roundup. My tracker implemented several ideas from Request Tracker (RT). I developed the key components, replies/comments, dependencies, and grouping (parent/child), in less than 40 hours of effort over a few weeks. Roundup's implementation and documentation made building these significant features easy.

The other advantage was that Richard Jones, the developer, was in Australia. We set up a "follow the sun" development cycle. I emailed him a problem when I went to bed. By the time I got up the next morning, he would have a fix ready for me to use when I got home after work. This fast feedback is something I try to maintain in the Roundup community.

I never deployed my custom tracker, but the classic tracker worked well for the lab. As a result, the sales engineering group requested (and got) a tracker. After I left the company in 2005, they upgraded the Roundup core and converted the database to MySQL (from a dbm key/value store).

Back in a More Active Role

My next IT job used Request Tracker. I followed Roundup development but didn't contribute much. In 2012, there was some interest at work in setting up a customer-facing portal based on Roundup. I started development on my tracker again and re-joined the Roundup community. Over the next few years, I developed code to add:

  • a transaction source property for data changes. Makes changes from the web interface but prevents the same change if it originated from (unsigned) email.
  • the filter command to the roundup-admin command line interface makes data searching easier.
  • nofollow relationships to links which makes Roundup less useful to spammers.
  • CSRF protection using synchronizer tokens makes Roundup more secure.

Releasing Roundup

By 2018, Richard had stepped back, the last release was January 2016. I took over as a lead developer and release engineer. I released version 1.6.0 in July of 2018. This merged several existing patches, cleaning up Roundup's issue tracker.

Since 2018, there were two major changes added by other developers:

  • support for both Python 2 and Python 3 (which required a 2.0.0 release)
  • addition of a REST interface beside the XML-RPC interface

On July 13th, 2022, I made my fifth annual release.

Since Roundup deployments are on-prem, I established a yearly release cadence. Other issue trackers have more frequent releases. But, many of those releases address UI or workflow issues. In Roundup these are implemented in the (customized) tracker instance. So the user is not dependent on the fixes pushed from upstream. Each release includes upgrading instructions. These instructions can include changes for the tracker instance to bring it up to date.

The slower release cadence has an advantage for the users. It reduces the need to update tracker instances to once a year rather than every few months. However, the yearly cadence results in less public visibility for Roundup.

I plan more articles on developing and maintaining an open-source application. Some future topics I am considering include (in no particular order):

  • The Customisability Trap
  • Kitchen Sink Development
  • Accessibility
  • Responsive Design
  • The Problem with Selects
  • What?? No Javascript!
  • Docker All the Things
  • Colors and Themes
  • The Bus Factor
  • Evaluating Tracking Software

The Roundup 20th anniversary article on lwn.net includes more information on Roundup.

I hope you enjoyed this article. Thanks for reading.

Top comments (0)