I feel compelled to throw in my 2 cents in regards to a couple of points raised in this thread.
SmartThings may not be a “coder’s platform,” but the UI is very clearly designed by coders. As a programmer myself, I have to say that we are almost always terrible at designing usable interfaces, specifically because the interfaces we create tend to reflect the underlying software architecture too well. Every moment spent using the SmartThings UI, I feel like I’m looking at a design document for the code.
This is leading SmartThings to an interface that, while perfect for some, and understandable with a little effort for many, is completely unapproachable for an “average” user that wants their home automation to just work ™.
Let me try to illustrate this with an example:
In the programming world, separation of concerns is paramount. A light is a light, and it has very limited responsibility: to turn on and off and to report its status. A Smart App, Smart Lighting in this case, has one responsibility: to resolve its internal logic into a single on/off command to be dispatched to a light.
However, in the Smart Home metaphor that an average user is building in their mind, those separations prevent them from creating an understandable mental model of their home’s behavior. To them, the light and its behavior are inextricably tied together, as one without the other is useless.
Looking at how this mismatch in models plays out, let’s pretend I need to add a lighting rule.
As a programmer, I clearly I need to go to the Smart Lighting SmartApp because the rules I want to add are obviously implemented in the Smart Lighting class/module. I then have the option of piggy-backing on the existing Smart Lighting instance, or creating a new instance, and they can both live happily next to each other, each doing their own thing. It’s beautiful in its simplicity.
Even the fact that this class happens to be controlling that light, or really any light in particular, is an implementation detail that should of course be abstracted away, and my heart sings at how loosely coupled the logic is to the items it controls.
As an average user, I do not think like this. I want to add a rule to my light, so my first step is to go to my Light. There’s no place to add a rule here, though. But let’s assume I realize this, and find my way to the Smart Apps. I figure out that Smart Lighting is a metaphor for whatever invisible construct is responsible for controlling my lights, so I try to add a new rule there. But now I’m confused because there’s no clear indication of the pros/cons of creating a new instance, nor is there even a clear indication that what I am doing is creating a new instance. But I manage to create a new rule, and now I have another Smart Lighting icon, and there’s no clear indication that either of these are tied to any light at all, much less which light in particular.
I wanted to add a simple rule controlling my light, but now I’m dealing with several levels of abstraction that I am not trained to deal with. I guess I should have read several support documents and browsed the forums in order to understand that my simple mental model of a Smart Home is wrong, and that there are really a complex set of interacting constructs that are responsible for my simple rules.
That SmartThings’ UI is a good as it is speaks volumes towards the programming talent they have. However, specifically because of the UI I would never recommend SmartThings to a non-technical person.
I love SmartThings, and think it has more potential than any other competing device on the market, and it’s going to work wonderfully for many people. However, the Best Buy crowd is not going understand it, and they are going to get frustrated. Without them, SmartThings will at best become a niche product, and at worst be doomed to cede the market share it has to more intuitive products and eventually be shuttered.
Please SmartThings programmers, give some more careful thought to the UI and how the people who are ultimately going to need to be your target demographic are going to respond to it.
Edit: I also have to address one more point: verbiage, verbiage, verbiage. What is a SmartApp? At the end of the day, it’s a set of Rules for dictating behavior. When I do go to my Things, I should not see a SmartApp header. I should see Rules. New terminology should only be used when there is no sufficient term already in the general lexicon. It’s a little thing, but I think significant. Modifying a SmartApp is daunting, and I could probably screw something up if I’m not careful. Adding a Rule is simple and fun.