nunit / governance

This repository holds documentation about how the NUnit Project is governed
Other
7 stars 4 forks source link

Individual Software Project Decentralization #8

Closed CharliePoole closed 7 years ago

CharliePoole commented 7 years ago

@CharliePoole commented on Tue Jun 06 2017

I'm writing this as an question to be discussed by the Core Team, but we can transform it into an action item if we find there is something we need to do as a result.

I began breaking the old NUnit project into multiple pieces (framework, engine, etc.) for NUnit 3 because I pictured a future where different people could work on each project, establish their own road map, deliver on their own schedule. I wrote the governance docs, which the Core Team approved, with the same thing in mind. I feel we are ready to move on to the individual software projects and need to do so quickly to keep up our momentum.

However, in an email, Rob suggested that this is the wrong path to follow. Because I have been assuming that Rob would eventually become the Core Team Leader/Chair/Whatever-we-call-it, this was a bit disconcerting to me and has made me wonder if I could be wasting my time. The fact is, you guys are going to run the NUnit Project as you want to after I'm gone and that's OK. My working on these governance docs isn't intended to limit you but to expand the possibilities. If it's not working, then I should stop!

So the underlying question in this issue is should we proceed in the direction we have been going, with individual projects operating on a decentralized basis and with their own leads?

More to follow...


@CharliePoole commented on Tue Jun 06 2017

I'm excerpting the note from Rob that started me on this train of thought, hopefully not including anything that wasn't intended to be public...


"...we have been pushing project related teams for a long time now and don't seem to be getting much traction. I forget who said it in one of the governance reviews, probably you?, but I am beginning to wonder if we shouldn't just have one team that works on all the core projects and only setup smaller teams for secondary and contrib projects that we don't have time to maintain. Likely many of these will be one person teams.

"I think that because you and I have experience in all projects that we think that people can work in silos on one project. I am beginning to doubt that. I think it is important to understand how the framework and the engine work in order to work on the adapter for example. It would be nice if it was a clean API between the layers that people could work against without knowledge of what is inside the box, but I don't think we are there yet.

"Based on that, I wonder if the core team should be those developers who work on multiple projects and manage our core projects. We might want to include additional people who have been more active recently and I think the group should change over time as people's commitments allow. I think this might be more inline with the way you and I have been working for the last few years with a core group that changes over time?

"I had originally seen the core team as a group that stood outside of the development team that comprised of day to day contributors and respected people from the community that formed an advisory board. I am beginning to think that idea is overly ambitious. I think we have to embrace the realities that we face. Our team is very dynamic and changes constantly with people coming and going as they can commit time.

"Based on that, I doubt we will ever be able to fill all of the roles and teams we are envisioning in the governance documents and we shouldn't be chasing unattainable goals. I think all we need is a core group of committed leaders as you have been, and I strive to be, working with a changing group of people that commit what time they can when they can. It seems to me that this is the way that NUnit has always worked and it has worked fairly well in the past despite the ups and downs."


@CharliePoole commented on Tue Jun 06 2017

First comment: If Rob's ideas are right (or more to the point, if we decide to follow them) then I think we need to go back over the primary governance doc that describes the core team. As described, it is not a core group that runs the core projects - in spite of it's name. It's more like a board of directors.

So... let's decide what we think it should be.

I guess it's also an option to rename the Core Team we already defined and create a software project team that covers our core projects.


@CharliePoole commented on Tue Jun 06 2017

Second Comment...

The problem I see is that one person, Rob, is the software project lead for all of our core projects. In addition, he functions as the release manager for all of those projects. That doesn't seem sustainable.

In a sense, Rob is right that we always operated this way. But the past NUnit was much smaller than it is today and it was organized as one big project with everything released together. We have grown NUnit and also made structural changes so that it is currently more work to maintain. We did that in order to attract more people to do the work.

My concern is for the future. If all the core projects are actually one project, it seems as if people would be less likely to step up and volunteer to take that mega-project over when the time comes. It seems like it may be half-way reasonable to think that someone would take over the framework, rather than taking over the whole thing.

We can only guess about the future of course. But one indication we have is how you guys, today, feel about this. Would you see yourself taking over, for example, just the framework or just the console? Would you see yourself taking over "NUnit" entirely? My thought was that nobody in their right mind should want the "NUnit" job, which is why I started unbundling stuff.


