-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Problem: C4Social only addresses a sub-process in the development method #11
Comments
Elaborating a bit further.. So the C4Social is currently more or less like this:
For 3) you want to make it contributors as easy as possible, and entice them to pick any problem that matches their interest. For 4) you facilitate both contributors and maintainers. The contributor wants the satisfaction to see their code quickly integrated, and the maintainer wants to be able to do this with minimum workload. These steps are great, requirements clear. Imagine in a project this process works exceedingly well. In quick succession well-scoped validated problems are implemented + merged. Project evolves at blazing speed. Then suddenly these Problems are filed:
Their may be clear community consensus on this, so the problems are valid. However, the solutions are not so obvious now, because scope creep cannot easily be undone. E.g. a solution may be to drop be certain features:
In many cases there's no way back. To mitigate somewhat the process might be altered to:
Or, similar, but more explicit:
In this process:
|
What you wrote here, and what some folks in the diaspora dev community wrote has given me a lot to think about here. I have a few thoughts to list here. First, relating to @aschrijver's post above, there does seem to be a need for organic leadership to arise within the c4 model for projects as complex as social platforms like Mastodon, etc. This could allow focal points for considerations such as UX, security, etc. And they could surely be chosen and removed by a consensus process. Second, to the point about chunks of work being of epic (i.e. multi issue) scope, this is going to be a likely scenario for this kind of software. There needs to be some attention put in by maintainers to not allow other commits to disrupt an epic that is in progress. Not sure exactly what that looks like. Maybe the epic contributors should be looped in to review changes to code that is in active development by the epic. Third, I do think we should stop merging upstream PRs. There is a bit of surprise factor for an author if they suddenly see their commits in main on another fork, which we should probably avoid. I think that if a PR looks stalled, but is otherwise a valid change we could invite the author to write an issue and PR into a c4 fork. That might be a bit extra overhead, but perhaps within the purvue of a maintainer's duties. But anyways, this is some really good discussion, and I look forward to continuing it 👋 |
TerminologyC4 is the protocol we're discussing and C4Social is this community that is creating magic through evolution of the Fediverse. In other words, C4Social is applying C4 but is distinct and will be evolving to suit this community's needs. BDFL is benevolent dictator for life, but @aschrijver what are the NFR and DM you mention? Getting to the points:
(to be cont'd) |
@ledcoyote Do you mind creating a discussion topic for this or a separate problem statement? We had some discussion also in a c4social/diaspora issue IIRC. |
Continuing to @aschrijver's second post...
|
Sorry, should not just drop acronyms. DM is Direct Messaging and NFR is Non-Functional Requirement. I just read the long response on the Diaspora forum, and it has a number of direct matches to this issue, most importantly the type of project for which C4 may be best-suited. And a whole bunch of additional and very concrete examples where applying C4 principles would be problematic for other project types and the complex development workflows that have emerged for them over time. As you say this Problem is a top-level one that should be broken down into constituent parts, and I advice to start with the Diaspora feedback and thoroughly distill it, because there's so much to address there. On the whole I agree with most of the points there (though they are somewhat harshly formulated to my taste). Where I mention Design you should read "all the other stuff that needs attention other than coding + merging". I find your attention is too heavily focused on developer experience at the end of the pipeline, rather than community processes and other stakeholder needs. In no way do I advocate for "grandiose design" in a waterfall kinda process. Adding my design step to the process is just conceptual. To make it work a lot of elaboration should happen, so that comprehensive guidance is available (and most likely more steps to the process).
Want to address this briefly, as it is also mentioned in the Diaspora comment. A rather large and active community is an objective and in that many people are end-users, non-technical. You want to keep them away from all the technical discussion. But in C4 this is intricately tied to the Problem issue they filed, which must be elaborated enough for a developer to start coding on it. Diaspora separated these technical / non-technical concerns with a Discourse forum, and I think that is a good approach. Re:Design. I mentioned 'Definition of Done'. Once you close a Problem you have an issue and PR with potentially a ton of discussion in it. Most of that may now be irrelevant, but some decisions that were made along the way are crucial. These must be extracted, summarized and somewhere documented (e.g. in an Architecture Notebook, or a UX Styleguide, etc).
This is different than what I meant to say. Yours is a technical concern. I refer to returning to a more comprehensive feature set, and removing features that are used by some users but are not core to what the product stands for. Ideally you would never come in this place, but making it as-easy-as-possible to merge PR's can land you there.
You could squash the whole process in a single 'implement' step, but leaving steps out either makes the process messier, or you get the additional requirement to document how one should 'behave' in the step. The processes are there, whether you explicitly define them or not. And the same holds for design. Without explicit design steps your codebase still reflects a design (though probably one that looks more like an ants nest, than a modern skyscraper 😜 )
This makes me wonder once more who you see as the community? A PR deals with code. You might get feedback from coders, and that's about it, I guess. |
@ledcoyote wrote:
Yes, fully agree. In my still simplified process extension there's a handover from non-technical to the more technical design phase. In that phase there can be still community involvement (by all stakeholders), but some voices now carry more weight.
I think C4 just doesn't cut it, and that what you are trying to add to it is more than an "addendum to C4". I would propose that you define "C4Social" as a separate process, a fork of C4. And FFLOSS communities based on it are C4Social communities. As communities evolve they contribute their lessons-learned to the C4Social process, helping it mature. One more remark on applicability of C4 as it currently stands: IMHO right now it can't tackle complex existing projects such as Diaspora or Mastodon. Trying to do so sets yourself a huge task, and enormous workload. As I mentioned above, FLOSS development processes emerge over time, based on what works and what not. My advice would be not to try and take on the role of community manager AND allround maintainer of 2 fullblown mature FOSS projects AND the design lead of a new development method / protocol. Where C4Social may work is in combination with a brand new federation project. At the start of such project you have mostly a developer audience. Things are still simple and easy at the first beginnings. C4Social may be great to progress rapidly towards implementation of a MVP (Minimum Viable Product). You might say that using C4Social at the start of a project is overkill and just amounts to extra work, and you are probably right. But maturing C4Social is part of the objectives, so in this case it is ideal to explore both project/code + process at the same time. Along the way you can figure things out, such community-building and how that relates to the process. |
@aschrijver wrote:
When that post went up, I examined it closely. Today I responded with links to all of the Issues it generated. I agree about the tone but knew that the contents were valuable and would be tracked.
Tunnel vision on developer experience was apparent when I visited the various sites and repos pertaining to C4S with other roles in mind. There wasn't much for an end-user or podmin or anyone besides myself so created some issues around that after identifying a bunch of problems. I'd like to share a list but they're basically with the readmes and the way the repos and org are presented.
I don't want to make many rules very early but the way I envision it, there'd be threads everywhere they need to be to support discussion around a PR. It's also not lost on me that the software we're working on builds such spaces as well. It's too much to worry about so I think we're just trying to keep it simple with the kernel that helps code and community operate together. Maybe C4's is like RISC?
This is what excites me personally and I'm keen to figure out how to explain it to others. I've coded a lot in the past and built things and I've experienced burnout when the why wasn't there. Never before has there been IMHO as comprehensive an approach for tackling the hardest problems. (I've created like 4 issue trackers outside this project with good results) That being said, the tech can be tricky and building a community is to me an almost total mystery but maintaining (even two massive projects) under C4 is pretty easy. |
Had another thought about this issue today because you're right in that C4 isn't comprehensive. If C4 is a kernel, then what is userspace? Is that a place where more extensive design system calls are made into that implementation diamond? Re-focusing on this problem definition, I agree that it's accurate but am less sure of the value. Putting it another way, if we're not sure the C4 hypothesis will work but haven't conducted a trial (for say 6-12 months) then what is the value in pursuing another hypothesis? |
I agree a trial is in order. But what to trial?
Note that while we talk about Process, it is actually about the combination of both culture + process, and in community-driven project culture is at least as important. I believe that choosing 2) you either risk doing no justice to that, or you'll make concessions to C4Social just to make it fit for the case at hand. I'd personally opt for 1). |
C4-tools began out of the need to make PRs more easily and I see that as a greenfield project but I'm still not sure how to address the wider culture question. If you can put it in problem form, I'd encourage you to make issues in c4-tools otherwise I'd like to take this to https://github.com/c4social/c4social.org/discussions. If it's to be a meta-protocol then I'd choose a completely different name than C4. It'd be more our version of 0MQ's Community Guide. To give you an example of a problem I find interesting and in C4-tools scope: I was looking at Hometown but since my personal GitHub account already has a fork of Mastodon, I couldn't do anything in a linked and sensible way there. GitHub doesn't make it very easy for a developer to contribute to more than one fork. I'll report that to them but it does give me a reason to search for a better PLATFORM. |
That is a very limited scope. If that is indeed the desired scope, then this issue might be closed. C4 will then be some building block that can be 'dropped in' to a larger process in any one project, but you don't have to consider that larger process (which will differ from project to project) to be in scope. Question is if such scope is realistic. It may be. Work then becomes focussed on how integration can be as seamless as possible. Trying to 'drop in' in a complex project such as Diaspora is then a way to find where friction occurs, and improve accordingly. I still think, if this were the approach, it is a tough road ahead and you should repeat the drop-in process in multiple different project types / organizations / cultures to hone the building block to something that is intuitive enough. But I had the notion that you were aiming - just like the original C4 - to offer an end-to-end process, but with the USP's (Unique Selling Points) that it was tailored to support Social + Federated apps, plus the communities involved in creating them. I.e. a holistic vision.
Finding the new, improved C4 process (which I prefer to call "C4Social" process) can be seen as a greenfield process. But the accompanying federated projects that are your 'helpers' to evolve the process are anything but greenfield. In my proposal for a trial both the process + the app would be greenfield. That would ease maturing and evolving both side-by-side according to objectives and requirements you set out to achieve. It would provide more control. The contributors to the app would gradually familiarize with the process and be active helpers to improve it. In the other trial option, evolving based on mature app projects, you'd have 2 separate audiences: One interested in the app, and another more process-oriented crowd interested in evolving the process.
Culture is a strange concept. It emerges over time. There's only so much you can do to "actively build a culture". You can depict / envision how you'd like you ideal culture to be. Based on that you can create a Manifesto, describe a set of values. Then while building procedures and setting rules continuously reflect how it would impact culture. And then - after introducing them - 'measure' afterwards based on actual dynamics you observe. This also is much easier with a fully greenfield approach. Dropping C4 into a mature project will immediately lead to big disruption, and more of a 'crisis management' to get all the wrinkles figured out.
As implied above I see Process + Community evolving alongside each other. So these are not independent artifacts to deliver (if your scope is holistic).
This example highlights another requirement to consider carefully: What is the importance of facilitating forks as well as possible in C4Social? A lot of complexity in maturing C4 can arise from the position you take here.
Option 4) means that forking is done like in any FOSS project, where the fork maintainers make their own decisions afterwards. I would opt for option 4, because that aligns best with a MVP (Minimum Viable Product), and leaves options 1) and 2) to be addressed further up the roadmap if there's a need. This means in the case of forking Diaspora (if forking mature project is in scope), the fork would be limited to getting a copy of the codebase. All the process + cultural aspects of the original project would be 'ripped out' and refactored to a native C4Social implementation. With that done the fork starts to be operational, and can be considered more or less greenfield. You'd still be able to do upstream PR's (and adhere to the particular process + rules in the upstream project). |
The subject of this issue came up in chat recently and led me to write a Proposal to be part of Social Coding Movement. |
What C4Social now defines to me seem like a sub-process of the development method: the more technical-oriented flow of how maintainers and contributors can ensure a larger role for community involvement.
Yesterday I looked at a bunch of projects that use C4 in some form or other, and they had some things in common: the project deliverables (i.e. the product) were all quite technical components, and as such the target audience were mostly Developers who - when reading through a list of Problems - would be able to more or less accurately weigh and understand the ins and outs, pros and cons, and impact of validating a problem and adding an implementation to address them.
C4 to me seems tailored to this type of project + audience.
The weight of the process is in the first 2 steps now: Problem definition and validity check. This is not just technical, but there's a world of product development considerations involved here, especially for products where the UX/UI and evolution thereof are an important part of project success.
These first 2 steps encompass requirements elicitation and product design, where the interests of a range of stakeholders that are part of the community need to be considered. Doing this in an issue that is later closed may not cut it (though a 'Definition of Done' may ensure that user and design docs etc. are updated).
Having different stakeholders with their own needs, plus the requirement for the process to be 'Social' to me indicates that these two steps are more involved: there's a larger process to them. Some examples:
These are a bit contrived examples, but who wins? You might argue that in the 2-step loop a consensus is reached, but it is quite involved and many of these considerations may just not be understood by a non-technical audience. There might be a need for rules where one stakeholders arguments can overrule a majority.
Other example of more intricate process is where a Problem is too large in scope (an Epic really, not just a User Story) and needs to be broken down, maybe even into 10 or more sub-Problems. Now you have dependencies on your hands that need to be managed. You'll get a backlog that needs to be prioritized. And while you are implementing them, new and independent Problems may become related and there's even more dependencies to consider (e.g. to avoid considerable tech debt).
I am not advocating to write complex sub-flows to the process. Maybe capturing these things in some clear rules and guidance is all that is needed. All I'm saying is that the single diamond decision-making step is now the place where most "Social community engagement" takes place.
Update: 2 more concrete examples.. imagine that both Signal and Keybase were both C4Social projects.
The text was updated successfully, but these errors were encountered: