-
hello @exercism/rust! I want to do this to improve contributor experience. By articulating our merging strategy we set expectations. That will benefit any contributor. It will also unify our team communication (e.g. one maintainer reviewing). I also think it is necessary for so we can iterate more quickly to V3. As mentioned in weekly calls, the Rust track is lagging behind others. I believe we have been implementing a Pessimistic Merging strategy thus far. Hintjens details a number of problems with that approach. I cherry-pick a few I've observed or experienced:
In my below wording I will use contributor for anyone involved with getting us to v3. (Track maintainer, misc contributor, etc).
This would mean if it compiles we keep it. The more idiomatic or terse way of solving the exercise should follow the typical improvement issue + PR process as described above. Thank you for reading this far. In summary I propose we optimize for any contribution and decrease our "change latency". This is in contrast with our current values of ideal Rust and abstract conceptual coherence (apriori DAG versus completed Concept Exercises. See #695). What I need from you is to 👍 or 👎 as to how you feel and think about this change. Beyond that, do type out anything else. Thank you! |
Beta Was this translation helpful? Give feedback.
Replies: 6 comments 10 replies
-
You may discount my opinion, as despite nominally holding a maintainer label, I have not contributed meaningfully to v3. And thus, practically, should not be considered to have been a maintainer for the past few months. But even as a non-maintainer, I feel I can add an opinion that is not completely useless. Someone once shared https://google.github.io/eng-practices/review/reviewer/standard.html with me. Although there is a bit to read here, the one point that stuck most with me is the bolded point in the "The Standard of Code Review" section, which I'll now quote.
My quoting this doesn't mean that I think reviewers have asked for perfection in the past (in fact, since I have not followed most PRs here, I'm not even qualified to say whether that statement is true or false); it simply means that reading this quote has affected how I've approached my reviews ever since having read it. Of course, we should understand that what constitutes an improvement may vary depending on the exact project. Some projects might, by their nature, have different requirements for being an improvement than other projects. I believe that is what is about to be discussed. |
Beta Was this translation helpful? Give feedback.
-
Short answer: I disagree with the premise. C4 is interesting, but the specific process changes you suggest here seem antithetical to correct software development. At a high level, I do not believe that there is value in sacrificing correctness in favor of iteration speed. Let's get to details.
Agree. I find this analogous to what the Rust compiler does: it only accepts programs which are correct according to its metrics, and the borrow checker in particular is more strict than most other widely used languages. Strictness is its strength. At the same time it provides useful error messages.
It tells new contributors that there is a standard of quality in the code base that all contributions should meet or exceed. If we want to go down the rabbit hole, we can work out the statistics for what portion of Exercism Rust PRs are eventually accepted, and what portion of contributors come back more than once. However, my fundamental premise is that exercises should be idiomatic and complete, precisely because we are teaching students who may not know the idioms yet. They should always be exposed to code which is a good model for what they should eventually produce.
Failure is an inherent part of this cycle. This comment seems to be mostly about turnaround time, not about the level of quality requested.
I want to lump my response to this with one to the later complaint about #1586: "I spent 2+ hours of my precious free-time on the task." I also spent an hour on that task. I read through the proposal, and wrote 13 comments on specific sections of code, plus several paragraphs on a strategy for general improvements. Yes, the majority of the work goes to individual contributors, but a thoughtful review also takes work, and is a contribution to the project. My goal is at all times to be welcoming, precise, and when suggesting changes, always to explain both why I want a change and how to fix it. I cannot claim to have a perfect success rate, but that's the metric to which I hold myself.
I feel strongly that this is a bad policy. The main branch should always be in a production-ready state, which in this case, means sufficiently polished to put before students. To do otherwise implies that we must have a process for periodically cleaning things up, and discarding incomplete sections, and quite frankly, I do not have time for that project.
I reject the notion that any code which compiles is correct: our goal here is not to produce compiling code; it is to teach students. A lesson which teaches students the right thing alongside several bad habits is not correct. A lesson which has significant unimplemented sections is not correct. A correct exercise, and in particular a correct concept exercise, fully teaches one concept and always demonstrates and encourages idiomatic rust. "Fully teaches" there is overloaded: it both completely explains the concept (using #1586 as an example, it encourages both field-access and pattern matching), and it is completely implemented; there's no need to come back and finish the exercise later. This is very intentionally a conservative view, because it is derived from the earlier assertion that the main branch should always be in a production-ready state.
As you say, the bulk of work in #1586 was rejected or rewritten. It does not make sense to me to merge work about which that statement is true. Is it really helpful to merge it, then write an issue saying "by the way, this whole exercise needs what amounts to a rewrite"? It seems more helpful, and more polite, to bring it up to snuff immediately, instead of getting passive-aggressive about it. |
Beta Was this translation helpful? Give feedback.
-
Though I feel like this discussion is among giants -- @efx, @coriolinus, @petertseng you are all immensely gifted in your work and ability so I hope to not offend or cause any concern that my respect to you is in doubt -- I think exercism/elixir may have some voice in this since we have implemented optimistic merging. Elixir is not a systems language, and so there are some degree of difference as to the rigorousness which is required for daily work with it. I'd like to discuss my experience with Optimistic Merging [OM], but first discuss what the track was facing to better illustrate why it is better now. Where we wereI remember after out 'kick off meeting' there were about 5-6 elixir-interested collaborators ready to start on the work of basically creating a curriculum. And while I don't think any of us said it, I think we were all overwhelmed by the scope of this because it is one thing to write a practice problem, but quite another to start from scratch and create exercises that build from the start. So we started with the process of concept discovery. And I think rather than coming up with an exhaustive list, we tried to make a perfect list. If you look back I think we have a silly number of PRs just to make this basic list of ideas to make exercises from. That was exhausting and because of that and COVID and life, that was probably the point where we lost most of our momentum. The problem compoundsI distinctly remember starting the I had a similar experience as @efx when creating my second attempt at an exercise with Where I wasI was reasonably discouraged at this point for a few reasons:
What changed
SummaryI really like where the elixir track is right now. We have 22 exercises, and average ~4/wk, We might soon even have a third contributor soon and I'm hoping that our practice with OM between me @ErikSchierboom and @angelikatyborska will result in more people contributing as they are able. Many hands make light work. I think a point of @efx's was misinterpreted here though. The idea of merging 'good PRs' and using issues to flag actionable items to make 'great PRs'. I don't think this is being passive aggressive nor accepting wrong work. No one (other than @iHiD and @ErikSchierboom ) works on exercism professionally (afaik) and we are all here because it is stimulating, challenging, fun. And I will spend my free time growing my skills or contributing my time to places where I feel valued, encouraged, and wanted. And I think an OM approach reinforces positivity, momentum, and progress. A rolling stone gathers no moss. |
Beta Was this translation helpful? Give feedback.
-
So, the "PRs should be merged if they improve things even if they aren't perfect" doctrine described in the Google Standard seems like a fair baseline, does it not? I think correctness is deeply valuable or I would never have touched Rust, but I also think that most software follows an iterative process... what we want to do is to grow in the correct phases. It would really suck if work is merged but isn't done, but also it isn't useful unless it's done, because interruptions in people's lives do happen (hi!) and if something is merged prematurely it risks a lot of confusing impressions. So what we have is more of a disagreement over what an improvement looks like. Sometimes work should in fact be thrown back, no matter how much we like the author or want to keep them or the work in question. I believe articulating our current implicit strategy more would make our merging strategy more optimistic merely by force of specification and bringing internal scrutiny, and that making a radical change in merging strategy might be too drastic if we haven't sat down and examined for a slightly longer few seconds what our current strategy is and what its benefits are. |
Beta Was this translation helpful? Give feedback.
-
Thank you again to everyone for chiming in. I'll summarize my understanding of the options for a way forward.
@coriolinus @workingjubilee does this summary seem fair? If so can we vote on which option we prefer? ❤️ for 1. 🚀 for 2, 🎉 three. |
Beta Was this translation helpful? Give feedback.
-
@exercism/rust hello! I've summarized a few ways forward: #1725 (comment). Please react with an emoji to vote or leave a comment with the number you prefer (1, 2, or 3). Thank you! |
Beta Was this translation helpful? Give feedback.
Thank you again to everyone for chiming in. I'll summarize my understanding of the options for a way forward.
@coriolinus @workingjubilee does this summary seem fair? If so can we vote on which option we prefer? ❤️ for 1. 🚀 for 2, 🎉 three.