Look for Todo Lists

Intent: Discover places and things that may be good starting points for contributing to a FLOSS project.

Motivation

You are willing to contribute to some previously selected FLOSS project but have no idea of what to do or where to start. You used some of the patterns and they helped you to get familiar with the software and some related artifacts. Now it’s time to start contributing. However, you are still somewhat unfamiliar with the way things are done. For instance, if you choose a bug to fix or a improvement to make, it may be difficult to determine what needs to be changed in the code base.

Problem

How can you make a contribution if you are not familiar with the way things are done?

Forces

The first steps as a contributor can be hard for many reasons:

Yet, you make feel motivated to keep ahead because:

Solution

Look for TODO lists in the FLOSS project. Many projects have TODO lists, i.e., lists of things that should be done eventually. These are usually low priority tasks, or tasks that no one has taken the time to think about seriously. TODO lists come in two flavors:

Explicit TODO lists are usually plain text, in the form of itemized lists of tasks. Sometimes they are organized hierarchically, with items and subitems.

Most source code editors highlight occurrences of at least one of the markers, and some integrated development environments also create a list of such occurrences. You can also use the command-line utility grep to look for these markers in an arbitrary number of files.

The meaning for each specific marker is not well-defined. The following definitions were provided by Martin Pool:

There are useful distinctions between different tags. ‘FIXME’ is for things which are definitely broken, but where you want to not worry about it for the moment. ‘TODO’ is for useful features, optimizations or refactorings that might be worth doing in the future. XXX is for things that require more thought and that are arguably broken. Of course, you can make up your own categories, but I like these ones and they seem kind of standard.

Martin also provided some examples:

/* TODO: How about auto-correcting small spelling errors? */

/* FIXME: This won’t work if the file is missing. */

/* XXX: This method needs refactoring: should switch by core type. */

Source code documentation systems usually define special markers for annotating tasks in the source code. For example, Doxygen creates a cross-referenced list with all occurrences of \todo or @todo inside source code comments. If the project uses a specific source code documentation system, check the system’s documentation for a list of supported markers.

Trade-Offs

Pros:

Cons:

Rationale

Because TODO lists usually contain low priority tasks not assigned to any particular developer, chances are good that no one is working on the task, so you do not need to rush.

Known Uses

Many projects uses either explicit TODO lists, or special source comments, or both. JUnit contains a file named to-do.txt with a itemized, hierarchical, list of tasks, but no TODO markers inside source code comments. On the other hand, Node.js contains several TODO, FIXME, and XXX comments, but no TODO file.

CakePhP is an open source web application framework written in PHP. It uses a tool for tracking issues that provides a list of tasks to be performed. This list is generated from source code annotations. The TODO’s found in the source code are related to “methods that should be constructors, tests that should have been implemented, methods that could be refactored or even implemented”.

The Code Style Guidelines for Android Contributors recommends the use of TODO comments for “code that is temporary, a short-term solution, or good-enough but not perfect”. When contributing to Financisto, an open source personal finance manager for Android platform, one of the authors used TODO comments to find code that needed enhancements.

If you are not familiar with the FLOSS project, you should try the patterns . Once you have identified some tasks from TODO lists, you should consider Easy Tasks First. It may be a good idea to Review Recent Activity to make sure that your contribution is still relevant or that some other contributor did not perform it already.

What Next

After finding a suitable task for contributing with, you should consider taking a look at some of the . Be sure that you have the Right Version for the Task, and Review Your Changes before committing them.