Monday, June 15, 2009

Another major update

Last night I pushed out a huge update, and one of the most important ones so far. One of the barriers to entry when it comes to using ActivityBrain and taking advantage of suggestions is being one of the first of your group of friends to use the site. Having the suggestions built into the event creation page is great for utilizing the Brain for immediate event creation, but isn't all that useful if none of your friends have used the site or entered their schedules.

This newest feature takes the Brain one step further, allowing you to create an event, but delay having to commit to a time for the event. This essentially gives you the ability to express interest in getting together with friends for a certain activity, but put off the decision of "when?" and give your friends time to update their schedules or say they're not interested. This is huge, because it allows absolutely anyone to use the Brain without having to question how relevant the suggestions are. As the creator, you can elect to receive updates when someone updates their schedule, so you'll know to check back and see how the suggestions have changed and whether you're ready to finalize the event. Once the event has been finalized, an update is sent out to everyone that was invited and the event can proceed just like it would if you had created it manually. To see a small example of how this looks for the creator, see the tour page for this feature.

Another addition that I'm pretty happy about is the tour page. One small barrier to using ActivityBrain is having to sign up/log in (even though there's no sign-up required for Facebook members), so we decided to throw in a tour page with some screenshots and descriptions of our major features. It's a little raw at the moment, but I'm sure it'll start to look better as we add more features to the site and the tour page; for now it serves it's purpose and hopefully demonstrates the usefulness of the site.

I'm going to stop referring to releases by their rev # since it doesn't really represent an individual release (there have been about 12 revs since my last post, but that's probably only been 6 or 7 releases). Most of my recent updates have been pretty small, still improving on the stability of the site and adding small things that I've wanted to change for a while (for example, when creating an event with friends, you specify the start date/time and an approx. duration, and for entering events that make up your schedule, you specify the start date/time and end time since you can be more specific). I've also rearranged some things on the event detail page so it's organized a little more logically.

Unfortunately, I've only been posting after pushing out major features, but I hope to start posting more frequently on some of the more fun technical details and things I do on a daily/weekly basis for the site. We'll see if I can hold to it. :)

Wayne

Wednesday, March 18, 2009

Mmmm... Braaaain... (Rev. 212)

The Brain offering suggestions based on selected friends.

The Brain has finally arrived to the event creation form! Being able to utilize the brain within the manual event creation form is one of our most important features (and one our site has always claimed to offer), but until tonight it was never actually there. I've put a ton of time into perfecting this feature over the last week and I think it's turned out really really well; I couldn't be more excited to finally have it up there.

One major addition that I'll be adding to this over the next week or two -- and one I think really compliments this feature well -- is the ability to use the brain to help schedule your events like you can now, but put off choosing the actual time until after the event has been created, invites have been sent out, and people have had some time to update their schedules. Combine this with what I released tonight, and we're finally getting to a site that truly has more to offer than any other events site out there, and the site that we've been envisioning since over two years ago.

Normally I'd go off talking about some of the smaller things I did in this update, but I think the brain deserves its own dedicated post... and I'm tired. :-)

Wayne

Tuesday, March 10, 2009

Reminders, Facebook handling, and more! (revs 206, 207, and 208)

So I haven't blogged in a couple weeks, but I have been releasing pretty major updates each weekend; three since my last post. I'm very excited about the work I've been doing, even though a lot of it is behind-the-scenes stuff.

All three of these latest revs have had a lot of focus on improving the Facebook integration. The first two updates in particular improved the retrieval of information from Facebook. According to their terms, we can't store most information about a person for more than 24 hours. Before rev. 206, I was actually breaking this rule and using information that had been stored weeks or more prior (with the intention of eventually fixing it). This actually started to bite me, because people's pictures would stop working whenever they changed them on Facebook. So my first update fixed this, and then rev. 207 fixed a ton of bugs that resulted from rev. 206. I've found it really hard to test all the edge cases that integrating with Facebook introduces, so bugs are pretty inevitable. Fortunately, I feel really good about the latest changes, and all new Facebook code should be a bit safer to deploy without having to worry about bugs.

