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 (http://telemetryapp.com) 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