@CharliePoole commented on Tue Jun 06 2017

Third Comment...

Here is a list of our software teams and their leads. I've skipped anything that doesn't do releases...

Framework Team - Rob Engine Team - Rob .NET Core Runner Team - Rob GUI Team - Charlie VS Extensions Team - Charlie on paper, but Rob has been doing it

IMO, the more a single person does, the more we are at risk in the future (see Truck Number). If we don't find different leads for each project, then we need permanent or rotating Release Managers for each one.


@CharliePoole commented on Tue Jun 06 2017

Fourth Comment...

Pushing ahead versus risk management in projects...

When a project has a long-established body of users and usage, you have to be careful not to break anything. On the other hand, you want to keep moving ahead, adding new features, supporting new platforms... all of which carry an element of risk.

In the (old) NUnit project, I always tried to be the guy who looked out for the risky stuff. NUnit was always somewhat conservative from its first days and I continued the tradition. We worried more about backward compatibility than about supporting the latest Microsoft innovation. Either in spite of that or just maybe because of it, we survived.

That's not the only approach. I've worked in other environments where I was the lead and I was pushing things ahead more rapidly than some people wanted to see. In those cases, I appointed somebody to be the guardian of backward compatibility, watch out for regressions, etc. That's the typical role of a release manager.

In releasing any piece of software, you need the push of innovation and the reserve of risk management. It's usually not reasonable, at least in my experience, to expect one person to have both things in mind at the same time. As we organize to release software, we should think about who is going to fill each role.

That's all from me for now on this.


@ChrisMaddock commented on Tue Jun 06 2017

There's a lot here, and I'm not sure I know the correct answer to any of it. Regardless - the below is my personal experience:


@CharliePoole commented on Tue Jun 06 2017

@ChrisMaddock I've noticed that you seem to gravitate toward issues that cross the boundaries and that you like to work on all parts of it... stuff like attachments for example. I think there are lots of people who prefer that, although it's hard because you have to be familiar with a lot of different tech.

OTOH, I would say that the majority of the stuff we do is limited to a single project: New assertions, constraints, bug fixes in the framework'; location of extensions in the engine; reporting in the console runner. So it could be that that's the less interesting stuff or that the integration issues float to the top because they cause us so many problems.

Regarding advisory board versus board of directors model: I had hoped we were past that, having already made the decision. If we are not, however, I'd like to know because it's frustrating to be assuming something as decided and realize that not everyone has got there yet.

I agree that the question of pushing ahead versus risk management is somewhat separate from this. I put it in there because in my mind you can't be both and I think anybody putting himself forward as a lead for a project has to decide which side of the equation he falls on and make arrangements for the other side. I say that having given up working on exciting new stuff in many areas for years because I was the guy in charge with a role to fulfill.

I agree 100% that we have to figure out a way that people can work on the things that turn them on!


@jnm2 commented on Tue Jun 06 2017

Regarding advisory board versus board of directors model: I had hoped we were past that, having already made the decision. If we are not, however, I'd like to know because it's frustrating to be assuming something as decided and realize that not everyone has got there yet.

Even though ideally we'd have more people, I also haven't yet understood why it is a problem for members of the core team to double as members of development teams. What specifically would be gained by undoing the current decision?


@CharliePoole commented on Tue Jun 06 2017

I think this line of discussion goes back to ideas that were discussed as much as two years ago. Since you are new to the discussion, you may have to put up with feeling a little lost part of the time. :smile:

I created the Core Team originally to be those people with write access to all our repositories. They were the main people responsible for NUnit in an operational way but they didn't function as any kind of committee.

About 18 months ago, I started trying to make the Core Team into a sort of governing body for the overall project, but still comprised of key developers and still all having write access to everything. At around the same time, we discussed some options like having an additional advisory board of users and/or including such people in the core team but in a purely advisory, non-operational role. I didn't go that way because I don't think a group or team that has people with different levels of authority on it works well - that is, if you're advisory it should be clear that's what you are and also whom you are advising. Personally, I don't see a big need for an advisory group, but if the core team decided it wanted one, I'd expect it to be separate and not grant any access to our repos.