Tonight's update also had a small Facebook addition. Because I'm not able to store Facebook user information for more than 24 hours, chances are that if you're logging in through Facebook, I'm going to have to reload all the data about your friends. For people with hundreds of friends, this means that the first page that needs this information will take a ridiculously long time to load (I once watched a page load take 3 minutes because it was retrieving somewhere near 1000 friends). I've now added a background task that is constantly polling for Facebook data that hasn't been refreshed in 24 hours and retrieving that information. Now, the chances are good that if you're logging in, your friends' information will be current. This was very simple to add, but I think well worth it.

The biggest user-facing feature I've added is event reminders. This was actually a pretty large task because of all the areas that had to be updated to accomodate it (emails, Facebook notifications, event pages, account settings). This is one of the last of the really major "bring users back to the site" features that I had planned, though there are also a few smaller ones on my ever-growing list of things to implement. Currently reminders are pretty slimmed-down, and I'm actually contemplating leaving it that way. What's really missing at this point is configurability. Currently, we notify you 24 hours before the event. I'm sure a common request would be to allow the user to decide when the notification gets sent, but I don't think this would work because ActivityBrain can't do "instant" reminders. We can only remind you through email or Facebook notification, and those just aren't reliable enough. What good is choosing to have a reminder sent 15 minutes before an event when you only check your email a handful of times a day? When we add text messaging, this might be something to reconsider. For now it's more like a doctor's office calling you the day before a visit... which I find pretty helpful. :-)

The reminders feature also sets the stage for various other Notification options that I've been planning to add to events and Account settings from the beginning. A good example is the option to be notified when someone comments on an event you're attending, or if the creator of the event has updated it since you last viewed. Each of these would just add a simple check-box to your Account settings, and also a way to configure it specifically for an individual event (should you want to contradict what your default account settings say).

The last noteworthy update was fixing a Daylight Saving Time issue that I've been dreading since I launched the site, and reared its head this weekend. While DST is simple from most people's perspectives -- just updating the clocks twice a year -- it's a nightmare to program. I took some time last night to think of ways to approach the issue, and actually came up with something pretty simple that I was able to implement in just a couple hours tonight. I'm excited to finally have this past me.

Next major feature on my plate is adding the brain into event creation. I'm hoping to have that launched this weekend.

Wayne

Sunday, February 22, 2009

Revs 204 and 205

Since my last post I've changed my priorities a bit. While the automated scheduling of local events is still near the top of the list, there are a couple things that are more important. My next handful of major updates will include more ways of communicating with members and keeping them coming back to ActivityBrain, as well as utilizing everything Facebook has to offer to pull in people that haven't heard of us.

A couple weeks ago I pushed out rev. 204, but didn't feel it was worth its own post. As I had mentioned in the previous post, I was going through the logs every couple days looking for errors. Rev. 204 made it so the site will now send me an email whenever there's an error, so I won't have to look through the logs anymore, and I can be more responsive when something does come up.

Rev. 205 was much more significant. I fixed a bug in member creation that was preventing a friend from creating an account. I made some more changes to the log-in dialog, redirects, and how/whether the Sign Up button is presented. We also witnessed a couple cases where people had Facebook accounts but still created an account through ActivityBrain. It turns out that they just didn't see the Facebook option. I've now added the log-in options to the member sign-up page, so even if someone missed it on the home page, they won't miss it on the sign-up page.

A more significant addition in today's update was giving the site the ability to post to a person's Facebook news feed. Currently the implementation is very basic; it only shows up when you create a new event, or if you indicate you're attending an event. I intend to make this much more dynamic in the future, in terms of when we publish to the news feed (taking advantage of more opportunities), and in terms of how descriptive the text of the story is. This is the first step in allowing Facebook to help spread the word about ActivityBrain, which will be really important, especially as we make changes to make the site more attractive to potential members.

As a site that's completely external to Facebook, we're a little more limited than an app built into Facebook (as most apps are). The biggest limitation thus far has been that we can't send "Requests" to Facebook members, we can only send "Notifications." Notifications result in a little red text bubble down in the bottom right near the chat, while Requests result in a persistent and much more noticeable link at the top of the page, and they also generally send an email to notify you that you've received one. Of the various invitations/messages I've sent so far, less than half the people have seemed to notice that they have a Notification, not to mention that people don't sign in to Facebook every day. One addition I made in today's update is that ActivityBrain can now send emails through Facebook (we don't actually know the member's email address), as long as the member has approved this beforehand. I've added a link from the Account page on ActivityBrain to the Facebook page where this can be allowed. If we can get more people to allow emails, then notifying Facebook members of invites or updates will be much more reliable; for now the system still needs some tweaking, but the option is there.

