Developers vs Engineers

A great post went around last week that I think everyone should read. There are a couple of great quotes that really capture the attributes that I think make great engineers great.

Understand, at least on some level, the things that you depend on. Own everything. Similarly, if you built it and it’s running in production, it’s on you to support it. Throwing code over the wall is no longer acceptable. When there’s a problem with something you depend on, don’t just throw up your hands and say “not my problem.” Investigate it. If you’re certain it’s a problem in someone else’s system, bring it to them and help root cause it. Provide context. When did it start happening? What were the related events? What were the effects? Don’t just send an error message from the logs.

Owning everything, or controlling your own destiny is so important. We've all worked with folks who try to own nothing and push work to other teams/individuals, and when things go wrong, they are the ones passing the blame as well. To no surprise, no one wants to work with them more than once.

Bugs will only get worked out if the code actually gets used. You cannot wait until something is perfect before adopting it. You will wait forever. Remember that Agile is micro failure on a macro level. Adopt quickly, deploy quickly, fail quickly, adjust quickly.

There are always opinions on how to ship a product, but I love building the simplest form of the product and deploying it and then iterating on it quickly. Projects that are developed for months and then leave deployment until the end as an afterthought usually run into a wide array of integration issues. At that point, that is unplanned work with no clear estimate of how long it will take to fix.

Disney World, the Magic Band and Apple Watch


A few weeks back I went to Disney World. It also happened to be about a week after I received my Apple Watch. The two may seem unrelated but Disney World is foreshadowing what Apple Watch will be in a few years.

When you buy a ticket at Disney World you have the option to also purchase a Magic Band. The Magic Band is an NFC wrist band that serves as your identity while you're at the Disney World Resort (and Disneyland for that matter). You use the Magic Band to enter the park, sign up for Fast Passes, Pay for Meals/Souvenirs and even to create magic.

An example of such magic is at the "Be Our Guest" restaurant. When you enter the restaurant you wave your Magic Band at a touch screen kiosk and order your meal. The payment is automatically charged to your account, and the kiosk directs you to find a table. You sit at the table and a few minutes later your meal arrives. It really does create a moment of delight wondering how they knew where to take your food.

How? The table you sit at is a little thicker than a normal table in order to house an NFC reader. When you sit down it notifies the staff where to bring the food. When you are done eating your table notifies staff to clear the table. 

Disney is on an entire new level of user experience design. They used technology to make a highly efficient restaurant but also make a delightful frictionless user experience. What does this have to do with Apple Watch?

Apple Watch has only been out a month, so we are in the very beginning of the ecosystem. In a couple years Apple Watch will be as central to your everyday life as the Magic Band is when you are at Disney World. Apple Watch is emphatically you, bringing an increased level of security. Essentially while wearing the watch you are a walking 2 factor authenticated user, that opens up an entire new world of possibilities. 

In the not to distant future you will checkout at Whole Foods, pay with your watch and walk to your car. You will wave your hand at the trunk and it will open. You wont need a car key anymore. Better yet, your car knows whether you or your spouse is driving and adjusts the seats and climate for you. When you get home your garage door just opens. When you're all out of the car it simply locks. The best part of this story is that you didn't have to interact with a single UI.

All of this is possible with Android Wear of course, and Android watches came out first. However, only Apple can truly unlock this future. They started laying the plumbing for this years ago. Passbook came in 2012, TouchID/CarPlay came in 2013, HomeKit/HealthKit and Apple Pay came in 2014 and of course Apple Watch in 2015. This year, rumors are swirling that Apple TV/HomeKit will be central to WWDC. Once Apple ties your phone and watch to your home most of the above is possible within a year. The car is a few years away but Apple has been laying the infrastructure for it for years. 

After this story becomes a true story, I would expect brick and mortar retail to have a small renaissance. If we can remove friction from the physical world the web as we know it will feel antiquated.

Stand for Apple Watch