Reviewing all the notes, I don't think anyone who has mentioned an advisory group is pushing for the Core Team to be purely advisory.

The reason the Core Team has meant different things at different times is that I have never been able to come up with a better name. Board of Directors is too corporate for me and also implies no direct operational role.

I think what is actually the point of this issue is whether the core team should actually run projects as a body or just be a last resort for resolving issues within or between projects. In the docs we approved, the running of projects is left too Software Project Teams and especially the leaders of such teams. If that's what we want to do, then the next step will be to go on and decide who the leaders of each project should be. If not, then I think we rewrite the docs so they describe what you guys actually want to do.

Talking about this with my wife, she asked if it was possibly to difficult for devs to think at the broad level of future organization. I acknowledged it could be for some people who are not used to it - who don't get to do that in the companies where they work. But I added that the subject is something that you are all experts in: how you want to work.

You guys on the Core Team are the most active developers of NUnit we have. So if none of you think you will ever want to take responsibility for one of the software projects, then we should probably be looking for another alternative. I just don't want us to decide without asking you.

BTW, I did try to define the responsibilities of a software project leader in the governance doc. Folks may want to reread that.


@CharliePoole commented on Wed Jun 07 2017

Apologies for having created this in the wrong place! I'll move it.

rprouse commented 7 years ago

I have always supported the idea of individual teams for each project and then a core team that manages the overall direction of the project, but lately I have become worried that we might be tilting at windmills. @CharliePoole and I started trying to put this in place around two years ago, but I don't feel we have been very successful. We have managed to recruit new members and we are spreading the load as best we can between the projects, but the core group seems to be working across all projects and a few of us are making the decisions for most projects.

I see the governance that we have come up with as a great ideal, but it doesn't seem to match the reality on the ground no matter how hard we have been trying. We also tend to recruit people for one team, but they usually like to work on several projects once they get involved.

I would be happy to keep the governance as we have set it and continue to strive for that ideal as long as we are comfortable with the fact that it doesn't match what we currently have. Just scan the NUnit Teams, the core team is on most and the other people are only occasionally active. If I want a PR reviewed, I find myself asking the core team most of the time.

We have managed to setup a few groups that are working like the GUI team and the TeamCity adapter, so maybe we should continue in that direction.

CharliePoole commented 7 years ago

I think having an ideal and also being aware of reality are both important characteristics. More than the theoretical ideal, I am quite concerned about the workload that is falling primarily on Rob's head. Rob, I have urged you privately to resist, to let things go bad until somebody steps up to take the jobs on. But you're too committed to the work to do that. It's a strength and also a potential trap. My own experience with a great many teams in consulting is that nobody ever volunteers to do something that's already being done well.

This concern is not so much about the overlapping teams but with the fact that the team leadership and release maagement are all being done by one person for our major projects. This really shouldn't continue, in my view. I'd like to see some degree of differentiation at least in the role of release manager. A good release manager can resist actions WRT the release that are too hasty and likely to be de-stabilizing. And it's a hat that any good dev can learn to wear.

However, WRT this issue, I feel that I've said my piece and it's up to you guys to decide what to do.

CharliePoole commented 7 years ago

AH ... one other thing. I feel that a separate software team lead - for example, for the framework - would have a stronger tendency to recruit people for that team.

jnm2 commented 7 years ago

Speaking of recruitment, reaching out to the .NET Foundation may be a good idea. Martin Woodward said that one of the goals of the foundation is helping get the word out and recruit contributors. We could start a conversation and see what they can do for us.

rprouse commented 7 years ago

I have actually been trying to step back in some areas, for example, not getting involved in all issue and PR discussions, but I find that I start losing track of everything that is happening in the projects I am interested in. I guess that is the price I need to pay. It has resulted in more team participation though and I thank everyone for that 😄

I am good to stick with the governance model as we have outlined it. I think it is good that we have this discussion more widely than just between @CharliePoole and I though. At the very least, it is an indication that people are welcome to step in and help out.

One thing I might change, if only in the short term, is to merge some of the GitHub teams into one team to widen the pool of people to call on for help with PRs and to indicate that members are welcome to help out on the other projects. At a minimum, I was thinking combine the framework and engine teams, but I would also like to pull in the test adapter team. I see this as core NUnit and would like to see as many people working on those projects as possible.

