Step 2: After the Vision Comes Leadership đź‘Ą

This post continues from ECS Designs and The Vision of Amethyst.

We Found a Vision! :tada:

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 :busts_in_silhouette:

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” :muscle: .

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 :heart:

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 :rocket:

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 :shield:

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 :heavy_check_mark:

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 :+1: 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 :thinking:

1 or 3 Leaders :question:

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 :superhero:

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 :triangular_flag_on_post:

Time Investment :clock1:

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.

Other Investment :man_technologist:t3:

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.

The Board :clipboard:

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.

Summary :spiral_notepad:

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. :wink:


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. The leader’s job would be to address this.

I disagree. In a for-profit company, this would be mostly true, because the developer’s time could otherwise be spent on projects that align with the vision. However, since everyone here is a volunteer, the choice is often between receiving work towards a project that does not align with the vision and not receiving any work at all. Naturally, we should try to nudge people towards a certain vision, but if someone just really wants to improve 3D support in Amethyst, why stop them? As long as the work doesn’t interfere with the vision, we’d be getting the work for free: a commitment of developer hours that would not otherwise be made.

Of course, as I said, the work should not interfere with the vision. On that, I think we are in agreement. A half-baked merge that undermines the stability of the engine would not be a net-gain to the code-base. However, such merges can be judged on a case-by-case basis; not rejected outright. There has to be room to experiment, even if the general focus is shifting to polishing a more narrow feature set.


Yes, I agree, I just didn’t make that clear enough. If it doesn’t hurt the vision that is fine. In the case of 3D support it would only be a problem if the changes necessary to support 3D would create an instability in the rest of the engine in order to support the changes. The instability that an attempt to solve for 3D could cause might go against the vision, but if they could be worked on in parallel without a negative impact to the vision for a stable 2D engine, then that’s great. :+1:

I’ll update that part to make it a little more clear.

1 Like

Hi Zicklag,

We are a non-profit, and our governing structure is quite clear, including the process to join the Board. I’m the Executive Director; @erlend_sh @khionu and @mralve are also active right now.

I’m happy to talk about any help you’d like to provide in this area, and I’ll do my best to answer questions you have about what is currently going on with the project. Please do read our by-laws, though. And remember, some of us live in Seattle, myself being one, and our lives are not exactly peaceful right now.


I will, but where can I get them? I thought they would be on the website, but I couldn’t find them.

I totally understand. Please don’t take this as me pointing fingers at anybody or saying that you need to do a better job. I’m also not saying that you need to put more time or work into this project: I don’t think that project work that isn’t providing you a living should ever become more important that life stuff.

I’m not, don’t worry. I’d be delighted to have new/more people get involved and take on more of the governance. Right now, we’re focused on finishing the Legion integration. After that, we’re going to stick to quality of life improvements, bug fixes, and small, achievable things. No more big projects that drag on for months or years.

They are on the Washington Secretary of State page for us, or you can download them here. Though now that you mention it, a copy on the website would not go awry…

If you still want to get involved in the administrative side after you read that (and the Code of Conduct if you haven’t yet), feel free to ping me on Discord or here. As with most open-source projects, there’s plenty of opportunities to contribute. =)

This is an awesome discussion. :heart:

I think a good point that @zicklag made (unintentially, I think) is that it is time to establish visibility and clarity around roles, leadership, the non-profit organization, and other developers.

  • The existence of the US non-profit Amethyst Foundation needs to be discoverable. The only places I’ve been able to find that mention its existence are the text of the donation page and the author field of our Cargo.toml files. It would also be helpful to have a short explanation of what a US-based non-profit is and why this one was created and what is done with it.
  • The roles inside the non-profit should be clear in relation to how they interact with the community. I have chatted with @fletcher about the non-profit, even read the bylaws, and it still isn’t clear! I haven’t found any documentation even mentioning responsibilities of the roles with regards to Amethyst the engine, or who even who fills the roles. Granted, @fletcher just listed them in this discussion, but it needs to be visible–and that means there should be a list on the web site or the repo stating handles and roles. Even better would be an explanation of the roles/responsibilities and extra detail like pictures, bios, and links to relevant stuff.
  • The roles outside the non-profit should be clear. I know “Trusted Contributor” and “Member” exist outside the non-profit, because I have held each of these for a short time, and I’m not part of the non-profit. What are the responsibilities and privileges of these two roles? It isn’t clear to me. These roles also need clear descriptions and a list on the web site or repo telling who is in which role.**
  • The boundary between the non-profit and everything else should be clear. What does it mean to be in or out of the non-profit? Why would someone want to join the non-profit itself? How would they go about doing that?

