Hi Christoph, Joe, and everyone, > Let’s take a step back and reflect on what we actually need. Some of you > have expressed the desire to have a more web-based or modern (or > github-like…) Kwant development workflow.
Christoph, I believe you're downplaying the reasoning here, it's not as arbitrary. Ultimately, the reason why I raised this question together with others is not the similarity of the workflow to github or it being web-based, but the entry level for contributing. I have just checked with the Kwant survey that approximately half of the potential contributors don't use version control. While I believe the physics community as a whole benefits from the proliferation of version control, Kwant itself benefits from having contributors more than from enforcing best practices. So I want to make it reasonably easy to contribute to Kwant for people who don't have time or wish to learn details of git usage, PEP 8, PEP 257 (as long as the contributions are actually useful of course). My own first commit to a public project, a docstring edit, was done when I didn't feel comfortable with git, and it was made using entirely web interface of github. You may consider it not relevant, but I think checking such a pull request is less work for a developer than going the complete thing from scratch. Making another step back you could ask why we bother using git at all if it's so hard to learn, and for me the answer is that it makes some tasks easier for us. The aspect relevant to our discussion is that it allows to easily see what exactly was done, ensure that it's easy to modify, reapply, or undo the changes, and to see who did what. I agree with you that it is not a matter of pedantry, but a very useful feature. This still leaves us with freedom to decide how we use git, and the current approach consists of maintaining a linear history where every commit is meaningful. The "github" approach results in a history with a lot of merge commits and many commits on feature branches breaking things or being generally of poor quality, so it appears to hurt the usefulness of version control. However, looking around, I have found that git allows to achieve comparable results with dirty branches. For example, '--first-parent' will make the history easy to navigate (e.g. like this: http://antonakhmerov.org/misc/first-parent.png), and rebase replaces cherry-pick. So it is possible to keep the history clean using github approach, but it relies on using different conventions for what is considered clean. I do realize that this approach shifts the some of the burden from the contributors to developers, since manipulating github-style history is marginally harder. Let me now comment on the current Kwant workflow aspects (a1-a4 in your email). As I have discussed above the workflow aspects a2 (all commits clean) and a3 (minimal amount of merges) aren't of universal importance being instead a part of an agreement on how to interpret development history. While Peter Hintjens in his EuroScipy presentation argued that there is no need to rely on experienced reviewers accepting patches (a1), I think this aspect has no impact on our tool choice and I don't have a strong opinion about it. Finally I agree that there's a merit in not resctricting the tools contributors use (a4), but as long as we have operational email accounts, anybody may just email us and not use any of the tools. As Joe also writes in his reply, we aim to simplify the workflow for people who do not have a preference of the tools they want to use. Proceeding to the things that should be improved from status quo: > • (p1) There is no good way to query all existing bugs and issues... > • Even more relevant IMHO are not bugs but tasks/wishlist items... I agree. > • (p2) The github crowd has no obvious way to contribute to Kwant. I do not > think that this is a big problem, but it would be certainly nice to allow > contributions in a way that is familiar to many people. BUT I strongly > insist on not giving up nice aspects of our own way of working because > “everybody else is doing it like that”. Also, I think that it is crucial > that it’s possible to contribute to a piece of software without having to > accept the terms & conditions of some specific non-free software. Alas, > many projects do not see this problem. I would extend this: not only the github users have no obvious way to contribute, but also physicists with limited programming skills. Further "Everybody else is doing it like that" is indeed not an ultimate argument, but it is an argument nonetheless since it saves time to contributors familiar with a common convention. As I argued above, I believe we can adopt the other workflow while not giving up the practical consequences of our current workflow. > • (p3) Currently, most code review is done in person-to-person > conversations. As we are spread geographically, it would be nice to make > this more traceable for others. Also, the stages of evolution of a > patchset are not preserved through multiple rewrites. I agree. > • (p4) It could be beneficial to setup some way of automated testing of the > code base (confusingly, that often is called “continuous integration”): If > a patchset gets proposed, it would be nice to see whether all tests pass. > But then, if a contributor is unable to internalize the simple rule that > all tests should always pass, that’s a bad contributor. Also, if code > review is done in a reasonable way, it should be trivial for the reviewer > to execute the tests himself (as it is now). As I already mentioned to you in person, this makes me a bad contributor :-) I try my best, but sometimes I forget. Automated tests allow both contributors and reviewers to spare some mental effort. Since the goal of programming is to make routine tasks automated, I'm very much in favor of automated testing. > Before we continue with evaluating various tools, let’s first discuss what > we would like to have. I’m looking forward to your comments. While I was typing this email, Joe replied, and Christoph as well. I will discuss software details as a reply to those message. Best, Anton