Loomio

Project management at diaspora* - or: what the heck am I doing here?

DS Dennis Schubert Public Seen by 50

Okay folks. The last time I ranted around is not that long ago and sadly, I do feel the need to rant again right now. But this time, I post my rant here on Loomio since that is the platform the diaspora* project decided to make decisions on. And this time, I would love to actually get your feedback on my rant.

I need to write about project management, diaspora* and how I feel about project management at diaspora*.

Status Quo

So, who is managing diaspora* at the moment? That's actually a very good question. We have that semi official group called "core developers" which is basically defined by the group of people who have push access to the main repository. That list is really short: there is the old core team, which still has push access but they are obviously inactive. Besides the inactive core team, there are four other people with push access: Florian Staudacher, Jonne Hass, Steffen van Bergerem, and me.

Florian (aka raven24) unfortunately, got eaten alive by some real world stuff and is way too busy to be active. Jonne is doing great Ruby work, is great at reviewing pull requests and also great at producing ideas on how to solve issues fast. He seems to be rather busy with other stuff as well, but luckily he is still contributing a lot! Steffen is doing amazing frontend work, which is really appreciated, and he has a great sense of UI/UX. He is also a very active contributor, but like all people involved here, he also has a private life.

So… who am I?

Good question, thanks for asking. I am a software engineer, working on creating software and building solutions for various problems and needs. I work in a small team, where all of them are fellow engineers. We do not really have a manager in that team, which is a decision made by design. We do manage ourselves and we talk to each other to exchange ideas on what we think is important. When we have done our planning, we create tasks in our management system for everything and start doing our work. Other developers in the company will also pick some tasks and join the efforts. This works incredibly well, since that company is very carefully picking their candidates, and the ability to manage themselves is a hard requirement.

As for diaspora+, I quite frankly have absolutely no idea what I am doing. Some people might know me as an administrator of Geraspora, which happens to be the largest pod. Some might know me as a guy who works at that company. Some might know me as a diaspora* core contributor. And some might know me as an incredible asshole. All of these opinions are actually right and depending on who you are and how you interact with me, you might get a different type of reaction.

I used to be a contributor to diaspora*s frontend and backend back when the old core team was still active. As diaspora* was converted to a community driven project, I started doing some more advanced project maintenance work. Nobody ever asked me to do that, but nobody else stood up to do that work and back then, I felt pretty confident about doing it. Right now, most people probably think of me as the person doing all the project's meta stuff. That is, planning the general development, building releases, trying to prevent the project from evolving into something that's not desirable by the community, … you get the idea.

Basically, one could say that I am diaspora*s project maintainer. I never got elected into that role, I don't officially consider myself to be that person, but based on the work I do and the way people look at me, that seems to be a rather suitable "job description".

And honestly, I do write a lot of code at work and doing project management is interesting and a fun challenge. I never got any professional training on how to manage projects (or people for that matter) but in the past, that seemed to work out well.

What's in my head?

I want to give you an insight on the stuff that's in my head. Err, I mean, what's inside the diaspora* part of my head.

  • Release 0.6.0.0 has been in the pipe for a loooooong time and we really need to ship it. What should be included in the release? Should we stop after the federation rewrite? Should we do some more extensive database optimizations to maybe improve the performance? Should we try to make the chat 100% stable, pretty and fancy? Should we push the API development? How much work will get pushed into the tasks and how far could these features delay the release?
  • How are we able to rewrite the entire federation without breaking stuff? How can we test the stuff when it's done to ensure that we in fact did not break stuff?
  • Wahhhh, there are 400 open issues and 30 pull requests!
  • When we're done with the federation, how can we publish documentations on that? Should the documentation contain only an implementation description or should we try to publish an actual protocol specification to make it reusable? Will anybody even care?
  • How can we get the fundraising supported user migration feature implemented without breaking stuff? How can we ensure the user data stays safe? How can I ensure the contributor will actually come up with a solution that everyone is happy with?
  • How can we make sure that the company who is wiling to implement post editing understands the complexity and issues behind that and how can we make sure that the solution actually works?
  • Woah, look at all those issues!
  • How can we make our project attractive for new contributors? The bug mash Monday was quite a success, should we start that again? Should we try to work with more organizations like RailsGirls, should we try to get our project involved in campaigns like Outreachy, …?

