The Internet of Things is Complex

We are in the process of blanketing our planet with billions of networked sensors and actuators.

These devices are embedded in consumer products, industrial systems, and the built and natural environment.

Once connected to each other, and to us, this "one machine" will reshape social interactions and market dynamics as we currently know them.

Diverse Use Cases

The range of applications enabled by Internet of Things technology adds to the complexity

Industrial Analytics

Industrial Analytics

Energy harvesting sensor motes installed on a gas line

Energy harvesting sensor motes installed on a gas line

Passing data over mesh networks and long range low power networks

Passing data over mesh networks and long range low power networks

In order for its data to be analyzed by a predictive analytics engine.

In order for its data to be analyzed by a predictive analytics engine.

Or on the other end of the spectrum

A voice activated services hub

A voice activated services hub

Plugged into your home outlet and connected to your home router

Plugged into your home outlet and connected to your home router

Where data privacy and personal customization are a top priority.

Where data privacy and personal customization are a top priority.

Smart Home Service

Smart Home Service

Implications

Connected products by their nature create bi-directional interactions that flip assumptions for both the products creators and their users upside down.

Business Owners

Where does your product end and another service begin?
Is your revenue driven from:
  • Upfront sales?
  • Hardware as a Service (HaaS) subscription model
  • From usage data?
Product / Service Graphic

End Users

Managing a dynamic user experience
Who do you call for help when something is not working?
  • "Is the Internet down"?
  • "Did my rules setup break"?
  • "Is the API of the cloud service having issues"?
Can I easily switch from engaging with the service using my voice, a mobile app, and beneift indirectly from machine learning usage algorithms.
User Graphic

Designers & Developers

This is too small of a space to get started on the technical and UI minefield of the IoT: 
  • Ongoing over-the-air firmware and security updates
  • Machine learning and user feedback
  • Evolving features and capabilities (See: Tesla's speed improvements)
Technical Issues

In any system with a lot of moving parts, it’s often difficult to keep track of what’s going on.

The Connected Product Framework

Connected Product Framework Logo

A tool to navigate the complex network of interactions between technical components, user actions, and product service models.

A tool to navigate the complex network of interactions between technical components, user actions, and product service models.

The Connected Product Framework uses 4 key organizing elements:

Context

1) Context

A general introduction and overview of the product.

Context Image

2) Service

What does the product do?
What outside services/devices and stakeholders does it interact with?

Service Graphic

3) Product

What is the product made up of? This can reference physical components like hardware to digital components like cloud service, data, and analytics.

3-product-01

4) Interaction

What is the relationship between the device/service and the
user? Does it change over time and context?

Interaction Graphic

These 4 criteria combined create a feedback loop that allows us to visualize the how connected products and services work and improve over time.

Elements Overview

You can use the CPF in several different ways:

1) Portray a single product user experience

Sprinkler Overview

2) Blueprint a complex use case

Use Case Graphic

Want to use the framework to help organize and simplify your own projects?

Go ahead and download it below.

Guide

Trevor Harwood


Trevor has been following the IoT and its implications since 2009. He is most interested in how we can utilize technology and connectivity to reduce resource usage.


Contact

SMART PRODUCT & SYSTEM TRENDS

Join 20,000+ readers for our free bi-monthly newsletter to stay a step ahead of the curve.

  • This field is for validation purposes and should be left unchanged.