**Implementation tip: We have the option to leverage GitHub Amethyst organization teams for some of this. You can be a member of multiple GitHub teams, so you make teams that map exactly to roles without disturbing the existing function-based teams. Then you can link to the team’s member list from whichever web page or repo document describes the role’s responsibilities. Then just by managing who is on the the teams on GitHub (which you can link permissions to that you want to manage anyway), your list is kept up to date.

I don’t think this addresses the level of contribution @zicklag was talking about. Accepting bug fixes and minor improvements is always going to be fine. It would be silly to scold or discourage people for trying to contribute something that wasn’t part of the current big effort. We should welcome any little contribution we can and then encourage folks to join the real effort.

When it comes to the sustained volunteer effort, people are attracted to a strong sense of direction. No one wants to try to make sense of a chaotic organization going in all different directions, nor try to start something meaningful without some indication that they will be supported in getting it finished and shipped. The choice is between attracting volunteers to a focused effort or not having a clear direction and watching people come and contribute some little thing and leave because they don’t find a cause to join. Lack of purpose (big or small) kills an organization.

I went through the pattern of coming, looking around at the chaos, and leaving a couple times with Amethyst in the past. I have the same need for purpose as everyone else. This last time I muscled through the chaos and made my own purpose, which was essentially “anything I can do to nudge Amethyst towards sanity so hopefully it becomes a real thing”. First colocating example assets with the example code, then CI and these very meta discussions to improve the organization itself. Manufacturing a purpose is a start, but just like anyone, I need a shared purpose to be able to maintain the motivation to keep contributing long term. I need us to pick a direction as much as anyone. It wouldn’t be Amethyst not accepting some crazy contribution of mine that would get me to leave, it would be Amethyst not picking a clear course of action so I can have shared purpose and people to work with towards a shared goal.

I applaud @zicklag’s efforts in this area. When I read well-reasoned posts like these, I feel more engaged in Amethyst. Making it so our leadership visibly functions in a way similar to what @zicklag describes is a fantastic request. It means we have an organization worth caring about. I’m not implying anything negative about @fletcher or anyone in the foundation. I hope all of us are willing to admit we are not perfect and we need to keep iterating and improving on the organization itself. A healthy organization will make for a healthy project.

If anything, I see this post as an endorsement for the current leadership to make more visible decisions, make it clearer how they will do the leading, and where they will lead us to.

@fletcher, this is a great opportunity for you and the others to increase your visibilty and lead out. Without the ability for the group to see and hear each other in the same physical space (a common condition these days), we are going to need some other kind of frequent and intentional communication of your thoughts about the big picture, and how that translates to what we’re doing. In addition to some direction setting, I suggest some broadcast-style communication at least weekly (This Week in Amethyst comes to mind), and frequent visible interactions between that.

Oh, and in the time it took me to write this it looks like you’ve already gotten started! :tada:


To be honest, a step I was going to take after the legion port was concluded, but I figured it would be good now, as well, while the discussion was kindling.

I intend to do what I can to help us back on track, so it is very gladdening to see other people with similar ambitions. It’s a big project, we can use all the help we can get.


:heart::heart::heart: (One heart wasn’t enough)


I think this would be really great. Something that outlines, “this is the role and responsibility of the Executive Director, and the Board member”, etc. We need to start making it clear to the community and to ourselves who we really are as a group, and what roles we fill in the group.

When it comes to responsibilities, as has been voiced before, we just need to be careful as not to design responsibilities that place stress on the individual with the responsibility to do more than they are able to find time for.

I agree, @khionu touched on this a bit and I think it’s a practical step:

One thing I would like to do is try to keep things a little more open to the public even when it comes to some of these discussions we have on the forum that were created as #internal posts. When I was made a Trusted Contributor there were a lot of these that I hadn’t seen before that were very insightful. Lots of them probably made sense to be #internal posts, but I think a some of them could have been made public and helped give the community more insight into the honest state and function of the organization. Maybe even start them off private if necessary then make them public later.

If we had an aggressive community that could take cheap shots or start flame wars on some of these topics, then it could make sense to keep the private, but posts like the Why are you here? post I think was a really good one to have public. I just want to be conscious about being as public as possible about everything and making a real effort to expose who we are and what we’re doing.

I like that idea.

:heart: :+1:

:+1: Hopefully solidifying this and getting this public is going to help us give people the motivation necessary to finish that off.

:+1: That’s really great to hear. :smiley:

1 Like

After the roadmap I was suggested to make, I will include this in an adoption-ready document that uses my team change suggestions. That said, I want to give people time to catch up on this discussion before I push any further.