This list is highly incomplete. But you get the idea. There is quite a lot of stuff going on in my head and since I sadly have not discovered a way to stop the time, I only can spend some hours a week to work on that. Besides the planning stuff above, I also do pull request review and similar stuff, which is also consuming an insane amount of time (trust me, reviewing a PR usually takes almost as much time as writing the patch in the first place - if you're doing your reviews carefully.)

How do I feel?

Most of the time, contributors rant about how bad they feel in GitHub, usually paired with some personal attacks against other individuals. I'll try to be a bit more neutral here.

(Note: when I am talking about "the core" in the following paragraphs, I am talking about the currently active core team. The projects goals have rapidly changed after diaspora*s transition into a community driven environment.)

I felt pretty good with my role at diaspora* in the beginning. It was nice, a lot of people seemed to enjoy my work and I did enjoy the work of our awesome contributors. Nowadays, I feel like we (as in the core team) have to make a lot more tough decisions. diaspora* used to be a playground for everyone, but now we are actually trying to get a stable piece of social networking software out, which requires us to focus on a lot of refactoring work, instead of being able to implement new features that may be important for our users.

The reasoning behind this is simple: we cannot build new features on a codebase that is buggy and not maintainable, so we need to make the base shiny before we can add more toppings. Everyone who is into software engineering will agree with me here, but users have a different point of view. They simply do not care about how we implement stuff and how happy we are with that, they care about our results and the stuff they can do with our project. Balancing those two requirements is incredibly difficult. Luckily, the core team agrees on diaspora*s role, which is not building a fancy social network with all the features one could imagine, but building a platform to do experiments on. A platform to learn how distributed social networking actually works, where issues arise and how those possible could get solved. This is not the first time someone has written that down, there are a lot of responses on Loomio from various core members stating precisely that.

What does this mean? It's actually rather simple: if there is cleanup work and feature implementation work to do, do the cleanup work.

And now the tricky part: diaspora* is not only driven by the core team, there are some open source contributors as well. Those contributors do not really care about our plans, they do have their own plans and requirements and they work to get them done. That is absolutely great, but there are two main issues: First, the core team will not get much contributions to the refactoring work, since usually, that's boring stuff and implementing features is much, much, much more exciting. Second, contributors implementing new features will not get the full attention by the core team since they are busy doing what they think is more important. That's a very problematic situation and building an environment where building new stuff and cleaning up old stuff can be done in parallel is very hard.

Communication?

I do my very best to put everyone in a situation where they can work comfortable. Both sides, however, have to deal with some trade-offs. If two teams (the "features" team and the "maintenance" team) are working together, there will be some kind of overhead caused by communication, rebasing code, … you get the idea. Most of the time, this works just well, but sometimes, we fail hard.

Yesterday, I've found myself in that very exact position. A contributor refactored some code because they thought this is important and they were apparently working on some related code. At the same time, we have our large federation rewrite going on, and the very same components were already entirely refactored there. I thought the mentioned contributor was aware of the fact that we are working on that, which they were not. We ended up with a pull request that is now completely obsolete and we (as in "the core") have to reject it to avoid conflicts with the new federation base.

At the same day, I have closed another pull request by the same contributor. This pull request was already some days old and other core members have been merging and reviewing stuff in the meantime, so I assumed they were not interested in merging this. I took a look at the changes and in my opinion, those changes were not justifiable since they basically replaced a code block in which two assignments were repeated by a function that removes the need to repeat the lines. However, the commit statistics showed that there was absolutely no loss of LOC and adding another function that gets used exactly twice in the same file with only minor adjustments is absolutely not a reason for me to refactor that part. There was no further description provided so I assumed there was no further reason to add that function, and as a DRY optimization, this was simply invalid. PR closed.

Said contributor was not … not very happy about my decisions and the way I communicated them. I had also included a general note about what I think would be more important, especially since said contributor has provided some public timeline about the stuff they are going to implement and I really would love to see that functionality in diaspora*.

The other PR, which is also unmergable since refactorings to that module were already made in the federation rewrite, things got even weirder. I closed that with a simple "this is already done" and an added "please communicate before working on such stuff". As said before, I know that the contributor is aware of the fact we are working on the federation base since they already have contributed to some discussions to that exact project, so I assumed they would check if somebody has already done that or is planning on working on that. They have not checked that and they claimed that we should have informed the contributors about the fact that we are already doing this. Quoting that contributor:

> Of course, I can write you every day begging "please tell me, aren't you by chance working on anything that crosses my work, you great team-member majesty, don't consider me too bothering". But that's not how healthy projects work.

Currently, I do have a lot of contact with almost everyone and I know what everyone is working on. For sure, I do not have all the details, but I know that Benjamin (aka SuperTux88) is working on some photo- and notification-related federation improvements at the moment and I could totally have prevented that contributor from starting in the first place. I expected everyone to use our IRC channel as a communication tool and ask if somebody is already working on a project before starting a large project. Apparently, my assumption was false and we have an issue here.

I can haz valid feedback pls?

So, personal insults and totally pointless exaggerations as quoted above are not helping anyone. I will get pissed of, they will get pissed of, no work will be done anymore. What's the point of this, really? Fighting each other is totally fine if you want to destroy the project, but that's certainly not my intention.

If you feel like calling me names, fine, go ahead. I don't mind. You'll probably make yourself look like an idiot, but that's not really my department. I can handle that. In fact, I'd prefer if you'd attack me than anyone else on the team since I am not sure they would take it so lightly.

But hell, if you think I am doing something wrong, tell me what I am doing wrong. My crystal ball is broken these days, so I really need your feedback. I am not a professional project manager, I am an engineer trying to lead a project in my freetime. I have no idea about best practises and I have no clue on how we can solve these issues if you are not able to tell me what the issue is. Don't expect me to read your mind and get pissed of if I fail to do so. That's bonkers.

There are a lot of possible ways to deal with such issues. For example, we could use a tool like Trello and ask everyone to their personal plans, the current project and done projects to a board. That way, everyone could see what people are working on. We could reintroduce some kind of short, weekly meetings where everyone talks about what they are working on and what they would like to work on.

There are many possibilites. But you know what, so far, I thought we can handle our project without the need of dedicated management tools. Right now, I feel like we should really talk about how to manage this project. This is the only option we have to avoid further conflicts and people leaving out of frustration - including me.

So, if you have read this far, I want your feedback (yes, really, YOUR feedback!):

  • Do you feel comfortable with me doing the project maintenance? If no, who would be a better match for this role?
  • Are there any parts of my work that you think are great and I should spend more time on that?
  • Are there any parts of my work that you think are unhelpful?
  • What would be the most comfortable and easiest option for you to learn what others are doing to avoid conflicts?
  • Anything else is welcome, too…

Thank you!

F

Faldrian Tue 17 May 2016 10:21AM

Okay, but as far as I can see contributors are not assigned to issues (unless they are part of the diaspora repository team) - so it will not work the way we need. :)