The next feature I'm going to tackle is implementing an event reminder system. This is pretty huge, especially for recurring events, because it becomes easy to forget about the site once you've fallen into a rhythm with your schedule, and then the one time you're going to be out of town you won't remember to update your status. While it's annoying to receive weekly -- or however often -- communication regarding an event, it's better than the alternative of not using the site and having the event page become irrelevant. It's also important to remember that if ActivityBrain didn't provide the ability to create recurring events, then someone would be manually creating the event every week, and you'd be receiving an invitation every time; so a simple weekly reminder to keep your status up to date shouldn't be that much of a burden.

On a similar note, one feature we hope to support in the near future is SMS. The convenience of being able to receive invites and reminders, and, more importantly, RSVP to an event via text message would be amazing. Combine this with a mobile site that makes browsing on an iPhone or other internet-capable device easier, and ActivityBrain will be much more accessible, not to mention that the headcount of those attending/not-attending an event will be more reliable since the burden of having to be at a computer to RSVP won't be there.

I also have some ideas for a major redesign of the home page, but there's currently a lot to discuss on that front, and those changes would probably be at least 6 months out (considering how hard it was to get the current design finalized and live). The list of things that need to be done on the site continues to grow much faster than I can keep up with it, which is both exciting and overwhelming, but gives me a lot to talk about here. My updates have been less frequent lately, but after how hectic things were with ActivityBrain over the last few months, I've been taking some time to relax when I'm not at work. Look for me to be posting updates on the weekends, but less frequently during the week.

Wayne

Tuesday, January 27, 2009

Rev. 203

It's been almost two weeks since my last update, unfortunately, because I've been pretty busy with work and I was out of town all last week for work as well. So, the site isn't quite where I had hoped it would be in my last post, but this week and weekend will be dedicated to getting it back on track.

Tonight's update was very minor. I go through the website logs every night, if possible, to see if there have been any errors on the site. I had 10 or so days worth of logs to go over tonight, and found that a couple bugs were hit by people using the site, so I've fixed both of those (one a somewhat rare case in member creation, another more likely case in event creation). Since launching the beta about 4 weeks ago there have been surprisingly few bugs revealed through the logs (probably just around 5), so I'm pretty happy with how solid the website is.

I also fixed a couple small things on site involving the way local events are displayed on the home page and how the Facebook redirects are handled because I've seen some cases in the logs where it appears that people are clicking the Facebook login button or getting redirected to Facebook and then never coming back, but I can't reproduce it myself. These types of issues are harder to track down because the logs give very little information unless there's actually an error of some kind.

Like I said, pretty minor stuff, but after such a long hiatus I just wanted to get back in the routine again -- pushing out updates every night or so. The next update should be a little more noteworthy.

Wayne

Wednesday, January 14, 2009

Rev. 202, local events

As I stated last night, my goal for the next few nights will be to get Local Events completely up and running. Tonight, with rev. 202, I got a small chunk of this done. Events that are local, meet your interests, and have qualified to be posted in the local events section (more on this next) will now show up on your home page.

My vision for ActivityBrain is for it to be a place where people can come to find reliable suggestions or local events. My definition of "reliable" for this purpose means you can trust that the details of the event or suggestion meet your interests and fit in your schedule, among other things, and that the event isn't likely to fall through. This last point is especially important when posting a local event to the home page, because it's assumed to be an event that requires a large group of people, many/most of whom you won't know. For this reason, we have to assume that most of the people presented with the option to join this local event probably won't; and that fact makes it necessary to construct a small-but-important list of requirements that an event must meet before being posted on the home page.

