iCloud for my family

I admit it… I love Apple products.  Maybe not because they are the best, (though I could argue that they are!) nor because they are the cheapest (they aren’t), but because they make things easy.  I’m looking for technology that works.

I could certainly navigate the Android ecosystem with ease, but my kids (probably not) and my wife (certainly) would struggle and that would end up being more difficult for me.  Almost two-years into our family iPhone experience, we love them.  Except for our iCloud experience.  However, I think I finally found the right combination of compromises and corrections from failed attempts to document it here.

First, give up on the idea of a shared calendar or contacts list through iCloud.  Or reminders, notes, or well, any of the items under the iCloud menu in the Settings.  Take my word for it, having your 11-year old daughter’s reminders pop up, aren’t as useful as you may think.  (There are much easier ways to share calendars and contacts… we are heavy users of gmail calendars and contacts – in fact, I have 8 personal calendars for the various activities my kids are involved in)

We ended up creating new iCloud IDs (son987@iCloud.com) for each phone.  And have those be dedicated to each person.  My kids both have iPads so they use the same iCloud ID on those so that they can share stuff across their own devices.  This greatly helps with “monitoring” your kids activity too, when they leave a device at home. I highly recommend using a pattern across all the iCloud IDs (like firstName6543@iCloud.com for each person… having the same password for both kids is a good thing too).  Once set, they’ll likely never use this ID again, so it really isn’t important.  (You can create an iCloud ID “under” your family ID to get around that pesky 13-year-old issue.)

The AppStore user ID and password can be different and if you share music and movies as we do in our house, we all use the same AppStore ID.

So, now I have four people with four different iCloud IDs and (in our case, 9 devices between our iMac, MacBook Pro, 3 iPads and 4 iPhones).

I finally broke down and created different user IDs for each person on the family iMac.  A couple of benefit of this was that now we can have multiple PhotoStreams all stream to the iMac.  If all the of the User IDs on the iMac are pointing to the same iPhoto library, you can have all the PhotoStreams end up in one place.  (All users need to be logged in… this is far from perfect, but it works)  People can then share their other stuff with their iMac account.  It all works pretty well.  Just have to get everyone to log onto their account on the family iMac.  (Auto lock the iMac when the screen saver kicks in to remind my wife to click on her name!)


iMessenger is amazingly useful and allows me to do things that I could never do with straight up SMS messaging.  It allows me to respond to iMessages on multiple devices.  I encourage you to check your Settings / Messages / Sending and Receive to make sure that you are interacting with the right phone number and email addresses on each of your devices.  (A cool, and yet significantly novel concept is that you can respond to iMessages to your phone number on any device.)

I’ve attached what my wife’s very scary looking Messages setting screen looks like here.  You’ll notice that it could be associated with three-different phone numbers.  I very quickly ended up with multiple devices sharing the same IDs (while I was learning my way around iCloud).  In fact, I ended up having conversations with the wife of a friend whom had recently changed devices.  This is worth doing on all of your devices so your kid doesn’t respond to an iMessage from your boss by mistake!  (I’ve called out iMessages distinctly versus SMS messages… iMessages are the default protocol between Apple users)

Finally, on “monitoring” your kids… setup and require use of the Find Friends app.  Add their iCloud email address to their contact information and then add them to the app.  And remember I said use a simple to remember naming scheme for the iCloud addresses?  That’s useful if you have to resort to using the Find my iPhone app to find a lost phone or remind a non-responsive kid…. having an easy to remember naming convention and password is useful!

Is “Good Enough” really good enough?

I’ve been building software for almost 30-years now… first for fun in high-school and then as a job.  I don’t think it would come as a surprise to anyone that I’ve seen changes. However, the changes I’ve seen in the past five years or so are dramatic and are swinging is in a direction where the pace of change is difficult to track.

Ten years ago, when you wanted to write some enterprise software, you picked a tool… maybe a Java application server or a .NET environment or a language, but at the end of the day, the code all looked similar.  You were probably using object-oriented concepts likes classes and methods (maybe not), and you were writing code… lots of it.  Maybe you were using a code generator that would write 80% of the code for you, but that still left you with 20% to write and integrate with the 80%.  But since that 20% was actually 80% of the work, you didn’t benefit that much.

Today, you can download a free framework (Ruby on Rails, Django, etc) and have a working system that does 90% of what you need right inside the framework.  The first 15-minutes of the tutorial brings a working system up and running.  Amazing stuff.  But it truly doesn’t end there… the frameworks are designed to be easily extensible and for the capable developer, knowing just a few simple technologies can allow him or her to build entire applications in a fraction of the time it took 10-years ago.

But buyer beware… these frameworks do what they do, and in most cases to it well.  They are not well suited to being stretched in areas that are outside their “comfort zone”.  Too often I see people try to make a framework do just something else…  something that it wasn’t intended to do, but can.  Of course it can… you can always drop into low-level code and work around the framework.  Often, you end up bypassing the framework to do what you need, and that can (and often does) cause issues downstream.  Maybe you break the caching that the framework does for you, or you hack in something that works now but may stop working on the next upgrade.  Knowing (and respecting) the capabilities and limitations of the framework is important.

What this leads to is then knowing a lot of frameworks.  You don’t need to know them as an expert, but you do need to know them at a level that allows you to decide what framework goes where.  And if you know how to choose, you get a collection of technology that should be good enough for what you need.

OK, back to the title of this posting… is that good enough?  Probably and frankly, for the vast majority of what I see, good enough is good enough.  But know the limitations… if you are building an app that will work 99.5% of the time, that is probably good enough if it is being used by people and the things that they are doing aren’t damaging in any way.  For example, if my “Words with Friends” doesn’t refresh right away, I’m not going to be too upset.  However, if one out of 200 transactions fails on my cool new iPad-based Point of Sale system, then that’s a real issue for me and my customers.  I’ve seen coding practices that cause intermittent errors, usually when someone does something that they shouldn’t have done in the first place or when they’ve stressed the framework in a new and dangerous way.

I started by talking about development and development frameworks, but obviously, when you start talking about 99.5% up-time and availability, we go beyond the programming language choice and into infrastructure and deployment choices.  Of course, “cloud” comes up at this point.

But let’s not confuse “cloud” as a solution, rather it is a tool.  Too many of my customers look at cloud as a magic box.  These are the same people who tell me that cloud doesn’t meet their SLA requirements because they read an article about an Amazon WebServices outage that took 10,000 companies off-line.  What they didn’t read about was the 1,000 companies that didn’t go offline because they used AWS properly and architected their solution properly.  (Yes, I really did use the “architect” word when talking about an AWS implementation)  Don’t look to cloud as a way to outsource your deployment architecture – you still have the responsibility to do the architecture work.

So, is good enough good enough?  It is for many situations… and more companies should adopt a “good enough” strategy.  “Gold plating” (over engineering) a low-volume marketing application isn’t typically worth it.  It adds complexity and it adds significant duration in most enterprise shops.  However, know the limitation.  Know the business requirements.  Know your team’s capabilities.  If “good enough” is good enough, then do it.

Finally, most vendors and most tool experts don’t see the world this way… they tend to think of their hammer as *the* tools for all problems.  This is rarely the right answer… it can be made to be so, but at the end of the day, choosing the right solution will greatly improved you ability to get the job done.  Rely on an experienced architect to help you make the right decisions.