Have you ever wanted to keep a closer eye on the time you’re spending in a specific category or activity throughout the day? This week we rolled out a new beta feature that makes it easier.
If you have beta access enabled (see below for how to do this), you can turn any productivity, category, or activity report into a live-updating timer widget, simply by resizing the window small enough. You can then place this widget off to the side (or on a second monitor) and continue about your day. As you build up more time, the widget will update and show you your current status. You can create several widgets and position them however you want to create ad-hoc productivity dashboards.
Some things you can do with these widgets:
- Keep an eye on your time spent in email throughout the day
- Compare two metrics, like time spent on software development vs. time in meetings
- Turn your productivity score into a game, how high can you make it go?
Enable beta access: To try it out, you’ll need to make sure you’re in our beta channel by going to your account settings page and checking the “Beta features on” checkbox.
Once you’ve enabled beta features, just go to any report page and do the following:
The update frequency is the same as the rest of the RescueTime reports. If you’re a RescueTime Pro user, the widgets will update every 3 minutes. If you’re a free user, it’s every 30 minutes.
Isn’t this a really weird interaction model? Yes. It is. We’re eventually going to find another way to make it more discoverable. These widgets are a brand new way to interact with RescueTime, and we’re still playing around with several of the details. In that sense, the easter-egg treatment feels fairly appropriate.
All the standard beta feature disclaimers apply. It’s brand new. And there might be some bugs we haven’t caught yet. We’ll also probably change this up a bit over time as we get a better understanding of how people are using it.
We’d love your feedback!
What do you think of this new way of keeping an eye on your time? Does it help? What things are you using it to keep track of?
A really quick sunset, the kind you see in the tropics. REALLY quick. I’m thinking: tomorrow. This being the kind of sunset where no new data is accepted from these old client apps.
We have new plugins for both Firefox and Chrome that replace the old. They have been out for quite a while now, and the old one has been de-listed for a long time. Here’s where the new one is (links to extension galleries):
I imagine this affects no actual person, only zombie systems that are enjoying harassing our site, but if you are a person or sensitive “good” zombie currently using the old plugin, please switch to the new one.
IF you are an old plugin user, you can follow these steps and keep your old data:
1) Open the full dashboard on our site from the plugin: https://www.rescuetime.com/dashboard
2) Click “settings” top right and set an email address for yourself, and add the password
3) Delete the old plugin from your add ons/extensions list
4) Add the new one https://www.rescuetime.com/browser-plugin and register using that email address
We’re big fans of IFTTT (If This Then That), the awesome web utility that glues all your online services together via recipes that you create. You can use it to do all sort of things, such as:
- Save articles that show up in a Google Alert for your name to Evernote
- Backup pictures you post to Facebook in your Dropbox account
- Update your Twitter profile picture when your Facebook profile pic changes
- Text yourself the weather every morning
- Save your Foursquare checkins to Google Calendar
One of our users recently asked us about integrating RescueTime with IFTTT, and I think it’s a fantastic idea.
RescueTime Pro users can send themselves alert notifications by email or via a popup on their computer. Wouldn’t it be great if we could let those alerts act as triggers for events in other applications? Imagine the possibilities.
We’re exploring what would be involved in an official integration, but in the meantime, you can use Gmail to bridge your RescueTime alerts with IFTTT actions. Here’s an example based on our user’s suggestion of piping the timestamps of the alert notification to a spreadsheet so he can track the time of day he triggers the alert. For this example, you’ll need a Gmail account, an IFTTT.com account, and a RescueTime Pro account.
If you’d like to jump past the step-by-step, I’ve shared the completed recipe on IFTTT.com here.
Step One: Create a RescueTime alert, make sure it’s set to notify you by email.
If you’re a RescueTime Pro user, you can create alerts for time spent in any category or productivity level. We have one around the office for “More than 5 hours of Productive Time”. You have two options for how to be notified, either by popup or by email. You should make sure the “by email” box is checked. (whether you want to leave the popup notification checked is up to you.)
If you’d like to sign up for a RescueTime Pro account, you can do so here.
Now, let’s head over to IFTTT.com and create a recipe…
Step Two: For the trigger, choose the Gmail channel, and select the “New email from search” trigger
In the “search for:” field, put the following:
Note: You’ll have to tweak the subject line to match whatever type of alert you created. If you’ve received an alert in your email already, it would be a good idea to try that search string out in Gmail first and make sure you’re getting results from it..
Step Three: Choose an action
Here’s the really fun part where you get to be creative. Choose an action from the list of action channels. For the spreadsheet example, you can do something like this:
Now, when my alert triggers each day, I get a line that looks like this appended to a spreadsheet in my Google Drive.
That’s it! Er, almost.
One minor annoyance is that the “DeliveredAt” timestamps that IFTTT uses are in the format “January 17, 2013 at 05:48PM”. Google Spreadsheets have a hard time parsing that into a useful date or time, so it’s a bit difficult to do much with, like create a chart. Nothing that can’t be fixed by a couple spreadsheet functions, though.
You can extract a parseable date with:
You can extract a parseable time with:
Now, you have two columns you can use as the X and Y axis in a chart, like so:
I’m curious, how many of you use IFTTT? What types of things actions would you like to take based on your RescueTime data?
update: One of our users just pointed out that the formula above was broken because of WordPress converting the straight quotes to curly quotes. I’ve fixed that and hopefully everything works correctly now. Thanks Eddie!
Over the past few weeks, we’ve been testing some new designs for our weekly summary email reports. We wanted to streamline the information a bit and provide more context around how you were spending your time. After several iterations, we’ve arrived at a version that we’re pretty happy with (and hope you will be, too!)
Here’s a rundown of what’s new in this update:
You can see how your time has changed compared to the week before.
We really wanted to make it easier for people to understand what has changed for them over the past week? Was there a spike in productivity? Did you work extra-long hours this week? We now compare the total time logged, productivity score, and goals to the corresponding values for the week before last.
Get more details about when you are the most productive. (Pro users only)
It’s great to know what your average productivity is, but now you also see some extra details. You can see your most productive day, as well as the most productive time period. These are currently limited to our Pro customers only since some of the calculations are a bit heavy. Free users can still get this information, but they’ll have to click thorough to the website to view it on their dashboard.
Goals display has been re-worked.
If you are tracking your time towards specific goals, they have been given a visual refresh. It now should be easier to understand, at a glance, whether or not you’re meeting your goals. If you’ve missed them, you can see how close you came. For pro users, you can also see how this week’s effort compared to the previous week.
We’d love your feedback. What do you think of the new email design?
To all Kindle Fire users: just a quick post to let you all know you can now get RescueTime for Android directly from the Amazon Appstore without having to go through alternative marketplace hoops.
RescueTime for Android works by noting how long you spend in your mobile apps and phone calls, reporting back to you your efficiency score, top distractions and categories right on your mobile device. There is a handy stopwatch tool for manually tracking things like meetings and exercise, and you can set a productivity score for each activity as you log it.
If you also have the RescueTime desktop application installed, you’ll be able to see your mobile time right alongside your other logged time:
Here’s the listing: RescueTime for Kindle Fire
Of course, users of non-Kindle Android devices can still get RescueTime for Android from the Google Play store.
We’ve been pretty busy lately trying to add some new features before the end of the year. Here’s a recap of some things you may have missed:
You can now sign up for RescueTime Pro using PayPal
We just added a support for PayPal as a billing option for RescueTime Pro users. We’ve gotten lots of feedback from our users requesting it, and we hope it will provide an alternative for users who can’t (or don’t want to) use a credit card. You can read more about it here.
New ways to use your RescueTime data
We set up integrations for two third-party services, Beeminder and Geckoboard. With Beeminder, you can import your RescueTime data to to automatically track your progress towards a productivity goal in Beeminder. With Geckoboard, you can display your RescueTime stats alongside your other business metrics on a custom dashboard.
Updates to offline time tracking
A few months ago we made some pretty major updates to how you can log offline time with RescueTime, but they came with a rather annoying constraint: You couldn’t manually go back and enter time on days where no no computer time had been logged. This was, by far, the most common complaint about the new interface. The issue was due to some technical constraints, which we eliminated last week. Now there are no restrictions for when you can enter offline time.
Overhaul of our search system (with much better performance)
For a long time, pro users have had the ability to do keyword searches, but recently the performance had really started to suffer. We made some significant changes to our search architecture to handle the extra load. These presented some pretty interesting technical challenges, which required a more creative solution than simply throwing more hardware at the problem. If you’re technically inclined, we’ve summarized the experience here. For most users, however, all you need to know is that it’s way, way faster than it was before.
New weekly summary email design
This is jumping the gun here just a little bit, but we’re in the process of rolling out some updates to our weekly email. We’ve reworked the design to make it more digestible, and added a few new data points so you can get an even richer understanding of your time. We’re rolling it out to our Pro users first, and then all users over the coming weeks.
More to come in the new year
We’re excited about these recent updates, and have even more planned for the next couple of months. Stay tuned!
We think RescueTime’s metrics are pretty valuable on their own, but when you put them next to stats from other systems, they get even better. That’s why were excited to announce our new integration with Geckoboard. Geckoboard lets you easily create customized dashboards that bring together metrics from a variety of sources, so you can keep a finger on the pulse of your business (or your personal life).
We worked with the Geckoboard team, and their excellent Developer Platform to create four widgets:
Your Daily Productivity Score – Show your RescueTime productivity score for the current day, see how it changes over time.
Today’s goals – See the current status of your RescueTime goals for today.
Time per category by day – See the time spent in a specific category by day over the past month.
Compare Two Categories Over Time – Compare time spent in two different categories over the past 30 days.
This opens up some pretty interesting possibilities to juxtapose different data sources. For example, here’s what my personal dashboard looks like:
In a single view, I can easily: monitor my Twitter mentions, see the state of my inbox, keep an eye on a weight-loss goal I set up with Beeminder, track my steps and floors climbed while wearing my Fitbit, and keep tabs on my time spent on the computer. By having all the data in one place, some interesting things jump out. For instance, today I’m not being terribly productive on the computer, and I can see that I’m in danger of falling off my Beeminder goal, so perhaps I should take a break and go to the gym? But then again, I see that I’m not spending as much time as I’d like on software development, so maybe I should just buckle down on that instead? Decisions, decisions. But now that I can see everything in one place, the tradeoffs are much clearer.
Similarly, here’s a look at our Team Dashboard: (Note: For managers with a RescueTime Team account, the metrics will be an aggregate rollup for all members of your team.)
This lets us keep an eye on more ‘system health’ metrics for our entire team. How’s traffic on the website? What are people saying about us on social networks? How productive are we being? We also included a graph comparing our overall time spent on software development to time spent in communications and chat (which is a ratio we’re constantly working on improving).
We’re really happy with how these widgets turned out, and are looking for ways to add even more in the future.
Read more about this over on the Geckoboard blog.
If you don’t yet have a RescueTime account, but would like to see your time on your Geckoboard dashboard, click here to sign up.
After many requests on behalf of customers– especially users outside the US, we are happy to announce we support subscription to premium service using PayPal.
PayPal payment choice is available at signup time or from the billing page for existing accounts. You can upgrade from free plans, or convert from credit card payment– it should support all account transitions.
Teams can pay using PayPal as well. Because the subscription is managed by PayPal and requires your approval for each change, to add or remove seats you need to go through a few extra steps than when using a regular credit card, but any plan is supported.
New users: Get RescueTime using PayPal
Existing users: Upgrade RescueTime using PayPal
Do you have problems setting new goals and sticking to them? I do. I’m downright terrible at it. Going to the gym, sleeping more, eating better. I have all the good intentions, but just not enough of the follow through. That’s why I’m pretty intrigued by Beeminder. They’re a service that keeps you focused on your goals by allowing you to enter into a “commitment contract” with them. Essentially, you pay them money if you fail at a goal you’ve set. It’s a way to add some real-ness to your efforts, and provide a tangible consequence if you give up.
Beeminder makes it easy to keep track of your progress by integrating with a bunch of automatic data sources (FitBit, RunKeeper, and Gmail to name a few). And today, they’re adding support for RescueTime. You can connect your RescueTime account to Beeminder and let them automatically pull in information about your productivity levels or the amount of time you spend in specific categories. This allows you to create all sorts of goals on Beeminder, among them:
- Increase your amount of productive time per day
- Decrease time spent in email
- Spend more time on software development
- Spend less time on Hacker news
Here’s my personal goal for increasing my productive time:
Basically, the yellow path represents the total cumulative productive time I’ve committed to logging for the next few weeks (units are in minutes). Measurements are automatically pulled in via the RescueTime API. If I fall below the line, I’ll have to pay $5 (you can adjust the pledge amount to make it more meaningful if you want).
It’s a great way to use your RescueTime data to motivate yourself to make meaningful changes. It’s also a great example of how the RescueTime API makes it easy to do interesting things with your data. Thanks to the Beeminder team for putting this together!
To give it a try, go to https://www.beeminder.com/rescuetime to get started. To learn more, check out the announcement over on the Beeminder blog.
Our job was to find a long term scalable solution to the problem of finding your activities that match your key word search. This post pertains to the technology involved. Read about product features and new capabilities here.
Turns out, search in RescueTime is a surprisingly complicated problem, for the simple fact that your typical search prioritizes ranked relevance results– it’s ok for the engine to stream results to you, it’s ok for the search to be incomplete, as long as the ranking is bubbling up the best match. It’s ok for it to be probabilistic or best-guess in nature, sometimes. Generally speaking, you are looking for something small (some words) in something large (a web page).
Our challenge, is that while the user experience semantically matches “search”, what you really need is a complete result set, combining all relevant reporting filters, of activities that match your requested search expression. It should produce repeatable results assuming new data hasn’t arrived. It should be real-time updatable as your new data comes in (~ every 3 minutes). It should be ok if every record or zero records match, there can be no cap on number of matches. All this, for about 100-400 logs of time data per user per day for many tens of thousands of users. The longer a user is with us, the huger the list of activities to match against, just for that user. The list of unique activities of our users is well over 1 billion. We should be able to completely rebuild indexes of activities at will, in near real time, to provide application improvements. Yet, cost needs to scale at worst linearly as a fraction of the rest of our products’ demands, and speed needs to remain constant or better.
All of these characteristics eventually killed our previous attempts to use industry-standard search models based first on Lucene/solr, and secondly on Sphinx. Both were able to hold up for a period of time, but were fundamentally flawed solutions in the assumptions they make expecting a relatively static, ranked-match document-based search model. To shoehorn them into our needs required operational spaghetti and some pretty ugly reporting query structures.
Our old search platform may have looked like this and required similar engineer attention, but it didn’t sound as good.
Enter MySQL fulltext Boolean search. First there is the critical advantage of being *inside* and native to our database platform in a way that even Sphinx with it’s plugin can’t be. This allows for more integrated and simpler reporting queries– no longer is the step of matching your search expression required to be isolated from the reporting query that depends on it (Sphinx could have done this, sort of, with the plugin, but not really the same). Second, in Boolean search mode, MySQL provides an unlimited result set (no cap on results). Additionally, there is less duplication of supporting data, since it can operate entirely in the same instance as the source data– this value is not to be underestimated, for all the inherent caching this leverages. Operationally, it is far easier to dynamically and programmatically add, destroy, and rebuild indexes– since they behave like tables with normal indexes to the operator.
But for performance, the most critical options it offered was a way to fluidly and transparently provide per-user-account search indexes, which lets our performance remain consistent despite constant multi-dimensional growth (new users + accruing existing users’ time data). This isolation-of-index solution would have been theoretically possible but horribly unwieldy and in need of huge operational supporting code in the other options. Secondly, it provides a clear way to constrain the size of keyword indexes, in other words, we know from your requested report you could only possibly care about activities that were in the particular time range you requested, and this can be of value both in index partitioning options and the submitted report query itself, especially in the amount of memory that must be held to build final results. A huge benefit of this known-maximum-scope for the searchable data means that at any time we can intelligently but programmatically throw away or update whatever dynamic table plus index we had that intersects the requested scope rather than the entire source tables, and rebuild it in real time, for a minor speed penalty (< 0.01 sec vs .1 to 3 sec for your search). Any subsequent search request that remains a subset of that most recently persisted scope can just reuse the current index, with the < 0.01 sec speed. We can play with permitted scope expansion to tune for speed. Furthermore, any sharding of accounts across new instances allows the search data to naturally follow or be rebuilt inline with the same scaling decision that drove the sharding to begin with– no separate stack to worry about following the shard logic.
Check out some example code for sneaking a search result into a series of joins rather than hanging out in the WHERE clause. Here it can be treated just like any other join, and like any other filter on your pivot reporting.
-- check dynamically_maintained_text_and_things_with_controllable_scope -- if exists and is up to date continue, -- else, create if needed and -- push missing scope by intersecting request scope with existing -- index is maintained by table definition SELECT * from things INNER JOIN other_things on things.id = other_things.thing_id -- begin search acting like join INNER JOIN ( SELECT * FROM ( SELECT things_id FROM dynamically_maintained_text_and_things_with_controllable_scope `things_search_data` WHERE MATCH (things_search_data.a_text_field, things_search_data.another_text_field) AGAINST ('search words here -there' IN BOOLEAN MODE) ) d_things_result_table ) things_result_table ON things_result_table.thing_id = other_things.thing_id -- end search acting like join WHERE other_things.limiting_characteristic = a_factor
We’re using the table alias for the search data there because that would allow you to chain multiple searches, one after the other (search inside a search), against the some source data by adjusting its table alias.
Engineers looking to provide high performance, easily maintainable search capabilities should carefully consider MySQL fulltext search options if they are on a late version of the product. This is especially true if you are trying to manage a search index of billions of tiny items based on database text columns that mutate very quickly, and benefit from programmatically created and maintained indexes. For example, it occurs to me that Twitter could use this model in very much the same way we do to provide some powerful realtime search indexes for targeted subsets of accounts or hashtags.
In our case, we were able to reduce our search related platform costs by about 60-70%, significantly reduce our operational pain, even while delivering a solution that provided vastly improved performance and eliminating that “well, it works now but we’ll just re-architect next year” problem.
Our spaghetti search code and virtual spaghetti cabling has now been re-factored into something tastier, ready for your consumption.