You'll notice if you create an event, you have the option during creation to flag it as "public." If you do this for a given event, that event now becomes accessible to anyone; even people without an account (if someone links them straight to the event page). Also, by checking the box, you're giving the brain permission to post the event to anyone locally, if it meets the requirements. This is a great thing, because it allows events created by users to become visible to anyone local, but it also prevents any Joe Schmoe from posting a bunch of irrelevant events for everyone to see, which would tarnish the "reliable" image and make the Local Events section something you'd just ignore. It's also great because it helps the brain out. When the brain sets out to create a local event on its own, it has to assume a very small number of the interested locals will join, but when evaluating a local event created by a user, it can assume that a large percentage of people that were invited will join. From there, all it has to do is make sure that there are enough of the assumed-low-percentage locals to fill any potential slots to reach the minimum number of people required for a good game, which is a much easier job than the first scenario.

So that's a little insight into how the automated scheduler will work. Currently, the scheduler isn't running, but I've gone ahead and manually flagged our local ultimate frisbee game as meeting the requirements to be posted on the home page, which I feel comfortable doing since I know we usually have a good group. After a couple more days, the automated scheduler should be running, and should be able to recognize that my event can be posted. If it doesn't, though, I probably won't be flagging it manually anymore.

Wayne

Tuesday, January 13, 2009

First post and Rev. 201

Hey everyone, I'm Wayne and I'm currently the lone developer for ActivityBrain.com. I've always liked the idea of having a developer blog where I can share interesting information about the site, and also, given the high frequency updates to the site, have this serve as a way to post updates about what's been changing and what features are in store.

The Beta version of the site went up on 12/30, and I've been releasing small updates to the site almost daily. To put this in perspective, almost each code revision corresponds with a release; the first version released was rev. 184, we're now on 201. So, yeah, I've been quite busy for the last two weeks. Before launching on 12/30, the site had been in the works as a side project (I work a full-time job) for about 16 months; this explains why the first revision was 184. As you can probably imagine, it was a very long 16 months :).

So before I go into any detail on today's release, let me break down what we currently have live and what my goals are for the site before we start to focus on actually getting people to use it:

What's currently live:
  • Sign up or sign-in through Facebook or as a regular ActivityBrain user
  • Full account setup (friends, interests, schedule)
  • Event creation
  • Suggestions
Suggestions are to ActivityBrain as search is to Google. It's what makes ActivityBrain special and unique; and, if we're doing our job right, it's what will bring people back. It takes up about 1/3 of your home page, you can't miss it. Even though this is in the "live" category, though, it will never be finished; just as Google will never "finish" search, it can only be improved.

What needs to be done:
  • Local events - our other big feature: public events; posted or created automatically by the brain.
  • Suggestions in event creation - similar to suggestions on the main page, only customized based on your selections in the form (friends, event duration, etc...)
  • Communication - more important than any ad campaign; if we can't bring users back, then there's no point in marketing to them at all. This involves better Facebook integration, more Notifications/emails (simple "nudges", event reminders, and updates about the site). This will come with improved ability to opt-in/out of all message types.
  • Other things to pull users in and make the site useful/relevant regardless of the state of their account. Thinking specifically of the user that has just signed in for the first time, or the friend that was invited to an event but has never accessed any other area of the site.
These are simply goals for a "marketable" website. I've got a list of 50+ things that I need to do, and there's always more.

Revisions 200 (last night) and 201 have both focused on the last point. Prior to rev. 200, a user signing in for the first time would only see "account" suggestions (add more friends, update your interests, etc...). Given that Facebook sign-in increases the chance that you'll already have friends on the site, my latest updates have been to provide suggestions based on the interests and schedules of your friends. Given that they're your friends, hopefully you have some things in common. The other hope is that as these suggestions are provided, they'll give you incentive to finish in your account setup to make them more relevant (tell us where you live and it narrows suggestions to local friends, etc..). I also updated the suggestions to not include activity-types that are in your Upcoming or Local events, since that implies that you already have the option to participate in that type of event in the next 7 days.

Tomorrow I plan on focusing on local events or communication. I'm excited to be able to focus on local events because our local ultimate frisbee game might qualify to appear in that area, and it would give SLO users something to see from the instant they sign in the first time; which is a huge huge deal. I may not be pushing this out tomorrow night, though, as it may be a 2 or 3 night task to get it all working the way I've pictured it. I plan on posting every time I push out an update to the site, but we'll see if I can stick to it.

Until next time,
Wayne