Smart Software Strategies: SPLASH 2015 Workshop Report

SPLASH 2015, Pittsburgh, PA
October 25, 2015

Workshop mission

This workshop explored the technology and education issues that will arise in the wave of new "smart" application and devices.

What are the main issues that we discussed?

Workshop raw notes

The complete workshop "raw notes" are available as a text file -- see

Workshop initial discussion

We had many questions in the initial discussion:

In the workshop, we explored four major questions:

  1. What is the "core knowledge" that software professions need today?
  2. How should we change the teaching process to train good developers?
  3. What is the potential impact of Internet of Things?
  4. How can we promote information sharing and effective root cause analysis?

Issue 1: Core knowledge for software professionals

The discussion had a heavy emphasis on soft skills

These skills are at least as important as the technical "program writing" skills.

Also important are "systems thinking" knowledge and techniques:

The top knowledge areas for doing effective development of complex distributed systems are:

  1. problem solving; discrete math; abstraction (Note: "discrete math" is a common university mathematics class that combines probability, combinatorics, graph theory, game theory, and other similar post-algebra math training -- not including calculus, but very useful for doing work in software analysis and design)
  2. needs analysis; dealing with customers; team management [key soft skills for product development]
  3. ethics
  4. economic tradeoffs in design and development
  5. knowledge of standards (promoting interoperability)
  6. best practices in design and development
  7. critical thinking
  8. influence skills (such as Robert Cialdini's book Influence: Science and Practice and Mary Lynn Manns and Linda Rising's book Fearless Change)
  9. programming / languages; frameworks; OSs; testing; data structures

Issue 2: How to change the teaching process

We want our smart systems to be high quality -- and there are some important things to consider in the process of training future smart systems developers:
  1. Search is becoming an important way to acquire knowledge, but there are pitfalls
  2. Training approaches should incorporate "building" as an activity -- it is good to "talk through the construction process" with a mentor or coach (to reinforce a good approach)
  3. Cross-pollination is important in education -- collaboration between industry and academia to build experience and theoretical knowledge; it is good for academics to do some industry work
  4. Tech transfer is a hard process -- there is a lot of knowledge in the heads of the original developers and users of a component -- how can this information be conveyed to the next generation of developers and users?

Issue 3: Internet of Things

Internet of Things -- it is a technology for more than just toy applications:

We identified a large number of "risks" of poor design and poor quality in Internet of Things components and services. Here are the top four items:

  1. Data Ownership is a big issue -- this may become an obstacle to widespread adoption of the technologies
  2. Dangerous assumptions, unsafe development shortcuts -- these may hinder use or reuse of software; how can we learn about *all* of the interactions and dependencies
  3. How to deal with devices that wear out and software that needs to be updated
  4. Users should be able to view the status and activity of their devices and services

Issue 4: Reporting failures and issues; performing root cause analysis

It won't be easy to collect data from IoT vendors and customers, but there might be a good model to follow from the aviation industry: ASRS (Aviation Safety Reporting System) -

Could we institute a similar program for the "ecosystem" of Internet of Things components and services?

Original version: Oct. 29, 2015
Last modified: Nov. 16, 2015