@jnm2 we have been talking to Martin Woodward about joining the .NET Foundation, but we were holding off until we had our governance model in place. We were then going to bring it before the entire core team to discuss and decide. If we want to start that discussion, I see no reason why we can't do it publicly as an issue in this repo. Does anyone feel that we should keep it private initially?

rprouse commented 7 years ago

I should explain more about why I see the VS test adapter as core NUnit. I don't think it always was, but now that Microsoft has open sourced MSTest and VSTest, and now that they have documented the API, the adapter is being used more widely and I expect it will find itself in more IDE's in the future. It has already been picked up by VS Code allowing you to run your tests there and it is used by the .NET Core command line. It might also work in the new Visual Studio for Mac, I need to test that. If it works in VS for Mac, there is also a chance that it will work its way back into MonoDevelop.

jnm2 commented 7 years ago

@rprouse I strongly agree about the VSTest adapter.

CharliePoole commented 7 years ago

Microsoft Visual Studio is a commercial product. In working with them, I believe we should consider carefully what to do and what not to do, in keeping with the principle of platform- and IDE-independence given in our vision statement. We have already - in recent years - compromised the principles to some extent, to my regret and over my objections. I didn't fight hard at the time because I know that the new generation has new ideas and (I hope) it's own principles. I feel obligated to say it now and I'll repeat it when I post the vision / principles issue.

Principles are important, certainly in an open source project that prides itself on its transparency. Therefore, I think we should try to make our statement of principles something that we are actually willing to follow. So, to the extent that you guys in future are willing to deviate from the platform-independent statement, I seriously hope you will take a vote and change the statement itself!

The combining of everything (framework, engine, console, adapter) into a single software project does make it pretty much impossible for anybody to take on one of those projects as a separate entity. I'll just tell you what I tell the teams I coach: when you make a decision, also make a decision about how and when you will review that decision. 😄

I had previously volunteered (to Rob privately) to take back the engine as a project myself. Rob, you said then that you preferred that we work together. At the time, I'm afraid I didn't get what you meant. Clearly you believe that splitting the projects was a mistake. My hope is that you will pay attention to the factors that led to splitting the projects in the first place and which may arise again. In particular, I feel that organizational combination is more or less easy to reverse if you need to but the separation of the whole into layers, with separate repos and clear rules about what references what gives us important benefits (albeit at a price) and I hope you don't feel like reversing that as well. Compared to what we have now, the old NUnit project was the proverbial "big ball of mud."

Finally, when we started this process, there were two basic patterns to choose from with regard to governance: "Benevolent Dictatorship" and "Meritocracy." We decided to go for Meritocracy. Frankly, what we are ending up with here sounds a lot more like BD to me. There is nothing wrong with the BD model, but I wish those who favor it had said so in the first place! I don't have the energy to rewrite all the documents you guys already approved, but I hope someone will step up to do it. There is value in having the documents we publish actually reflect reality.

jnm2 commented 7 years ago

Maybe I missed it; I didn't hear anyone suggest merging the projects back together or moving away from a meritocratic model.

Correct me if I’m wrong, but I think all we’re suggesting is following the current governance docs– which we all like– as closely as we can by reusing people during this period of time where we don’t have as many volunteers as we could use. As more people show up, we’ll have the breathing room to organize more idyllically. In the meantime we aren’t rejecting the current governance docs by any means.

To my mind no matter what model you follow, the possible models will look more and more similar as you approach the singularity of having fewer and fewer people involved. That doesn’t mean we're jumping models, it just means we’re making do.

jnm2 commented 7 years ago

Perhaps what we need is for the governance docs to explicitly cover what happens when there aren’t enough individual members to go around.

CharliePoole commented 7 years ago

@jnm2 All good points.

And yet, in my coaching experience, I've noticed is that the majority of folks on a team will not volunteer for a task when somebody else already has the job. They only step up for "vacancies."

So my original idea was to create a bunch of "vacancies" in the form of project leadership roles. I'm not criticizing Rob for stepping up - into almost all of them, in fact. I had merely hoped that some of you would have seen the opportunity and taken it.