[gravityform id="38" title="false" description="false" ajax="true" tabindex="49"]
<div class='gf_browser_unknown gform_wrapper' id='gform_wrapper_38' ><div id='gf_38' class='gform_anchor' tabindex='-1'></div><form method='post' enctype='multipart/form-data' target='gform_ajax_frame_38' id='gform_38' action='/connected-product-framework/#gf_38'> <div class='gform_body'><ul id='gform_fields_38' class='gform_fields top_label form_sublabel_below description_below'><li id='field_38_2' class='gfield field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label gfield_label_before_complex' >Your Name</label><div class='ginput_complex ginput_container no_prefix has_first_name no_middle_name no_last_name no_suffix gf_name_has_1 ginput_container_name' id='input_38_2'> <span id='input_38_2_3_container' class='name_first' > <input type='text' name='input_2.3' id='input_38_2_3' value='' aria-label='First name' tabindex='50' aria-invalid="false" /> <label for='input_38_2_3' >First</label> </span> </div></li><li id='field_38_3' class='gfield field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label' for='input_38_3' >Can you share a high level overview of what you are looking for?</label><div class='ginput_container ginput_container_textarea'><textarea name='input_3' id='input_38_3' class='textarea medium' tabindex='54' aria-invalid="false" rows='10' cols='50'></textarea></div></li><li id='field_38_4' class='gfield field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label' for='input_38_4' >What is your email address?</label><div class='ginput_container ginput_container_text'><input name='input_4' id='input_38_4' type='text' value='' class='medium' tabindex='55' aria-invalid="false" /></div></li> </ul></div> <div class='gform_footer top_label'> <input type='submit' id='gform_submit_button_38' class='gform_button button' value='Submit' tabindex='56' onclick='if(window["gf_submitting_38"]){return false;} window["gf_submitting_38"]=true; ' onkeypress='if( event.keyCode == 13 ){ if(window["gf_submitting_38"]){return false;} window["gf_submitting_38"]=true; jQuery("#gform_38").trigger("submit",[true]); }' /> <input type='hidden' name='gform_ajax' value='form_id=38&amp;title=&amp;description=&amp;tabindex=49' /> <input type='hidden' class='gform_hidden' name='is_submit_38' value='1' /> <input type='hidden' class='gform_hidden' name='gform_submit' value='38' /> <input type='hidden' class='gform_hidden' name='gform_unique_id' value='' /> <input type='hidden' class='gform_hidden' name='state_38' value='WyJbXSIsIjI0MzNjYTY3YTUxNWM5ZTM5NmFkOWNiZWJiMjkyMDYyIl0=' /> <input type='hidden' class='gform_hidden' name='gform_target_page_number_38' id='gform_target_page_number_38' value='0' /> <input type='hidden' class='gform_hidden' name='gform_source_page_number_38' id='gform_source_page_number_38' value='1' /> <input type='hidden' name='gform_field_values' value='' /> </div> </form> </div> <iframe style='display:none;width:0px;height:0px;' src='about:blank' name='gform_ajax_frame_38' id='gform_ajax_frame_38'>This iframe contains the logic required to handle Ajax powered Gravity Forms.</iframe> <script type='text/javascript'>jQuery(document).ready(function($){gformInitSpinner( 38, 'https://www.postscapes.com/wp-content/plugins/gravityforms/images/spinner.gif' );jQuery('#gform_ajax_frame_38').on('load',function(){var contents = jQuery(this).contents().find('*').html();var is_postback = contents.indexOf('GF_AJAX_POSTBACK') >= 0;if(!is_postback){return;}var form_content = jQuery(this).contents().find('#gform_wrapper_38');var is_confirmation = jQuery(this).contents().find('#gform_confirmation_wrapper_38').length > 0;var is_redirect = contents.indexOf('gformRedirect(){') >= 0;var is_form = form_content.length > 0 && ! is_redirect && ! is_confirmation;var mt = parseInt(jQuery('html').css('margin-top'), 10) + parseInt(jQuery('body').css('margin-top'), 10) + 100;if(is_form){jQuery('#gform_wrapper_38').html(form_content.html());if(form_content.hasClass('gform_validation_error')){jQuery('#gform_wrapper_38').addClass('gform_validation_error');} else {jQuery('#gform_wrapper_38').removeClass('gform_validation_error');}setTimeout( function() { /* delay the scroll by 50 milliseconds to fix a bug in chrome */ jQuery(document).scrollTop(jQuery('#gform_wrapper_38').offset().top - mt); }, 50 );if(window['gformInitDatepicker']) {gformInitDatepicker();}if(window['gformInitPriceFields']) {gformInitPriceFields();}var current_page = jQuery('#gform_source_page_number_38').val();gformInitSpinner( 38, 'https://www.postscapes.com/wp-content/plugins/gravityforms/images/spinner.gif' );jQuery(document).trigger('gform_page_loaded', [38, current_page]);window['gf_submitting_38'] = false;}else if(!is_redirect){var confirmation_content = jQuery(this).contents().find('.GF_AJAX_POSTBACK').html();if(!confirmation_content){confirmation_content = contents;}setTimeout(function(){jQuery('#gform_wrapper_38').replaceWith(confirmation_content);jQuery(document).scrollTop(jQuery('#gf_38').offset().top - mt);jQuery(document).trigger('gform_confirmation_loaded', [38]);window['gf_submitting_38'] = false;}, 50);}else{jQuery('#gform_38').append(contents);if(window['gformRedirect']) {gformRedirect();}}jQuery(document).trigger('gform_post_render', [38, current_page]);} );} );</script><script type='text/javascript'> jQuery(document).bind('gform_post_render', function(event, formId, currentPage){if(formId == 38) {} } );jQuery(document).bind('gform_post_conditional_logic', function(event, formId, fields, isInit){} );</script><script type='text/javascript'> jQuery(document).ready(function(){jQuery(document).trigger('gform_post_render', [38, 1]) } ); </script>