I've now had my Apple Watch for a couple of weeks.  One thing that is a bit annoying is the charger. I charge 2 phones on my nightstand and I'm constantly knocking the charger off my watch.  Apple Watch needs a stand, so I looked at several and found this Spigen stand to be the best stand for Apple Watch.  I'm a big fan of Spigen's products and this a pretty reasonable stand at $20.


Bail Me Out - Calls to Get Out Of Dates and Meetings

 Bail Me Out was built specifically for the Apple Watch.

Bail Me Out was built specifically for the Apple Watch.

Today my first Apple Watch app got approved.  Instead of bolting a watch experience on an existing app I wanted to build something with the Apple Watch in mind.

Bail Me Out is a very simple concept. You're stuck in a meeting that you don't need to be in but you can't just walk out. Simply open the app on your Apple Watch and tap Bail.  In a couple seconds you'll get an actual phone call on your iPhone.  Say "I need to take this", and walk out. Increasing your productivity has never been easier.

On a date? Bail Me Out also has "Bail in 5".  Simply tap Bail in 5, and you'll receive a real phone call in 5 minutes.  Ditching a date has never been so frictionless.

Don't have a watch? Bail Me Out also works perfectly on your iPhone.

Building Bail Me Out was a one weekend project.  About 5 hours to build the iOS App and WatchKit app and about 7 hours to build the backend to handle making calls.

I made a mistake and included the Apple Watch as an image within the iPhone App tutorial screen which caused a rejection. To replace the banned image, I decided to use one of Vince Vaughn's Unfinished Business stock photos.  I dropped it in the app, made another tweak or two and re-submitted.  3 days later, it was approved.

I'm super excited about the Apple Watch and had a ton of fun building for it.  I can't wait for Wearables gain more traction and become the central identity key for the internet of things. 

Download Bail Me Out on iTunes for Free and let me know what you think.


When to use AWS

I just moved all of my personal hosting off of AWS recently. The primary reason was cost. AWS is expensive especially when your requirements are static.  

For example, your application needs 5 servers with an elastic load balancer plus a multi-zone RDS MySQL instance, the minimum you'll pay per month is north of $250 for fairly low powered VM's.  Even if you use reserved instances you're average monthly cost will still be around $200.

By switching to a more standard VM hosting company, you can easily get your average monthly cost to around $100 (or even less if you don't need a lot of CPU's).

Personally, I switched to Linode.  I found their offerings to suit my needs and I'm now saving 66% per month.  What am I losing? Practically speaking, nothing. Hypothetically I'm losing a lot of flexibility that AWS offers.  AWS has robust support for API management of hardware, auto-scaling, automated RDS backups and a lot more obviously.  But my requirements are pretty static, so I am comfortable with the trade-off.  

Amazon is doing great things in this space and releasing some great technologies.  In doing so they are creating feature/platform lock-in with early stage technology companies.   Amazon is doing with AWS what Apple is doing with iOS/Mac.  By making the switching cost so high Amazon is ensuring the long term viability of their business.

I love AWS and I will continue to use it for new projects where the requirements are a lot more fluid.  Once the project reaches a point where the requirements are set, I'll then deploy it to another hosting provider.  

Official BMW Remote App Updated

BMW finally updated their remote app. I was excited to see the update come out, however BMW yet again disappoints in the app space. 

There were a host of changes in this update. Beyond a fresh coat of paint and new icon there are also some other enhancements. When logging in for the first time, they have removed a redundant password prompt.  They have also changed the home tab to the vehicle action screen (lock, unlock, ventilation, etc). The vehicle locator has been moved to a secondary tab. 

While some progress was made, BMW really missed the point with this update. They did remove some steps from the process of locking your car but the core underlying issue remains. When you send a command to your car, you have to keep the app open and wait to verify that your car has been locked. This can take up to 5 minutes if it works.  If there is a limitation that causes such a delayed response, don't make the user feel that pain. Handle the command on the server side and send me a push when it succeeds or fails. 