Regarding BD versus meritocratic: Rob suggests merging all the teams. The teams, not the repos or projects are what count in terms of organization. If we have a single group of people working on the software - or at least the core software - with a single leader making the key decisions, then that is the BD model. As I say, there's nothing wrong with it - it's what we followed for the last 15 years. It isn't the structure I had hoped to create, but that's my failure, not yours.

But one point about that... You say you don't see anyone suggesting moving away from a meritocratic model. That is exactly my point. I see you moving away from it without anyone actually saying it. I'd rather you said it. Or explain to me why it's still meritocratic.

In the end, it was probably a mistake on my part to try to change the way we were organized at the same time as I was handing over the project to others. I should have done it a few years back. Unfortunately, it's not a mistake I can learn from. I'm not likely to be in the same position again. 😄

jnm2 commented 7 years ago

If we have a single group of people working on the software - or at least the core software - with a single leader making the key decisions, then that is the BD model.

Specifically, I didn't hear anyone suggest having a single leader making the key decisions. Rob doing all the work (😢) is not the same as Rob making all the decisions. And the distinction between 1) a single team working on all projects and 2) teams per project which happen to share many of the same people, which I think Rob was talking about, is a fine but important distinction. If you keep that distinction, then as more people arrive, the more the teams separate. So I'm still missing how we are really moving away from a meritocratic model? For right now, would it really be more meritocratic if we had only one person in each team?

If the only remaining problem is that Rob is shouldering most of the work, let's have that discussion.

CharliePoole commented 7 years ago

I'm not sure if I am hearing that (single leader making the key decisions) or if it's merely a base assumption of mine. It's really up to you guys to figure it out. Some data points...

In sum, I figured we would end up with the efficiency of BD at the project level and something more democratic, even if cumbersome at the top level. Merging the levels means you have to all wear two hats, which might be hard.

CharliePoole commented 7 years ago

Just to be clear... I want the software project lead to make key decisions 95% of the time.

CharliePoole commented 7 years ago

As a matter of definition - and apologies to those who already know this...

Anyway, that's what we mean by the terms, just in case anyone needs it.

CharliePoole commented 7 years ago

I can accept Rob's point of view that we may need to take the governance docs as a goal and make some adjustments in practice, at least for now.

I actually prefer that to somehow pretending that we are following the docs, if we are not going to.

jnm2 commented 7 years ago

If we don't expand the governance docs to cover scenarios where there isn't enough person-time to go around, I still think it's a worthwhile conversation.

CharliePoole commented 7 years ago

Of course, the first step in changing the governance docs is that somebody propose a change. 😄

rprouse commented 7 years ago

@CharliePoole I think you took my suggestion to mean too much. I would like to see people taking responsibility and making leadership decisions for the individual repos and even having nominal teams for each repo. I just think that a single GitHub team that has write access to our core repos will empower developers who work on one repo to help out in the others. It will also give us a team that we can call upon for code reviews in those repos. As it is now, we tend to call upon the @nunit/core-team for second reviews. That is not the purpose of the core team.

Actually, I think the @nunit/core-team should mainly be active in this repository and only invoked in other repositories when policy decisions are needed, not calling for help with PRs or working on issues. I would rather see the NUnit Contributors team repurposed to have write access to our core repositories and pruned to just have currently active members. I didn't use the tag for that team now because it has 47 people, most of whom aren't active. I also don't use it for PRs because that would be spammy.

I am open to repurposing Contributors or creating a new team, I just find the Framework, Engine and Adapter teams to be not useful to call upon and I feel that they encourage siloing.

rprouse commented 7 years ago

To address the adapter comment about Visual Studio being a commercial product, I fully agree and that is why I said I would have considered it separate earlier. The difference now is that the adapter API is now the standard API for running tests in .NET. That means that it isn't just a Visual Studio adapter anymore, it is just a .NET test adapter for our framework.

The adapter is currently the only way (other than NUnitLite) to run .NET Core tests cross-platform from the command line. As I have stated before, testing is now a first class concept in .NET Core and we should support and encourage that.

ChrisMaddock commented 7 years ago

Sorry all, busy few days. In entirely unrelated news, good morning, from a slightly more liberal United Kingdom. 🙂

