I am coming from a long break and good to see community becoming bigger and
people caring about ease of contribution.

Thanks Gian for starting this thread and I have had similar perceptions in
the past.

1. Absolutely Agree on automating most style comments possible and try to
get as close to 100% technically possible. As reviewers, whenever we
provide a stylistic review comment, we should see if that could be
automated.
2. Yes. There should be "must haves". here are my quick thoughts...
 - look for meaningful PR description containing what, why at least and how
the change is tested. I usually give more weight to someone who is actually
using that code and deploying it in their environment to test it.
 - user visible configuration changes and public APIs are documented
 - functional correctness
 - performant enough depending upon the context where it is used, not all
code demands to be lock-less or doing the cool tricks :)
 - good enough memory usage/retention. it should be something that doesn't
bring Druid process down but also this shouldn't give reviewer free pass on
criticizing every allocation or not doing things in most optimal way
leading to philosophical/research discussions. code simplicity and not
using deepest java tricks is OK in most cases.
 - if the change is visible to end user then more care should be taken to
ensure backward compatibility, rolling upgrades etc. Exceptions are made
here but we should be aware of those and PR should be tagged so that we put
right blurb in the release notes.
 - there are multiple designs/ways to solve one problem which are often
equally good, so ask for changes if changed design/way is concretely better
in that context. Also, for bigger changes, I have seen suggestions on doing
design reviews upfront before the code but my experience is that only high
level designs are apparent before coding it 70-80%. so code would
invariably have design components to it.
 - I am glad I don't see too many comments on unit testing these days but
sometimes reviewers try to push for "good" coverage and covering all the
edge cases in unit tests. I personally favor writing enough unit tests that
gives me confidence that my code works, more tests are nice but not have
same level of ROI.

That said, it is very difficult to have 100% concrete rules covering
everything, we can only strive to minimize subjectivity. We must not have
comments based on our preference and keep our comments similar in scope as
other reviewers based upon agreed upon must haves.
reviewer should also introspect , "what is the cost/impact of not having
the comment addressed and how difficult will it be to make that change
later when/if it becomes a necessity?". If the cost/impact of not getting
the comment addressed is low and no clear major benefit, reviewer should
self-resolve the conflict in favor of contributor.

3. Agree. Also, it would be somewhat taken care of if scope of review
comments was limited to must haves as much possible.

4. Yes.
That said, I think this is also because of gamed github/git credit system.
A person gets somewhat formal credits for writing code whereas
understanding someone else's code and providing meaning review
comments(that belong to the "must haves" category) is significant amount of
work. There is also work done by person providing good design inputs that
matter. But, those don't get any formal credits.
This wouldn't apply to committers, but most open source projects only look
at code contribution as metric of contribution so any new person has to
find reasons to write code. There are many non-committer Druid users who
spend time understanding Druid source code to fix their own problems. They
could be great reviewers but have no motivation to do so.

On Big vs Small PR: Due to small PR getting more scrutiny, chain of small
PRs would take way too much work/time on author's part to get merged so
He/She would prefer all in one PR. Also, sometimes it is ok..
- introducing a new extension
- a major change that is hard to break into small PRs but is totally opt-in
- its just way simpler to test/benchmark the thing and get things done in
that unit
if we do make a rule about large PRs then it must be followed by all PRs so
that it doesn't become biased for specific contributions. And,
unfortunately such a rule would hurt people making most meaningful
contributions to the project because, most often, large changes are doing
something very useful for the project.

Fears of code becoming unmaintainable and losing pace of innovation are
somewhat real but heavily subjective which make code review comments very
very inconsistent among reviewers, really lead to the "hoop-jumping". This
specially hurts PRs that have attention by 1 or few reviewers because PR
would just linger on till contributor submits to the preferences of
reviewer. Focussing on "must haves" is important to minimize the diversity
in review comments based on reviewer. I am not really afraid of tech debt
and can sacrifice some of it in favor of other things specially because of
subjectivity associated. If Druid has wide adoption, there are lots of
people who know the codebase, actively contribute to it, use the project
and hence care that it continues to work/perform ... innovation and
features would continue to happen(as they have been in many years in the
past) and tech debt would be taken care of, at least in parts of code that
get actively modified due to the need of regular change.

Reply via email to