We launched Numerous just over a month ago and much to our chagrin, we never posted a video showing how it works. Well, here you go!
Careful observers will notice a few not-yet-released features. But worry not, a new version with those features and more will be available on the App Store in the next couple of days. (Now where's my Tesla?)Read Post
As soon as we heard the news I jumped up from my desk, hopped in my car, and drove to Target to buy a Fitbit Flex. (Alas, I didn't get any credit for all of this vigorous activity since I wasn't yet wearing my Fitbit. I did however track the miles I drove! But I digress.)
Once back home I set up the device and my Fitbit account, activated the Fitbit IFTTT Channel, and took at look at its available Triggers. The most immediately interesting one to me was Daily Activity Summary, which I used to create the following recipe:
The data is updated daily the first time you sync your Fitbit, by which time it's yesterday's data. So I created a number in Numerous called "Steps Yesterday" and selected it when asked "Which number would you like to update?" when I used the recipe.
Now every morning the number is updated automatically. I'm sharing it publicly so you can check it out here.
Now I can share my steps with all my friends—not just those who use Fitbit's service—and track their steps too. (Some of my friends use the built-in iPhone 5s pedometer, some use a Jawbone UP, and others use Fitbit.) Numerous can track data from all of them and allow us all to see each other's numbers. It's a remarkably addictive competition.
Of course there's more data available than just steps, so we'll be adding more IFTTT recipes. Let us know if you do the same!Read Post
OK, done? Great. Here's what you just installed.
One of the built-in auto-updating numbers available in Numerous is the temperature in your city. It's a neat feature and one that almost all of our users use, but until now it only showed temperatures in degrees Fahrenheit. Which is great as long as you live in the US, Bahamas, Cayman Islands, or Palau.
But almost everyone else in the world uses degrees Celsius, a fact of which a lot of people reminded us.
Now temperatures are shown in either Fahrenheit or Celsius depending on your iOS settings (Settings > General > International > Region Format). Can you believe it was 38°C in Cupertino today? Crazy.
Today's release also substantially improves sharing. Tap a number to view its details, then tap the Share button and select Message, Mail, Twitter, Facebook, or AirDrop. (AirDrop, by the way, is so cool.)
Your shared message will include a link to a web preview of your number (for instance http://n.numerousapp.com/m/19q9qhiem3p41). This way you can share with anyone, not just other Numerous users. Of course we want everyone to be a Numerous user, so the page includes a link to download Numerous on the App Store.
In addition, when you share via Twitter, other Twitter users on iOS will be able to open your number in Numerous directly from your tweet. (I know! Technology!)
New notification settings
Finally, we've added more fine-grained control over notifications. Previously there was a single setting for "Comments & Likes", but we heard from a number of people that they'd prefer to control those separately. So that's now how it works! Very handy for when you want to follow the conversation but don't want to be notified every time someone taps the Like button.
Along with these changes we've included a bunch of performance improvements and bug fixes, both in the app and on the server side. And we're at work on some brand new features. Watch this space for more news.
Thanks to everyone who's contacted us to request a feature, report a problem, or just to say hello! As always, you can reach us at email@example.com or on Twitter at @NumerousApp. We look forward to hearing from you.Read Post
Ever since we released our first beta, people have been asking us how they can easily and automatically update their numbers in Numerous with data from their existing apps like Salesforce, MailChimp, Evernote, and Eventbrite. Today we're thrilled to provide the answer by introducing Numerous on Zapier.
Zapier connects hundreds of web applications together by letting you build "zaps", integrations consisting of a Trigger app (like Salesforce) and an Action app (like Numerous) like this:
The Numerous app on Zapier allows you take a number from any Trigger app and use it to Replace or Add To a number in Numerous. Here are a couple of our favorite zaps:
By creating zaps on Zapier using Numerous as an Action app, you can automatically update numbers from a wide array applictions. Please let us know how you use it! And of course, if you ever run into any problems or have any questions don't hesitate to contact us at firstname.lastname@example.org.Read Post
Yesterday we launched Numerous and were thrilled with the response. Today we're making it even easier to track and share the most important numbers in your life with Numerous by launching the Numerous Channel on IFTTT.
IFTTT, which stands for “if this then that”, is a simple service that lets you create powerful connections between triggers and actions on the internet, like automatically turning your house lights on when you park by your house, or automatically letting your friends on Facebook know when you drive back home. You can read more about IFTTT here.
The Numerous Channel includes several actions, including:
By creating recipies on IFTTT using Numerous as the "that" part, you can automatically update numbers from a wide array of devices and applictions.
Here are some of our favorite recipes:
To activate the Numerous Channel on IFTTT, just sign in when prompted using either Facebook or Twitter—whichever you use to sign into Numerous.
Be sure to create the number you want to track in Numerous before you create or use a recipe. (You'll be prompted for which number you want to store your data in.)
John and I are big fans of IFTTT and can't wait to see what everyone builds with IFTTT and Numerous. And as always, please let us know if you run into any problems or have any questions at email@example.com.
Update: Long-time Numerous user Hoon Park just created this awesome IFTTT recipe:
And…it went well! As I write this, we’ve had almost 600 new users for the day which is easily on the high end of what we hoped. People seem to care.
What struck me most about the day was that this is fun. Not just that it’s fun to launch a new product (it is), but that the product itself is fun. It’s fun to talk with like-minded people about numbers from different walks of life. It’s fun to see people create, share, and track numbers that are important to them. In a way, each number comes with its own little chat room and it’s fun to watch those micro-communities grow.
It also occurs to me that this is the first product launch I’ve had outside of Apple in many years (remember Key Xing, Mac Minder, or Simon Extreme anyone?). The two experiences couldn’t be more different. At Apple when a product I worked on went live (iOS 7 and OS X Mavericks, most recently), I’d obsessively monitor Twitter/blogs/discussion forums for issues related to my work. But Apple didn’t allow me to answer questions with my own name or as a representative of Apple, so I had to use an anonymous account on the Apple discussion forums if I wanted to help someone out of a jam.
Obviously, that will no longer be a problem :-) I’ve always enjoyed helping people (hell, I did phone tech support for three years so I must) and to work directly with others on a product that I created is incredibly fulfilling.
I can’t wait for tomorrow.Read Post
I’ve been coding the server side of Numerous for the last 165 days. I know that because I keep a work journal in Evernote—sort of a running commentary of the thoughts going through my head. The first Numerous-related journal entry is dated November 8, 2013, which is 165 days ago.
Why do I do this? Simple: because this stuff is too complicated for me to keep in my head all at once. That, plus it’s really helpful to be able to go back and answer the inevitable question, “What was I thinking?!”
It’s not meant to be a story. It’s a journal. But it describes in fairly minute detail the problem-solving process that lies at the heart of software development. Here’s a representative example:
The 1MB problem in scanMetricSubscriptions
OK it’s really 2 problems:
- This should be a query, not a scan
- It needs to handle paging so it can deal with more than 1MB of matches
The second problem is the pressing one, since until I fix it, we’re in danger of not delivering notifications (once the amount of subscription data scanned by Amazon exceeds 1MB, which is probably something like 5,000 subscriptions, so call it 500 users). After that, notifications won’t get sent to some random set of people, which would be a bad thing.
The first problem is an efficiency thing. I’ll fix it while I fix #2.
I can model this on how I handle paging for Events and Interactions. That means the (new) getMetricSubscriptions function needs to accept values that will make up an ExclusiveStartKey for the subscriptions table. Which brings up another important point.
Right now the subscriptions table has a single index: userId as the primary hash key and metricId as the primary range key. This is great for the getting a single subscription (the one for a certain userId and a certain metricId), and for the query “give me all subscriptions for this user”. But it doesn’t help with the query “give me all subscriptions for this metric." What it needs is a global secondary index with a primary hash key of metricId.
And yes, that means rebuilding this table from scratch. Right now there are 517 items in it. Hmm. Looks like I’m going to be writing some code.
OK, so in order, here’s what I need to do:
- Write the new getMetricSubscriptions code (/v2/!), including paging.
- Create a temporary table (subscriptions-2) with the existing structure plus the new GSI.
table name: subscriptions-2
primary hash key: userId (N)
primary range key: metricId (N)
secondary hash key: metricId (N)
secondary range key: userId (N)
provisioned reads: 6
provisioned writes: 1
- Test the new code against the new table.
- Write and run a utility to copy each item from subscriptions to subscriptions-2.
- Update subscriptions-db.go with the new table name. (And anywhere else it’s referenced.)
5.1. Push to production
- Update the functions in notifications.go to handle multiple pages of results.
- Update deleteSubscriptionsForMetric() to use the query and to handle paging
- Update deleteSubscriptionsForUser() to use the query and to handle paging
- Update all other instances of scanUserSubscriptions() and scanMetricSubscriptions()
9.1. Push to production
When I read back over my journal I see the same pattern repeated again and again: identify a problem, consider it in the whole, break it down into its constituent parts, figure out the solution, and implement it. Sometimes the pattern is recursive as I find sub-problems. Sometimes I backtrack when I reach a dead end. But often it turns into a list of “Do this… DONE!”, “Do this… DONE!”. It’s satisfying.
There’s an amazing variety of problems you encounter when developing any non-trivial software. (And often stuff that seems like it’s trivial isn’t.) Broaden your scope from simply writing software to launching a whole product, or a whole company, and the variety gets even more amazing. Which is what makes it fun to do what I do.
You’re probably wondering when I’m going to get around to tying this into The Martian, a most awesome book I recently read. Well, that book describes exactly the process I’m talking about. But instead of developing software, it’s about surviving alone on Mars.
You should buy it and read it. You might find it completely boring. You might find it completely compelling. But either way, you and I won’t be at a loss for something to talk about if we ever run into each other. Which, like failing to send notifications to a random set of users, would be a bad thing.Read Post
Two days ago, after five months of development, we submitted Numerous to the App Store. Shortly thereafter we got the acknoledgement from Apple:
Dear Numerous, Inc,
The status for the following app has changed to Waiting For Review.
App Name: Numerous — Track & share life’s most important numbers
So now all we do is wait. No, that's totally wrong. Now all we do is a million things to prepare for the launch.
We have a blog post and a press releases to write, videos to record, contacts to contact, analytics to configure, and a web site to launch. It's a lot, but it's part and parcel of the indie hustle.
If all goes well, we'll be live on the App Store soon. And when that happens, we hope you'll help us spread the word.
After six weeks of beta testing, we're almost ready to submit Numerous to the App Store. Other than last-minute bug fixes, we only have one thing left to do in the app itself: the onboarding process.
Onboarding in mobile apps is an art. You need to get new users signed in, set up, and engaged with your app while not making the process tedious. We've studied a ton of other apps to understand how they approach the process, have debated how we'll do it, and have reached agreement. Now it's all over but the design work and coding.
But there's a lot more to launching an app than just, you know, writing an app. You need to create a website, navigate the App Store submission process, and make sure that your launch doesn't go unnoticed. Plus set up all the systems that allow the app, the launch, and the company to function, and with any luck, to scale.
There are a million little things that go into all of this. It's a process I've started thinking of as "the indie hustle", since as indie developers we have to do it all ourselves.
The indie hustle brings to mind the famous Heinlein quote about specialization:
A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects.
I'd like to offer my own version:
An indie developer should be able to fix a bug, plan a marketing campaign, write a blog post, define a vision, design a logo, incorporate, analyze a crash log, configure Ngnix, talk to press, generate a cert, remove a background, reassure his spouse, spin up an EC2 instance, manage a beta, cooperate, act alone, debug a race condition, monitor a resource, use a Smart Object, analyze a query, define a category, be aware of everything, ignore almost all of it. Specialization is for the salaried.
To this list I suppose I should add "create a compelling onboarding experience". There's a lot left to do, but it's not daunting—it's thrilling. Watch this space for the announcement of our debut on the App Store soon.Read Post
Well, hello again! It’s been almost two months since we’ve posted to this blog (yikes!) but we have a great excuse: we’ve been working like mad on the first beta release of Numerous. It should be in the hands of the first crop of beta testers in the next 48 hours or so! Very exciting.
(To get on the waiting list for the beta, please sign up at numerousapp.com.)
John left Apple—where he had worked since graduating from college—last November to join me in starting Numerous. He’s an extremely talented iOS and OS X developer and gifted musician, and has a great eye for design. He lives and works in Santa Cruz, California.
Also in November I resigned as CEO of Spanning, a successful SaaS data protection company I started in 2010, to co-found Numerous. I’m an early-stage startup guy and Spanning is well into its growth phase so I wanted to create something new. I live and work in Austin, Texas.
John and I have been friends since we were kids, and the timing worked out perfectly for us to start a company together. Our skills are remarkably complementary too: he’s the DJ, I’m the rapper. Wait, that’s not it. He’s the app developer, I’m the server-side guy. It’s a two-man show, at least for now, which has worked great for me in the past. (My friend Larry Hendricks and I had a similar arrangement when we created Spanning Sync.)
We’ve been working hard for the last three months on developing Numerous and are excited to be at the point where we can get it in your hands. We can’t wait to get your feedback and input, and to folding that back into the product to make something truly unique and—if we get it right—indispensable.Read Post