I'll just pick up on some specifics...

CharliePoole commented 7 years ago

@rprouse I'm glad you would like to encourage people to make decisions and take responsibility for the individual repos. I would too. Having project leaders or release managers are just a means to that end. There are probably lots of other approaches that will work - I just haven't seen or heard them yet.

Forming a single team is fine, although I would still tend to exclude the VS stuff as being pretty specialized. Re-purposing the Contributors team would eliminate a big recruitment tool. We just need to prune it once in a while, which is not something GitHub makes easy. I wish there were an easy way to know how long people had been on it without actually contributing. Also, several of us add people, so it's a bit touchy to be removing someone that another member has sponsored - at least that's how I have felt.

It's been clear for a long time that we view the adapter differently. :smile: I see it as something to be replaced.

@ChrisMaddock My concern is similar to yours wrt combining the teams. We have always allowed people to work wherever they want. Once you're a committer on a core project, we give you commit authority on any others just for asking. Forming a single team makes it seem as if people are supposed to work on the various projects and I wouldn't want to say that.

I'm also concerned that treating them as a single project will lead to shortcuts that break the independence across the three layers. We are somewhat protected by the fact that each layer is in a separate repo and solution, but it's very easy to have "knowledge leakage" across the boundaries.

Maybe a compromise would be to have the same people work on the framework, console and engine.

My hope was that the console would be usable for .NET Core in the future. That's no longer likely from this project (because nobody is working on it) but it's still a technical possibility. It's one area I've considered spending time on "when I can."

@ChrisMaddock I can't find the quoted phrase "aren't going so well" anywhere in this discussion. I hope that's not something you are attributing to me! I think things are going quite well and there are even aspects of this discussion - where you are all disagreeing with me - that I consider positive.

I do feel that the personal goals I set for arranging succession of power in this project are not going well at all, but those are personal goals, not project goals. My original plan was to remain with the team, somewhat in the same way that Kent Beck did with respect to JUnit... he remains connected and an important voice, while others have taken on the running of the project.

Unfortunately, the past 18 months have convinced me that it's likely not possible for me to remain as connected to the project as I would like without causing conflict. This is sad, of course. So if I said anything that sounded like "things are not going well" that's what it was about.

ChrisMaddock commented 7 years ago

@ChrisMaddock I can't find the quoted phrase "aren't going so well" anywhere in this discussion. I hope that's not something you are attributing to me!

This was meant solely in the context of the idea that "splitting up the projects and building smaller teams doesn't seem to be going so well" - which seems to have been suggested in this discussion. Not at all in relation to the process moving to a new governance structure - I'll edit the above to clarify.

jnm2 commented 7 years ago

@rprouse @CharliePoole If we want to work with dotnet test, is the adapter a necessity or is it possible to skip VSTest entirely? If it is a necessity, would we consider a dotnet nunit?

rprouse commented 7 years ago

@jnm2 if we want to run with dotnet test, then it is necessary. Other IDEs are also starting to use it like Visual Studio Code, so I think it is important.

That said, I do think we should create a dotnet nunit command to give us more control.

I think running from the current console is okay, but it will require users have the full .NET framework or Mono installed which I think is the wrong approach. You should only need the framework you are targeting.

CharliePoole commented 7 years ago

@rprouse Ironically, that's the same POV that @oznetmaster has been pushing WRT .NET CF. :-)

There is probably some difference having to do with size of user base, however.

rprouse commented 7 years ago

As a compromise for the larger team to work on several of our core repositories, GitHub just released team hierarchies today. We could keep the framework team, engine team, etc, but include them in a larger team that we could call out for code review or help. Not sure what to call it though since core team is already taken. Maybe Core Projects Team. A bit long and similar to the core team. Any other ideas?

https://github.com/blog/2378-nested-teams-add-depth-to-your-team-structure

Would this compromise be acceptable? If so, what name?

At this point, I would be happy with that compromise, or with leaving the team structure as is. Shall we call for a vote and close this issue?

ChrisMaddock commented 7 years ago

Perfect timing. 😄

Yes to creating the team.

I also think Core Projects Team is too similar to Core Team and could cause confusion - but don't have any better suggestion (yet!). We can always rename the team.

