Project is under heavy load
- From: Tristan Van Berkom <tristan vanberkom codethink co uk>
- To: BuildStream <buildstream-list gnome org>
- Subject: Project is under heavy load
- Date: Fri, 20 Apr 2018 19:16:13 +0900
Hi all,
I have been tied up a lot these days, the project is under a lot of
load, and as a result the pressure on myself and individual
contributors alike is mounting, which is not helping, so lets try to
alleviate some of this pressure.
My goal with this email is to improve the efficiency of this project,
in terms of safely landing new features.
Debunking the magic bullet fallacy
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
A lot of people around here want to land a lot of new *features*, and I
want to be very clear that we are not talking about patches, we are
talking about features, most of which have a great impact on core
architecture and design.
Because of a number of circumstances, not least of which is an increase
an overall load, review cycles are becoming less efficient.
This has led some people to believe that:
a.) We dont have enough people with the power to review patches.
I agree with this, which is why I have delegated a lot of feature
branch reviews to Jürg, while only discussing things between us
at a high level in some (not all) circumstances.
I want to find another lieutenant who can review feature
additions, but for this to happen people need to understand the
codebase as a whole, care about how the codebase evolves as a
whole, and beyond this they have to earn my trust such that I am
assured we are united in a common vision.
Unfortunately this takes time, and I find myself lacking in
suitable candidates, but believe me that I am hungry to find one.
b.) A core developer should be able to land patches without review,
and fix later if a problem arises.
In my experience I have often worked this way, and we currently
do have a short list of committers in BuildStream. It works well
as long as said core developers are personally responsible and
accountable for the patches they are sure about.
For a contributor to retain committer status, I have to know that
the "fix it later" part has an immediate turnaround and takes
precedence over all other ongoing work, otherwise this is a
violation of trust, and it means that "being sure about the
commit" is in fact a lie.
Also, this cannot mean unreviewed landing of feature additions,
which necessarily impact API stable interfaces or make
significant changes to core architecture and design, which may
not need detailed code review, but needs discussion an approval.
We are not suffering from an influx of easily reviewable bug
fixes which are not landing, which happens sometimes in larger
and more mature software projects: We are suffering from an
influx of many large and complicated feature branches that all
want to land now, so it should be noted that having more
committers in this scenario does not fix the current problem.
c.) The bar is too high for landing patches.
This is just patently false. The last two weeks I've spent fixing
regressions, and untangling structural weakness in our codebase
is proof enough to me that the bar needs to be raised, not
lowered.
In summary here, there is no magic bullet which will allow your
features to land faster, even if we had more core maintainers, large
core features could not safely land any faster, and relaxing the review
process here can only result in a complete disaster.
What can we do to make the project more efficient ?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Asides from the fact that you just cannot land a lot of features at the
same time safely, there are a few things we can do to greatly improve
the efficiency in how we land features.
On my part, I'm going to try to do a better job in roadmapping, I had
this working much better last year but in recent times I've been too
tied up with specific goals to paint a better picture here.
In order for Jürg and I to handle review of your features more
efficiently, I'm going to lay out a list of things you can do to make
all of our lives easier.
Round tripping is more expensive than actual review
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The life of a maintainer is wrought with micro interruptions and
context switches, as such it is important to state all of the facts
at once and avoid round tripping.
Unless it is clearly in context in a mailing list thread or issue
report thread: Never assume we know what you are talking about, state
all of the facts and provide links.
When writing an email to the list, or a comment on an issue report,
provide _all_ of the details at once. Dont attempt to entice me into
a long discourse, instead strive to provide a clearly thought out
problem statement with the goal of having it solvable in a single
reply.
You may find that half of the time, going through the exercise of
clearly stating a problem in an email results in your having
understood the problem, and sending the email becomes unnecessary
(while the activity of writing it was valuable).
Only submit patches that you believe will land
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
We've been very relaxed in the last year about how we do reviews,
patch review has been a place for mentoring and discussion about
how to land the patch.
Remove this from our workflow by only submitting patches for review
that you are personally near certain will land.
This is impossible for a first time submitter, and we understand
this. Don't be shy to submit your first patch, and if you have team
mates who regularly submit patches to BuildStream, get them to review
it first before submitting it for review in our tracking system.
I guarantee that the patches you think are ready to land, will
most often not be ready. But I also guarantee that this will
*greatly* reduce the round tripping which is bogging us down and
clogging up the review pipeline.
Try to leave the code in a better state than how you found it
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In many cases, there are multiple ways to implement a feature,
usually these consist of a quick and dirty way, and a way which makes
sense.
Choose the way which makes sense, even though it almost certainly
costs a bit more legwork in the short term.
The quick and dirty fix is almost always going to be percieved as a
threat to the longevity of the project at large, and it is our
position as maintainers to defend the project against such threats.
Dont make us feel threatened by your patches, instead try to share
in the responsibility of making the whole codebase better all the
time.
Try your best to suggest a solution, or more than one solution
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
When you have a feature to implement and you see the current
architecture does not "fit" with what you intend to achieve,
this means that we need to reconsider the architectural design
to afford for the feature you want to bring to our users.
In these cases, try to be creative and think of a solution which
best fits the architectural design of the current codebase, and
propose that solution.
In other words, try to make it easier for the core maintainers to do
their jobs: it's much easier for us to look at a proposed solution
and identify problems with that, and possibly point out problems with
the proposal for you to work on, than to do legwork and come up with
a plan ourselves to solve the problem you want to have solved.
Solve the mentoring problem outside of the maintainership
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Last year I spent a great deal of time coaching younger developers in
the ways of writing maintainable software.
I actually love teaching, so I am particularly at risk of falling
prey to an invitation to mentor you on how to write your patch.
In the present climate however, it is unreasonable for me to be
spending my time in such activities - when I happen to find time, I
will indulge myself.
If you have juniors on your team, then have your senior developers
mentor them as they develop features for BuildStream, help them write
proposals to the mailing list before hand to ensure that we are first
in agreement on landing the feature and that the architectural
changes involved are going to be accepted.
Mentor them to be good at submitting changes to FOSS projects.
Respect the style in place and be consistent
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
It is of great importance that the codebase remain consistent such
that it can be read and understood as a whole to any newcomers.
Linters are not sufficient to address this.
Not all of our coding practices are the best, if you do not agree
with a practice, propose that we change it, and if we agree to change
it, we will expect a patch which changes the practice *unilaterally*
across the codebase.
It is not acceptable to leave the codebase in a state where things
are done in one way here, and in another way there.
This should really go without saying: Don't let your personal taste
in coding style get in the way of having a consistent code base, this
can only be a constant source of friction in the review process which
will waste time and leave everyone dissatisfied.
Summary
~~~~~~~
In closing, there is a lot we can do to improve the flow of reviews for
the many features that all want to land - increasing the volume and
pressuring for more reviews more often from the maintainership is not
going to magically make the feature branches safe to land sooner.
Let's be more professional and productive, share the responsibility
more evenly, and while we wont have any magic bullet, we will certainly
improve the situation.
And by all means, lets reserve some measure of time for horsing around,
poking fun at one another, and laughing a bit from time to time.
Keep it light hearted and fun, and we'll all have a great time while
accomplishing great things.
Cheers,
-Tristan
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]