Really, the issue is that the news feed is broken. Even following a relatively small number of people and projects (10 and 29 respectively) my news feed is dominated by the many updates (issues and commits) from a couple of popular projects. The result is that things I might be more interested in from smaller projects are effectively invisible.
Facebook has done a really good job solving the problems of information overload and would provide a good model. The most important step is to group updates from each project. Right now half of my news feed is comments on a single repository. Those should take up only one or two slots.
The next step is to filter according to some metric of "interestingness." This is more challenging, but clearly solvable using machine learning (let us tag posts as interesting or not interesting to train the classifier).
I'd love to see GitHub make the news feed more useful. It's currently the most unpleasant part of an otherwise nearly perfect experience.
+1. Having users micromanage their commits to their repository because of fear of losing "popularity" is not the solution. Automation is the path to the future, let the computer aggregate the content for us and display a cleaner news feed.
Excellently stated. Up until a week ago, I was following around 200 projects on Github. I recently went through and unfollowed almost all of them (I think I left about 5-10 that I really care about). I did all this because the news feed had become completely useless for the reasons you describe above.
It broke when they changed the API, but by then I had found http://defunkt.io/dotjs, which allows you to execute any code in a ~/.js file for a given domain.
So I put $("div.news").hide(); in my github.com.js and instantly had a more relaxing, comfortable life.
I completely disagree with this part of your post:
Facebook has done a really good job solving the problems of information overload and would provide a good model.
But I do agree with these:
The most important step is to group updates from each project. Right now half of my news feed is comments on a single repository. Those should take up only one or two slots.
The next step is to filter according to some metric of "interestingness."
My advice is do it and share the hack. I think the best way to find trouble spots in your UI is to find out what people are writing hacks to work around.
I disagree. I don't have a button on Facebook for "bookmarking someone." Facebook's news feed has managed to keep the news feed relevant despite massive social changes in my lifetime Facebook usage (everything from high school, to college, to working as a professional software engineer).
A new button will not fix Github's news feed problem. Making the news feed more relevant to users will.
'I don't have a button on Facebook for "bookmarking someone."'
Facebook and GitHub live in different problem spaces and may need different solutions. You probably don't have one friend that literally posts 200 times more posts than your average friend, but GitHub commits can very easily have this sort of pathological distribution. They're going to need to deal with that in a way that Facebook does not.
Pathological distributions can really be a pain in general. This sort of spiky, long-tail distribution can wreck up a lot of good plans.
For that matter, contra some suggestions about "machine learning" solving the problem I'd lay a few bucks that "commits I'm interested in" is so pathologically distributed that it is effectively unlearnable itself.
Facebook has metrics like, how often you browse that person's page, how often you comment on that person's post and vice versa.
But could you apply it to GitHub where all you care about in Project X is Feature Y or Issue Z?
I guess the easiest way is if you could somehow figure out that the pages the User was looking and commenting on all related to one thing, such as CSS issues or problems with C pointers and only display those issues. I'm not sure if that is doable but the people at GitHub probably don't have the necessary resources to devote to implementing this (at least in the near future), whereas Facebook has more engineers, resources, data, and time to throw at the problem.
Facebook's news feed has managed to keep the news feed relevant despite massive social changes in my lifetime Facebook usage (everything from high school, to college, to working as a professional software engineer).
Maybe for you, but my experience is exactly the opposite. I find the Facebook news feed to be just about as useful as the Github news feed... which is to say, totally useless.
The problem, as I see it, is that G+, Twitter, Github, etc. all make the same fundamental mistake... assuming that "connecting" to an "entity" means "I want to see every update from/about this entity." So, I "friend" somebody on G+ or "watch" a project on Github, now I'm on the hook to see all their updates. But there's NO particular reason to think that the above assertion holds. At best, "friending" a person or "watching" a project says you're more interested in it/them than a random project/person.
These "event stream" implementations really need one or both of two things: The ability to specify more about what it is you're interested in, and smarter ML algorithms to figure out what to show you, based on both declared (or, for that matter, inferred) interests, and social connections, OR the ability to specify filters to exclude "stuff you don't want."
If I had to choose, I'd ask for the latter. Better filters would go a long way towards giving us control of our streams / news-feeds. I'd like, for example to be able to say "I don't want any pictures of cats with funny hats, regardless of who posted them, in my stream." Or, in the Github example "I don't want any commits from project $FOO in my stream."
If I'd seen much (or any) evidence to suggest that the machine learning stuff was smart enough to give me a truly meaningful feed without manual tweaking, I would care less about filters, but so far I'm just not seeing it. Facebook appear to try, but my feed there is still full of crap because they assume too much based on who I follow, not what I'm interested in.
I agree 100%. This has bugged me for a while. I use the watch button to basically favorite something that I don't want to fork. The way the current timeline operates right now is useless to me. Perhaps a way to show activity without regurgitating the commit log in a timeline form. sort the watched repos by recent activity and then when you click on it show some things that happened via ajax.
>Codeshelver lets you clean up your GitHub watchlist by storing repositories you would like to remember on your shelf. You can tag any repository and search for it later on - until then it won't spam your dashboard timeline.
Codeshelver helps you find that one project that you had seen ages ago, which you did not want to follow (watch), but perhaps use somewhere.
Agreed. There are many times I just want to sort favorite repositories that I want to refer to later. I've thought many times about building this using the Github API (like what Favoritizer does for Etsy) but then you would have a whole different website for browsing github.
Agree with this. I started out using the watch button as a "watch" button, and ended up using it as a "Fav" button. Having two separate buttons would let me have a list of favorite projects, and a news feed at the same time.
There is a bunch of ways to distinguish important updates from the others. First, prioritize updates from projects I am or have contributed to. Second, updates from people close to me in the social graph (i.e. the people I watch on GitHub or people who belong to the same organization as I do). The frequency and size of updates should matter too - an usually silent project with a big update should have an advantage over noisy projects. Filtering out typical bugs (or commits/PRs fixing them) from the top priority ones should be fairly easy too - all the information is already there (comments, labels). Finally, you can go insane and start analyzing the actual code or even use NLP for commit messages/pull requests/bugs and make decisions based on that (for instance, prioritize projects that use similar tech as I do, changes that mention me or touch the code I've created or touched recently).
I think you are overthinking it. We don't need a fancy AI solution to the relatively simple problem of "busy" projects drowning out quieter ones. I don't think it would work very well and, anyway, we have different ideas about what's important in an update.
Just collapsing updates from busy projects by showing the few most recent updates and then cutting it off with a message like "(+ 12 other commits and 3 issues; click here to expand)" would get it most of the way there.
This is a very real problem, but I'd argue it's a problem from the side of the watcher rather than the watched. As a GitHub user, there are two kinds of repos I care about: projects I'm active in, and projects I'm vaguely interested in and might be interested in keeping an eye on. For the first group, I want constant notifications. Let me know anytime anyone does anything. For the latter, I don't care, and probably actively don't want notifications.
Right now, GitHub groups both of these use cases into the same 'Watch' functionality.
That, I can believe. I don't watch any repos, though, so I don't know. I care about the ones I contribute to, because I forked them and issued pull requests, so I want to know how they're doing. Apart from that, I don't really care about watching other people's development live.
Watchers are (often) the people who use the software you make, and the exact kind of people you want to keep interested in your project. They're the source of useful bug reports and feature requests, and you want to keep them involved in the project as much as possible. I completely understand OP's intent.
Sounds like a brogrammer to me. If I am watching a project I usually give input to the pull requests and bugs. To me watching is being a bit more involved than a simple 'like'. Sometimes I feel like too many projects are based around the idea of "I will only develop it if people are watching it" instead of trying to solve a real problem for the author and going from there.
Well, there's also the responsibility thing: if I have (say), 10K watchers, I would feel responsible to keep mySweetProject running and maintained. Whereas if there were 0 watchers, I'd feel fine about ignoring it.
I totally agree with the other poster in this thread that said the idea of "following" and "hey this is a neat project" is conflated in github. I'd like to favourite projects for further observation/interest, but I have no real desire to watch their progress day by day.
> Customers would be more likely to use your project if it were more active, not less.
Right, but if I'm a customer of your simple project, and a customer of Node.js and Homebrew, then I will never see your update and issue notifications that might actually have more relevance to me than Node or Homebrew because those two have near constant updates.
On the other hand, If I'm a customer of your project that is just as popular as Node or Homebrew, I'll be receiving hundreds of notifications from your project every day. You'd be effectively spamming me.
To fix this problem, we're asking if we could find a middle ground that lets the simple project with a dozen forks and 40 watchers maintain about the same level of notification real estate as the popular project with 5,000 watchers and just as many forks.
I'd rather see the watch button replaced with a Google Reader style interface for projects. Let me see that Rails has 97 unread commits, Twitter Bootstrap 32 unread, and little forgotten project has 2.
"Little Forgotten Project has two updates? Cool! I'd forgotten all about that neat idea, let's see what they've been up to."
I don't even really look at my feed. There's way too much going on in it for me to really keep track. I basically "watch" repos to bookmark them. "This might be useful in a project at some point; let me make sure I can find it later." Currently watching 92 repositories.
Yep i use watch as bookmark, and as such the feed is useless. There needs to be a Star/Fav thing, and leave watching for important stuff.
I've often wanted to write and broadcast a note or short msg (not a commit), that is deemed more important than a commit, about project goings-on and updates. Would be good to announce properly when there are serious changes or new features. Perhaps done with tags, but it needs to be prominence some how, it is all lost in the commit feed atm.
So I began to aggregate my commits into batches to push in the middle of the night. Unfortunately, that really slows me down.
How is pushing a bunch of commits that much different from pushing each commit? Slows him down.. what??
It's already been mentioned but this use case for watching a project is called a bookmark.
I watch projects where I actually care about and want to see the changes. Because I'm doing actual useful things and the social aspects of github help me do that.
I'm not on github to engage in some kind of social network circle jerk popularity contest to collect the most "watchers". I know a lot of people are and it makes them feel really important to follow a bunch of projects and pretend they're "in the know" or part of the project just because they clicked the watch button.
But every site doesn't need it's own different kind of bookmarks, that's a stupid waste of time. Other startups do it to drive viral growth or to "increase engagement" or some other BS reason. Github drives growth by being useful to developers and other collaborators. As soon as they start sacrificing power for people collaborating on code projects in order to satisfy the fanboys they risk losing their primary draw, the good projects that use github because it's useful.
I doubt this will happen, although I can definitely see why they would add an in-site bookmark to appease this crowd since they apparently don't know how to use client side bookmarks.
My client side bookmarks tend to be a bit of a black hole (or possibly a thunderdome). Many things enter, but very few find their way back out to my eyeballs.
Perhaps I have bookmark-itus. I bookmark many things I may find interesting later, or want to remember. I end up searching through my bookmarks more often than not, because there are so many of them.
As to watching, I use it to get notified if a project I am interested in has updated, made changes that are meaningful to me, or has come back to life after a long silent period, or if it is something I want to look into later but don't particularly want to have the full update feed for.
That last part would be fulfilled handily by an internal github 'star' or 'bookmark' system. There are stars for gists, why not projects?
Yeah, I think I might have been too harsh on the star idea.
I absolutely have bookmark-itus, but because of that I have a good bookmark system where I can set a date or interval for it to remind me that the bookmark exists. I think I took this idea from the GTD tickler concept.
I can see the use case for "tell me if this project has done something interesting (determine that magically) but I don't want to see every commit cluttering my feed" type features on github. Just don't break the feed to do it. It's clearly a secondary use case for the feed.
I'm also not sure if this use case is something actually useful rather than just stimulating to users. A site using this idea and github integration along with some Zynga math to optimize the dopamine dispensing combined with twitter, HN and the rest of social news would make sure that I felt like a hacker and never actually produced anything.
I agree that breaking the feed would be wrong. The feed should include everything. I also feel that github would be well served to provide an alternative mechanism to 'remember' projects so users can stop trying to shoehorn the functionality of the feed to suit that need.
I agree with the bits about how coding to gain watchers is silly, but I disagree about how people watching loads of stuff is bad. I follow interesting people, and my number one source of finding cool new things is looking at the stuff they follow. It has nothing to do with fanboyism, and everything to do with discovery
It's not that watching loads of stuff is bad, but that editing or messing with the feed of changes from those watched projects in a facebook way is bad.
I also find the social aspect of github useful for discovery and there could be some new useful features around that use. But certainly not by breaking the watch feature to optimize for passive bulk watching.
Not sure I agree completely, "watch" is when you're actually interested in what's going on in the project. "Fork" is when you want to contribute with code changes. Maybe a "Like" button to show your appreciation would be nice?
I would really appreciate it if notifications were aggregated by thread and updates by project.
I generally only care that a thread/project was updated. If I'm interested, I'll go in and look at what's new. Letting me know more than once just makes it harder to actually keep track of things you care about.
>Eventually I noticed, that it would only create an update for each push, not for each commit. So I began to aggregate my commits into batches to push in the middle of the night. Unfortunately, that really slows me down.
He's doing what the Facebook news aggregator does by default. All pushes/commits can generate only one news feed item for a certain time frame: "Author made N changes/updates/commits"
To play the devil's advocate, though, perhaps this should be a part of the learning process of using Github. It would be instructive to all watchers to see what kinds of mistakes a good dev makes (or just be reminded that a good dev makes mistakes as well).
Just to play devil's advocate: this does force people to be more mindful of their commits. This is a good thing. Each commit should be a cohesive, logical change to the codebase. Such that if the change is later undesired, simply reverting one commit should completely remove it. This is very good practice for when you use git at your day job. In this scenarios, your 'watchers' are your coworkers, and they will rightfully get upset if you clog the repo with a bazillion haphazard commits.
It might force the developers to commit more in the granular Git way, but it doesn't force bug reporters and discussions to be more mindful. Looking at my timeline, and following Backbone.js and Handlebars, about half my feed on any given day is discussion from 2 or 3 bugs on each of those projects.
So even though the committers might be mindful, doesn't mean all the users of a project are.
I agree this is the underlying issue but I disagree with your solution. One of the last big problems none of the popular SCM's has really fixed is separating commits that are "checkpoints" for the developer from those that should be used as documentation of the project history (e.g. "Closes bug X").
There are times I end up doing a commit just to switch from my laptop to desktop. In Mercurial I end up with a million commits with the message "merge" b/c I really just did a pull of someone else's code and it forces you to do a commit just to get synchronized with the master (even with no meaningful conflicts).
I wish I could nuke all those ugly checkpoint commits and bundle them into a single commit with an intelligent comment when I push to the main server, but that's just not the standard workflow.
To add to kenmazy's reply: another way git allows you to have "checkpoint commits" is to create a new branch. Commit against this branch all you want. Then when you are done with your work, return to the main branch and do a "git merge -squash <yourworkbranch>". git will pull all the commits you did in the feature branch into the main branch's index. You are then free to commit the whole shebang into the main branch as one commit, with whatever commit message you want.
I've never used Mercurial, so I don't know if it has any equivalent to that.
I suppose this (and the other responses) is about what I would expect: it's possible in Git if you know what you're doing. Based on my very limited Git experience, I would have expected it to take more flags to accomplish :) (It probably is possible in Mercurial in some way, too.)
But then that gets back to the original problem: how do you get people to do that so github watch lists only contain worthwhile comments?
git rebase -i can handle your last request (interactively combine/remove/move history).
In fact, git can also handle your second wish by having simply creating a "sync" branch pointing to that extra commit, then when you switch to between your laptop and desktop, pull the sync branch, check out the commit (apply it to your working directory), then switch back to the master branch and continue working (the commit never appears in the master branch).
Git rebase would handle the "forced commit on merge with no meaningful conflicts".
What I see is that it is incredibly rare for a project to lose watchers. It seems that people are using GitHub's watch feature as a bookmarking service.
On a side note, GitEgo tracks two[1,2] of paulasmuth's GitHub repositories, and neither of them has "lost lost around 30 watchers by the evening." He may be referring to other projects on GitHub, but even Twitter Bootstrap (the most popular GitHub project), almost never loses watchers. Granted, these projects could all be gaining just a few more watchers than they are losing per hour, but the net effect is almost always a gain each day.
I think the real problem is that watching a repository doesn't engage a user in its contents. Watching commit messages fly by isn't as entertaining as reading 140 characters someone groomed for public consumption.
Maybe the problem is how much value that you put on the amount of watchers you have? Is it somehow a bad thing that someone doesn't want to see all of your updates. Would those people somehow serve value to you had you not annoyed them and they just kept watching.
In my opinion as git being a tool to transparently see any and every thing changing. If you some how want less than that, perhaps you shouldn't subscribe to (aka watch) a "repository."
Ultimately, maybe the right thing for github to do would be to group nearby commits, but still summarize them and easily let you dive into them. This is code after all and almost any time I've updated a dependency, it's been because of the small details. In my accounts of the companies I've worked for, subscribing to the repositories we use, seeing every commit has served a lot of value. Just watching because it's some popular repository did not.
I have never used my dashboard, because I watch so many repos. I use it as a bookmark function, but it'd be great if they replaced it with "bookmark" with a default option of not "following" the updates.
There are a lot of interesting projects, but I only want to follow those immediately relevant to what I am doing.
Yeah, agreed. I thought for a while that the Watch button would be a good way to keep track of what's going with open source projects I care about. But I've found I pretty much ignore the news feed completely, there's just way too much noise there.
I suppose there's varying degrees to which I care about a project. I do want to know about every commit on the ones I'm actively involved in. On the other hand I'd be way more interested in like high level summaries for the projects that I'm just a user of.
I don't use the watch or follow feature of github, as it seemed kind of pointless to me. The main strength of github is collaboration, not discovery. If it were up to me, I'd remove the more SNS like actions as they just seem like an afterthought.
I wouldn't mind seeing a version of a the Github dashboard where my feed was grouped by projects.
I don't think having a timeline where you see all commits of all projects sorted by time really helps. The commits in project A don't effect the commits in project B, so they do not need to be viewed in sequence or relation to each other.
Let me have a dashboard where I can see all my projects then some recent/popular issues and commits to that project, keeping all projects separate.
Don't add a like/favorite/bookmark button, I think that's too many options. Watch already says "I'm interested in this", so we don't need additional buttons to express the same thought.
I disagree with post almost entirely. This idea of "like" validation is flawed. Your true validation is recognition from the community, a "watcher" doesn't equate to a pat on the back, anymore than a "like" does. It's an inconsequential empty token. We need to get away from this notion of a like means anything more than an twitch response to something. It doesn't mean a person will ever return to your page if the project (or page or whatever) ever does anything again. Gaming the like/watch system is so easy, folks typically know this is hardly an indicator of usefulness except in rare circumstances.
I'm building a repo bookmarking tool as a google chrome extension (for github). It's in early alpha at the moment as I only really get to work on it on the weekends, but it'll be ready for a public beta in 2-3 weeks.
In the mean time you can checkout the video of it working or if you're feeling brave download the alpha version of the extension.
How about a "Deploy" button instead, Yes I like to "Watch, and "Share" is oh so social, but what would be much more useful is a "Deploy" button that would take requirement.txt, config.pl, manifest.yml and all those other artifacts, read them, and help me get the app running on the server, the instance or cloud. I can deal with the constant notifications that come with "watching" a github repository - what I want is a simpler path to Deployment.
My proposition is that the watch button means you only see important updates, like when the new major version of Rails is released. The importance should still be decided by the repo maintainer though. I don't agree with bundling commits proposition, because it is not controlled by the maintainer and will not necessarily capture the stuff that is important and present it in a meaningful way.
IMO the one who watches should be able to control which updates he sees in his feed, not the project developer (which is what the article and may commenters suggest). For some projects I'm watching I'd like to see every commit, issue update, etcetera. For others I'd only be interested in new tags that are created. The project developers don't know what I'm interested in. Only I know.
Github has terrible management for this and even for notifications. I'm a member a large organization with popular projects and the entire UI has become completely useless. I think a Mute button for people, projects and issues would work great. I'd have no problem clearing out things that way.
Totally agree. My workaround for this at the moment is to use Yahoo Pipes (http://pipes.yahoo.com/pipes/) and filter my GiHub feed which I then read with an RSS reader. Not ideal, but it gets the job done.
You don't collect watchers. People watch your project because it's interesting to them and they are _actively_ involved. If it is, it doesn't matter how often you update, only the quality of your updates matters.
It's not twitter, stop playing the "follower count" game.
Yes, I agree with this completely. It got so annoying that I either needed to start un-watching repos, or just ignore the news feed, and I chose the latter.
If only there was a way to just 'star' projects without having them take over the news feed...
What about only publishing notifications for tags? Most people only use them to tag releases (or RCs) so the creation of a new tag might be the sort of thing people would be interested in knowing about.
No. I watch projects i find interesting. I usually dont look at the noise in my feed or something. I rarely visit github, only if i get linked to it or for browsing code. So, its totally fine (for me).
I'm so glad someone else noticed this. I started out watching a few essential projects I used on a daily basis, and added the feed to my Google Reader. Eventually I started using the "watch" button as a "like" button and my feed became unmanageable. I just stopped watching the feed. I wish there was some way to have only some of those items show up in my feed.