CharliePoole commented 7 years ago

@rprouse This is a neat feature, although not as neat as nested folders of repos, which many of us have been waiting for. But I would ask you wait to do this until after we decide this issue and also decide who is in each role.

I don't see your suggestion as a compromise on the issue but as possibly masking a real issue that we ought to decide. I think I defined my use of centralized / decentralize before, but here it is again, as I intended this issue when I wrote it...

Centralized means that the Core Team will tell the individual projects, their leads and their members how they are supposed to do things, what to give priority to, etc. We will have central planning, scheduling and releasing for all projects.

Decentralized would mean that individual projects will figure out how to operate within some boundaries defined by the Core Team and the Core team will only intervene rarely. Each project would set its priorities and schedule and do its releases.

This seems like a very simple choice and I can't see why it's not possible to resolve it directly. I'm wholeheartedly for decentralization and have been for some time. I drafted the docs that way. I felt that some things were being said that leaned more toward a centralized approach, which is why I raised this as an issue. I heard satisfactory explanations in the discussion as to why those things that worried me were not a repudiation of the decentralized approach. So I'm not sure why we would want a compromise. I don't even think there can be such a thing in this case - we need to go one way or the other.

The definition of what the individual projects are, in my mind, comes after this is resolved.

Matching the projects up to GitHub repos and teams is, again in my mind, a very low level implementation detail that doesn't belong in our governance policies.

CharliePoole commented 7 years ago

@ChrisMaddock Our comments crossed.

Maybe I'm missing something, since you like this idea and I don't. 😄 I'd like to understand how you see it as helping us. Is it merely an easier way to manage read and write authority? Do you see it settling the centralization versus decentralization question? In which direction?

jnm2 commented 7 years ago

I say let's wait to use the hierarchy until we find ourselves often needing a way to automate talking to all three teams at once. I agree that it's an implementation detail and should not have anything to do with the core team.

Also: we need better team names. I don't like the feel of the name 'governance team,' but it is way less confusable than 'core team' and says what it is.

A hypothetical convenience team combining the members of the main projects should be the 'main projects team', perhaps?

CharliePoole commented 7 years ago

@jnm2 Changing team names is trivial. We've done it several times in the past. Agreeing could be harder, now that we are democratic. 😸

In practice, up to now, the burden of managing names on multiple teams has fallen on Rob and me. I'd like to see team leaders managing who is on their teams.

CharliePoole commented 7 years ago

"Vision Holders" 😸

jnm2 commented 7 years ago

Great suggestion. I've moved my comments to https://github.com/nunit/governance/issues/17.

ChrisMaddock commented 7 years ago

@CharliePoole

As I understand Rob's proposal: he is suggesting that there is a 'Core Products team' (name tdc!) which overarches the framework, engine and adapter teams. My vision would be that that would be the team we would generally add new contributors in this area to.

Why? It's rare for our contributors to only use a single one of our tools. i.e. most people use both framework and console, many also use the adapter. Currently, we add users to either a framework or console team, based predominantly on where they happen to have made their first PRs. With a 'Core Products Team' we'd be inviting them to contribute to and follow discussions on any of the three core products, which they likely use most of. This also gives us a larger pool of people to work with when reviews/decisions are required - I imagine, in practice, many of the members currently only on the framework team would also have an active interest in the engine.

Two clarifications from me:

  1. I still think there should be project leadership for individual framework/engine/adapter teams. (Which I think is a view Rob shares?) As I understand, Rob is suggesting pooling the commiters, but still keeping separate project leads. (And logically, release managers and so on - when we reach that point.)

  2. I think the individual framework/console/adapter teams should still exist - for those who will only have interest in specifically one of those products. (We know of at least a couple of contributors who fall into that net.)

@rprouse - please correct me if I've chewed your words!

ChrisMaddock commented 7 years ago

I also agree that I think this relates to the framework and engine in particular - due to the amount of cross-over between the projects. I understand that with .NET Core, the adapter will also become part of this group.

Other projects such as the GUI, I think work well with an independent, standalone team. I could see the Xamarin runner working in the same way, in future.

CharliePoole commented 7 years ago

@ChrisMaddock So, if I'm understanding correctly, you see this as a more efficient way to assign authority and as not affecting the centralization versus decentralization issue. Is that a fair interpretation?