The app is still missing the killer feature. The app needs to be registered as a Transit Provider with Apple Maps so we can send directions to our cars.  This would be a seamless integration versus opening the remote app, going to the location tab, searching a different database and sending directions to the car. When I reverse engineered the old Remote App and built my own, I added this feature in 2 hours and I use it all the time. 

In the luxury car market, a great companion app is almost a requirement now. Tesla's app is phenomenal and other auto makers are not far behind. But BMW lags behind. This update feels like a low budget update that product marketing shoved upon a third party developer. 

I never released the BMW Remote App I built because it was a project that was intended for me. When I explored making it for mass consumption the main issue was testing it on different types of cars with different features.

I'll probably reverse engineer this update to see if there are any new cool features that can be made. I'd love an iOS 8 extension or widget to get quick access to my car.  

How do I get the best iPhone Battery Life

I have this pet peeve of people giving bad advice about technology.  The number one is how to optimize battery life, specifically the iPhone.

I saw one article that even recommended turning off wifi to improve battery life.  While conceptually true, in real world practice, absolutely false. 

With the iPhone 6 and 6 plus, battery life has never been better.  However there are a few things I do to optimize my battery life.

Turn down the screen brightness

This one seems obvious, but a screen emitting brightness (energy) uses more energy.  I keep mine at about 20% brightness with auto brightness control on.  This way it gives me what I need if I'm in direct sun light but then backs down when I'm not.

Use WiFi whenever possible

At home and work, stay connected to WiFi.  Not only will your connection speed likely be faster on WiFi, you won't be using the Cellular Radio unless you take a phone call (which will soon change hopefully).  The cellular radio drains the battery, especially if you are in a poor signal area.

Be smart with location access

Only enable location services for apps that actually need it.  In practice, I keep location services on for most apps, as I don't use most apps frequently.  However, if an app keeps monitoring location and I feel it doesn't need it, I just turn off location access for that app.

What doesn't impact Battery Life

  1. Push Notifications - Unless you're getting dozens a minute, there wont be much impact. All that is being sent to your phone is less than 1kb.  All of this is moot if you're on WiFi.
  2. Bluetooth - If you're not connected to anything, the amount of energy your phone is using for Bluetooth is pretty small.  Even with streaming music, newer iterations of Bluetooth chipsets have become fairly good at minimizing energy usage.  Conceptually yes, it does impact battery life, but not in a meaningful way if you charge your phone every day.

In the end, just think in terms of energy in vs energy out.  Your screen emits energy, your phone's cellular radio emits energy, and other radios emit energy (GPS, wifi, bluetooth).  Basically, you just need to optimize which energy sources are used.  The screen, cellular radio (3G in particular), GPS are the biggest offenders so focus your efforts there. After that, quit worrying about it.

New Adventure

On Monday I start a new job at Fanatics. It's a great company with awesome people in an amazing industry.  

It was bittersweet to leave eBay, especially working on (in my opinion) the best team in the company. I'm still extremely excited about what they are working on. I'll share what we were working on once it has launched.

I started at eBay thinking I'd only work there for a couple of years and move on to something else.  6+ years later, and I couldn't be happier with my experience at eBay.  I got to work on some huge backend systems, iOS and Android apps with millions of users, and countless proof of concepts.  More importantly, I met some extremely talented people and made a lot of friends.

PHP Library for Telemetry App

This weekend I had a project that required me to create a live dashboard. I found Telemetry ( and it looked perfect for what I needed. You simply submit new data for the dashboard via their API. They have clients for Mac, Windows, Mobile and Web to view the dashboard. Unfortunately they only had a Ruby Gem to interact with their API. I had a requirement that it needed to be in PHP, so I was on my own.

Over the course of the weekend I built a fully-functional library for Telemetry in PHP and it supports all of their different data flows. I put it up on GitHub so others could use it.

Telemetry GitHub Repository