DS

Danyl Strype Wed 18 May 2016 3:36AM

I'm a fairly new user, although I've been following diaspora on and off since the original KickStarter. I've made some fairly scathing comments about diaspora on my blog/ social media. Basically, I'm one of those users who are functionally illiterate (as far as code is concerned), and who value new/ shiny features over stability/ maintenance stuff we don't have to deal with :) It's great to read this explanation of what an open source project looks like from the perspective of a core contributor, so thanks @denschub for writing this.

I do have years of experience trying to work with teams online however, and I know how hard it can get. Sometimes adding another tool (eg Trello) can help, sometimes it just adds another ritual (and set of login credentials) to the already complex process of becoming a new contributor. I think it's great that @denschub has opened this discussion, so the pros and cons off adding new tools or processes can be evaluated thoughtfully before any action is taken that could prove to be a wild goose chase.

One thing that's been really helpful for the team I work with on permaculture.org.nz is monthly meetings using Mumble (it's like IRC with voice chat). Hearing other team members' voices reminds me they are people, not just random online entities that push text at me, and it removes a lot of the ambiguity that exists when all you get is text (is it sarcastic or sincere?).
One voice chat session can resolve something that could otherwise take weeks of patiently exchanging text (whether by email, IM, social media, pull request etc), and in my experience it's the least frustrating way to make complex decisions about project management (which collaboration tools to use and for what, and how to manage relationships between core contributors, casual patchers, and the user community). Mumble may not be the ideal online conference software, but it works for us. Its advantages are:
* simple to learn, especially for anyone who already uses IRC
* simple to set up (download, install, set-up wizards runs on first boot)
* client software is available for most platforms (GNU/Linux, OSX, Windows, Android, iOS)
* requires very little processing power and bandwidth at the client end, due to not trying to handle video, and using a central server (like IRC) instead of more experimental P2P networking (eg Tox)

