This post continues from ECS Designs and The Vision of Amethyst.
We Found a Vision!
After the bit of discussion we had about the vision of Amethyst it seems like the general consensus is that Amethyst should be and engine that is:
- 1st class in developer experience
- Will work to be stable so it can be usable
- Will focus on getting to a point where games are deliverable
- Values and respects the community
- Focused initially on 2D so that we can deliver on promised developer experience
- Fully free and Open Source
- High performance and safe through Rust and ECS
This may not be the best summary, and we need to get the vision more concrete and validated, but that sums it up a bit and it seems like most people didn’t hesitate to agree on these points. It is really great that we are getting a more of a solid direction with this vision and I think this will help a lot.
The Next Step: Leadership
Now I think it is a good time to discuss leadership. So, in my experience with the Amethyst community, decisions often end up in a sort of in-between state where there seems to be a certain amount of people that agree to something, but then the decision isn’t really ever “made” until somebody puts the work in to actually do it and it’s therefore just kind of automatically made because somebody did it. The Legion ECS effort felt like that. Until @jaynus started work, you kind of couldn’t tell whether or not the direction was “approved”.
Another example is the vision: it seems to be generally agreed upon the direction that we should go in, but now the discussion has kind of trailed off with no real “official” take away from it. The feeling that I get is that there is nobody here who really has a whole lot of “decision making power” .
That leaves us in a place where it is hard to unify the direction of the work that we do. Right now I feel like we really need to take steps to solidify the vision and get feedback until a point where we can really buy in on it and make it solid and official. Not that it can’t be revised later, you always need to be able to do that, but we need to make it official so that we have a direction and we can actually reap the benefits of the vision and the unity that it brings the community.
The Role of the Leader
Where does the leader play in on this? The leader’s job is to defend and promote the vision. Once the community has established a vision, they need to establish a leader that they can trust to promote and protect the vision.
Promoting the Vision
The leader needs to take the vision and make sure that the community is working to accomplish that vision. He needs to always keep in mind why we are here and be thinking about what we need to do to accomplish our vision.
Protecting the Vision
The leader also needs to defend the vision. If there is anything that threatens the vision, then it is the leaders job to detect that and take measures to correct it. For example, say a developer started going off on a tangent to add some snazzy 3D renderer to Amethyst, after we decided that the vision for Amethyst now is to focus on 2D and stabilizing what we have. If the effort for 3D did not hurt the vision to stabilize our 2D core, then the work could go on in parallel, but if the 3D effort required rework and added instability to our 2D effort, then that is something the leader should address.
The leader in an Open Source project can’t necessarily “just tell people what to do”, and if that developer wanted to keep working on their 3D renderer they could, but they would have to do it in their own repo if it was hurting the Amethyst vision to keep it in Amethyst.
Making Decisions To Accomplish Both
Most importantly the leader needs to have the authorization to make decisions. Once made, the community has a responsibility to respect the decisions made. This is not to say that the leader just gets to do whatever he wants by any means. One of the points that I put in the vision summary above was “values and respects the community”, and the leader must uphold that aspect of the vision as well. Any leader not upholding the whole vision of Amethyst should be replaced with one that will.
The reason you need a leader is because when there are decisions to be made, global consensus doesn’t really work. Sometimes some people are present and sometimes they are not. You can’t get the from every person on the team before deciding on something, especially in a growing Open Source community. If you actually want to get work done and grow the project, you need to be able to make decisions.
Selecting a Leader
1 or 3 Leaders
In order to make sure that a decision can always be made, you need to have either one or three people to whom any final decision can fall to if no other consensus can be made.
The purpose is to make sure there can never be a deadlock. If the whole world is an even 50-50 split on a decision, the one or three leaders need to be able to come to undisputed decision.
If you go with one leader, then his/her say is the final say. If you go with three leaders, 2 out of 3 votes is final. There can never be a tie.
Computing Analogy: For those of you who know about it, I’ll use a computing analogy: this is exactly like Raft consensus. You need to have an odd number of leader nodes, and the more nodes you have the slower it is going to be to make decisions. This we keep it to either one or three nodes.
The reason to have only one leader, is the same reason you need to have a leader in the first place, so that you can quickly make decisions and then move on them. The reason to have three leaders is so that you have some extra security against bad decisions. The issue with having three leaders is that you will need to have all three present whenever you need to make one of those decisions that requires top-level approval.
There’s a trade-off that has to be weighed.
The Image of the Leader
The leader that is selected has to be someone that the community will trust to uphold the vision. It should be someone that, if they made a decision, the community would be likely to respect their decision, even if it weren’t for the fact that they are now the one with the vested authority to make that decision.
Responsibility of the Leader
The leader has to be able to be present to make decisions, so the leader needs to be someone active enough to fill the job. This is an Open Source community where we all just put in the time that we can, so this isn’t like a “you have to be here exactly so many days out of the month”, etc. We are a considerate community, I think, and a persons best effort is fine, as long as there isn’t somebody who could do the job better.
If somebody else with enough leadership ability is present that has more time to fulfill the duties of the leader, then it should be considered making them the leader to keep productivity as high as possible.
We can’t require more from the leader than anybody in this community can provide. We all only have the time that we have and making the requirements for a leader unrealistic or overly strict is just going to leave us without one.
This may go without saying, but just to be clear, the leader doesn’t necessarily need to contribute in any way other than leadership. Still, that isn’t to say that having a leader that invests directly in the engine in forms of code, documentation, etc. isn’t really good. A good leader needs to understand the people he is leading and personal experience working in the community is an amazingly good way to do that. Also, the more the leader contributes, the more likely they are to be trusted by the community. Obviously as a technology project, the leader also needs to have enough understanding of the technology so that they can make educated decisions.
But, if the community trusts a leader, and that leader does well to guide the project and uphold the vision, then they are doing their job whether or not they write code or documentation.
In addition to the leader, we will want to have a board of some sort with trustees that have the authority, with a large enough vote, to change the leader if they deem they are not doing their job or if somebody else would do the job better.
This board also needs to have its size limited to an odd number of people that is not too large so that they can make decisions effectively. How you determine the board members and the specifics of how you change/elect the leader can be figured out and I’m not going to say there needs to be a specific way to do that yet, but it needs to be there.
No decision is worse than indecision.
We need to be able to make decisions as an organization and as a software project and we need to have a way to do that. There has been sentiment in the community that I really agree with that we need to decide on what we are going to do and we need to go do it:
We’re looking for unity, where we can “all agree on what the next priority is”. The thing is, groups of people will very rarely all agree on anything, so having a leader whom everyone has previously agreed to make decisions is the way to produce that agreement.
Individuals should be able to take the stance of, “Maybe I don’t specifically agree with this direction, but I trust that the leader is there to fulfill the project vision and I will respect that, and put my effort behind the decided upon direction, for the good of the project”. That is the way that we will be able to work together.
This isn’t about putting one person at the top of the project so that he can be King of the Hill. It isn’t about glorifying the person and making them out to be someone better than anybody else. It is about the need for direction that must come at the expense of trust. That trust will need to be earned, or maybe already has been, but we need to trust someone, or else we are always going to be in a fuzzy state of everyone just kind of working on what they believe in as an individual.
I could imagine an Open Source community not immediately jumping on the “put somebody at the top of the hierarchy” idea. I mean, we’re all here for community as equals right? We definitely are, and the leader will be a peer and a friend to the other contributors just as much when he is the leader as he was before he was the leader. Having a leader will not hurt the community, but will give the community the unity that everybody is looking for. The sense of direction that people can feel we don’t have.
I want to bring up now that I don’t want to just tell y’all what to do. I want to know what you think about this honestly. I want to reach out as a fellow collaborator in an effort to grow this project and bring it to the height that I know it can achieve. We have an amazing community and everybody mentions how nice people are here! What I seek is to bring the community together so that we can accomplish great things.
I honestly haven’t looked into Amethyst’s current organization bylaws. I wanted to put forward what I thought about the design of the leadership purely from what I have experienced in this community. Also, these ideas are not just my own. They are ideas developed over years of collaboration with my partners, brothers, and friends at Katharos Technology. They get credit for backing and influencing me in all kinds of stuff that I do over here apparently by myself.
Please don’t be afraid to be honest about what you think. Let’s do this thing.