Skip to main content

Two quarters in the DNF

· 8 min read
Matej Focko
a.k.a. engineer switching up for a bit

After being a part of a Python-oriented team developing a CI for automating release syncing and shifting the testing process to left (to the original project rather than at the distribution-level) for five and a half years I felt like I need a bit of a change.

And that’s why I’ve seeked the opportunity to switch up for some time with a colleague that felt in a similar way working on a different project within the Red Hat.

And that’s how I ended up for 2 quarters in the DNF Team working on dnf5. I’ll try to sum up my experience over the 2 quarters.

Agile processes

As of the time of me switching from the Packit Team to the DNF Team, our organization has been in the process of hiring a dedicated Scrum Master.

Note

In the Packit Team we are used to rotating the Kanban Lead role (among the other regular / maintainer roles) around the team.

It was my first time being a part of a team that has a dedicated agile practitioner. I was not used to this experience.

On one hand it feels nice to have someone having your back and handling most of the annoying stuff, e.g., Jira shenanigans, or calendar and such, and, in general, being in control of the whole agile process and ceremonies tied to it.

note

Sadly I have to admit that as the Kanban Lead role grew in the Packit Team, I have managed to forgotten smaller things here and there, e.g., least recently updated issue (when the stand up took longer than usual), or posting the summary of merge requests waiting for review.

Even if your whole job revolves around the agile practice, Jira is a miraculous creation that will pull the rug from under your feet one way or another…

In Packit we are using a scrumban1, so getting back to scrum kind of made me relive some of the annoyances of scrum by itself, e.g., the time constraint to 2 weeks.

Length of sprint

Some time after I joined the DNF Team we have tried out the 3-week long sprint instead of 2-week long.

It had quite a good reception, especially because of the lower frequency of planning meetings.

AFAIK the 3-week sprints have been kept.

note

In general it is more common to shorten the “iterations” rather than prolong them. Overall I think this impacts your capability of planning, because you’re planning for a longer period of time and that, by definition, is less accurate.

Carrying tickets over to the next sprint is quite common and also pulling in tickets during the sprint too…

Meetings

One thing that caught me by surprise was the low amount of meetings, partially contributed by the asynchronous stand ups2.

Also the DNF team is spread across multiple time zones, so the meetings are set in the afternoon for the European folk.

Story points

As always, estimation of size of tasks is quite relative thing. There are teams that measure the story points by days, weeks, etc.

In the Packit Team we’re using the Fibonacci scale with a few rules that give quite basic idea of the sizing.

The few rules for an idea
  • 1 points = less than 20 minutes
  • 2 points = recurrent task, manual, similar to 1 point one
  • 3 and 5 points = normal tasks
  • 8 points = one week and potentially over one week
  • 13 points = two weeks (for our former scrum and 2-week sprints = whole sprint)

After a quick glance through the DNF’s backlog I’ve noticed mostly higher points being assigned, which is totally OK, since it’s relative. However it also clashed a bit with my perception of sizing after 5 years in Packit 😁

Another difference to Packit was the fact that the story points were assigned by the colleagues that were triaging the new issues/tickets at the time. Because there was no agreement across the team on the difficulty assessment, the story points vary (IMO at least).

tip

Understandably, both approaches have its merits:

  • when you assign points during triage

    • it saves time from the meetings, and also
    • you have nicely “pregroomed” backlog with story points almost3 everywhere; this also gives you a general idea of work in backlog (apart from the simple metric of how many tasks are waiting)
  • assigning points together — unfortunately consumes time, but instigates a discussion over the topic

Technical perspective

Developing for Linux on macOS can be challenging at times. One would expect that developing service revolving around Linux packaging and testing would be even worse, but it’s not that problematic in reality, since everything is nicely containerized.

Developing a package manager on the other hand… is also not an issue, unless you need to run the tests.

Development environment

Setting everything up was a bit challenging. In the end I have settled for a Fedora Rawhide container where I mounted both sources and tests4.

Running the test suite based on behave was however not possible… Main cause of failure was coming from the fact there were some tests for testing architecture fields in specfiles which, of course, breaks the assumptions on the Macs. To be fair, the different architecture (Apple Silicon) is to blame, not the OS itself.

note

In my opinion, BDD is something that could probably simplify Packit Service tests, but at the same time… the time/cost of converting the test suite would be disgraceful.

One of the other ARM5 quirks I hit, was not being able to utilize parallel builds. When I tried compiling with the classic make -j$(nproc) on Linux, it worked just fine. However from within the container on the Mac, it hit some race conditions that caused the build to fail.

First RHEL bug

For the first time in 5 years, I have been assigned a task that affected RHEL directly…

Finding the issue and fixing it was probably the easiest part. Getting the fix all the way down to RHEL is where things complicate.

DNF Team handles the downstream patching in such way that they keep the RHEL branches on the upstream. To these branch you backport (most commonly simple git cherry pick) the fixes and then you can easily generate patches that are added to the RHEL specfile.

The whole process is simple and straightforward. Except… resolving the ticket consists of:

  • fix in the source repo and test coverage (2 MRs, because tests are on its own)
  • backporting both fix and tests (+2 MRs)
  • then actually adjusting the specfile on downstream (+2 MRs; depends on how many releases is the fix propagated to)

Each of those MRs should be reviewed. Even if it has already been reviewed, cause, don’t forget, 2 of those are simple cherry picks and the specfiles, in the end, consist again of the already reviewed patches.

And even then it took me additional two merge requests, because neither I, nor my reviewer, have realized that I am missing part of the tests in the backport. Those have been added during the triage a long time before I got the ticket assigned.

info

Understandably, this “bureaucratic” work has no easy solution. The current approach is menial and annoying, but you’re guaranteed audit through the whole process. And also it nicely prevents conflicts on the downstream when backporting fixes.

Summary

Overall it was a very pleasant experience trying to onboard a different project with different workflows and processes. Maybe I’m biased prior to my previous experience, but the way we set up agile in Packit feels a lot more intuitive.

I’m also content that I was able to contribute to the package manager that I use on a daily basis as a user.

Footnotes

  1. Definitely an unusual mix of both scrum and kanban, we keep the retrospectives once in 2 weeks, we got back to estimating the tasks, though the generic “flow” resembles more of a Kanban: there’s a list of next TODOs rather than a set of tasks to be done over a fixed time period and that list gets refilled once a week (or twice if needed).

    Also it’s not unusual to pull the tasks through the in progress to done even before they get even triaged/estimated/planned 😉

  2. because of the time zones, stand ups are held in a separate Slack channel; and yes, I have forgotten to post the updates many a time…

  3. of course, here and there you can find an exception without any points assigned

  4. DNF has separate repositories for source code of dnf5 and its tests

  5. Apple Silicon is of ARM architecture, specifically aarch64