M

mia Wed 18 May 2016 5:59PM

I think this post is a good way to go forward.

Here are my 2 cents:

One suggestion for the communication: Ask, don't assume!

For example on the [rejected PR}(https://github.com/diaspora/diaspora/pull/6834):

. Sorry, but you are aware of his work

You could have asked whether he knew this or what the reasons were to do this PR anyway.
It also would have been enough to say

Sorry, we won't merge this PR because somebody is working on the refactoring (and the links you gave).

"You should have done this or that" is not very nice. Phrasing it as a suggestion or question could help.
It would probably hard to find somebody who could communicate for you. So maybe you could just asked for a second opinion when you are about to write something that could come across wrongly (Rejecting a PR).

What you wrote under "Status Quo" is important for people who want to contribute. Can this information be found somewhere else like on the wiki? It would be helpful to see who is working on what but I am not sure where or how to do this.

If somebody wants to do a lot of work, like Comrade Senya more coordination would be better. I think the suggestion of Strypey is quite good. Talking in a (bi-)weekly online meeting could help understanding the expectations of the core team and the other contributors.

You have raised so many question in your post that it is hard to answer all of them or to keep track of the comments. Maybe it would be good to discuss them separately. "Should we use a tool like Trello?" could be discussed and voted on.

Do you feel comfortable with me doing the project maintenance?

Yes. I think you are doing a good job setting priorities and you have a good overview.

DU

Deleted account Fri 20 May 2016 4:35PM

Hey, Senya, I'm sorry you wasted your time, but SuperTux has already refactored large portions of it.

and my answer:

I'm sorry, Senya, but this PR is absolutely wasted work. @SuperTux88 has refactored large portions of that code already

I think we got lost in translation. I know understand that you meant "I'm sorry, Senya, but this PR is absolutely wasted work." in the sense of "you wasted your time doing this work" but it could also be understaood as "it work is waste/garbage". And knowing your very frank way of talking, it's not dfficult to understand the sentence the second way.

Good luck teaching an Aspergers guy how meta communication works!

So you have an ASD? Well, that explains a lot. But if you know you are an asperger, I suppose you have been diagnosed hence, there is a very low chance that you do not see a psychiastrist. If not, you should do so. Most autists can learn how to communicate without saying exactly what they think.

Because this is the only problem here. When you say:

Maybe I should start my texts with a "Do not read between the lines, you won't find anything there."

you completely miss the point. You are used to say exactly what you think without measuring the consequences on other's feelings. The problem is not that people will read between lines, the problem is they will read exactly what you mean. And it can hurt, even though you're not always able to understand why.

So, as you seem to be open to suggestions, here are two:

  • when you review code on Github, just stick to the technical facts; people don't want to know what you think about them or their work when they contribute; they want to know :

    • is it acceptable?
    • if not, can it be improved?
    • in what way?
  • maybe it's time to open up the core team and accept new members that will be able to communicate in a better way, to introduce new developpers, to guide them so that you do not have to do all the review work alone.

CS

Comrade Senya Sun 22 May 2016 12:06AM

I've just checked the code of conduct.

I think that the Dennis's comment really violates the code of conduct ("Trolling or insulting/derogatory comments"):

I really appreciate your effort, but please don't move code around just to get some PRs for your crowdfunding campaign (at least thats how it looks to me at the moment). I do understand that you want to have stuff to present to your supporters, but maybe start at doing the work you initially planned to do...

Though my further comments may be considered as the COC violation as well.

I guess, we should all stop doing this, because this document here for reason.

If COC was violated by mistake and unintended, then person must reconsider their behavior. And if COC was violated deliberately or keeps getting violated repeatedly, then this problem must be brought to the community level discussion.

M

mulkurul Thu 26 May 2016 10:35PM

It is very easy to misunderstand online communications with strangers. A vast amount of communication is paralinguistic. The online 'bandwidth is severely throttled. Respect to denschub for trying to detoxify this unfortunate situation. And to all of you for your work.

JD

Julian Dumitrascu Fri 27 May 2016 5:17PM

Hi!
Who wants to talk about these things in a Hangout On Air?