However, if we are not centralized I don't think the Core Team is who should set up these groups. Maybe some project doesn't want to participate. In a decentralized approach, that would be their option unless we feel this is one of the few strict rules we would impose. That's my view anyway.

As far as the approach goes, I see that it brings minor efficiency improvements at the expense of a bit of complexity. From my experience assigning people to multiple teams it's on the order of minutes per month.

Honestly, I'd rather see project leads compete in recruiting people in order to incentivize growing our number.

That said, I don't absolutely hate the idea unless we impose it from above.

CharliePoole commented 7 years ago

@rprouse and everyone...

When I worked in a bureaucracy that talked a lot about centralization and decentralization, there used I be a joke "Everything should be decentralized above me and decentralized from me on down." I'm seeing and feeling a bit of that here.

When I read something in the mindset of a project lead, I don't want any core team telling me what to do. (Mostly, that's the mindset I use here.) But if I were to think entirely from the top management / core team point of view, I'd probably be more inclined to tell people what to do. 😄 That's the thing we have to balance. I just don't think this is something to impose from the top down, even though it's a relatively small imposition.

I'd probably find this a lot easier to understand and deal with if I knew what side of the centralization / decentralization debate we plan to come down on. I plan to be the lead of at least one project so it's kind of important to me.

jnm2 commented 7 years ago

@CharliePoole Doesn't this, which we all like and agreed to, define precisely where we come down? https://github.com/nunit/governance/blob/master/governance.md#core-team

I might be the only one, but I'm struggling to keep up with what it actually is that we're trying to decide here.

CharliePoole commented 7 years ago

@jnm2 I believe that the existing governance doc calls for a decentralized approach, as you suggest. I wrote it that way and it was approved. But I heard some things that made me think some people no longer wanted this kind of approach. That's why I wrote the issue... so we could either validate the original approach or revise it. Since we are still debating, I guess there really was some reason to worry.

Suggestions?

jnm2 commented 7 years ago

I vote we stick with what the five of us approved.

If someone has a concrete improvement to propose for the governance doc to benefit the NUnit project, let's discuss that proposal in concrete terms.

If someone believes that we are taking concrete actions contrary to the governance doc, let's review whether we need to either adapt our practices to the agreed-upon docs, or agree upon an adaptation to the docs.

CharliePoole commented 7 years ago

@jnm2 Thanks for that comment and for others you have made throughout.

I just re-read all the comments since the start of this issue. As far as I can tell, everyone has said they understood and favored the structure we set up, with relatively independent software project teams and a core team that has more power to step in but normally doesn't. Even Rob, whose words got me worried in the first place, has clarified what he meant in a way that doesn't challenge the spirit of the existing governance doc.

So apparently I was mistaken and this is not a problem of intention. If you all agree, then there's no reason to continue this discussion. I raised this issue saying it was just a discussion item which might become an action item. It seems like it was just a discussion and that the discussion is over. I'm happy to close it with no action.

@jnm2 also has the right of it in saying we should deal with any concrete actions that go against the principles when they come up. I'm happy to wait to do that when something comes up.

I'll close this unless somebody disagrees. I don't think it has been a waste of time - at least not for me.

ChrisMaddock commented 7 years ago

I'll close this unless somebody disagrees. I don't think it has been a waste of time - at least not for me.

I agree with your conclusions.

Regarding Rob's hierarchical teams, and your comment above @CharliePoole:

However, if we are not centralized I don't think the Core Team is who should set up these groups.

It sounds like you're suggesting that Rob, as Framework Project Lead, should instead be having this conversation with the Engine Project Lead (also Rob!) and Adapter Project Lead (@OsirisTerje), rather than with the Core Team. I have no objection to that.

rprouse commented 7 years ago

It sounds like you're suggesting that Rob, as Framework Project Lead, should instead be having this conversation with the Engine Project Lead (also Rob!) and Adapter Project Lead (@OsirisTerje), rather than with the Core Team. I have no objection to that.

I will email myself and CC @OsirisTerje 😆

I vote to close

CharliePoole commented 7 years ago

I'm closing this. If I miscounted or misunderstood anyone's vote, feel free to reopen.