DIY=<develop/> it yourself
As a frequent Microsoft Excel user, it impressed me when I listened how electronic spreadsheet was born from Dan Bricklin, one of the two inventors of it. It also inspired me to write this article.
In his TEDx speech, Dan Bricklin tells how and why they developed VisiCalc, predecessor of MS Excel. Since I don’t want to spoil the TEDx speech, I’ll simply tell that it was for their own “need”: Making sequential and dependent calculations easily and rapidly. But they developed it in such a way that, it won’t require any computer programming skills to use. It enabled any regular person to design and customize a set of calculations with a visual interface analogous to squared notebooks.
As being “customers" with developer skills, Bricklin and Frankston created a tool which is perfectly aligned with their expectations. But that’s not case in most of the times. I mean, customers, usually, do not have a programming skills. Instead, there are programmers to develop tools for customers. So, in order to ensure customer satisfaction, it is necessary to align customers (“need”) and developers (“product”). In this context, two approaches can be considered:
- Translating expectations of Customer for Developers, or
- Turning Customers into Developers.
For the first method, there are various methods to understand actual need of customer. Then the need is rephrased in a such a conceptual way that a developer can design the right solution or product. A well-known example would be Design Thinking. Such methods are capable of defining the “need” even beyond customers’ expectations.
In this article, I would like mention about the other way: turning customer into a developer.
In the past, computers or other tech devices was not affordable by the vast majority of the population. The ones, who have accessibility to computers, were passive users of already developed products. Computers were limited in hardware resources (RAM, ROM, Processor speed). Software developers should take care of each byte while programming.
Now, computers (including smartphones, tablets) are affordable and hardware resources are not major concern in software development. Moreover, high bandwidth internet and cloud infrastructures enables using remote resources seamlessly. All these advances in technology allow more space to customers to become active users and contributors.
Let’s take a look at some instances.
Have you seen Lego® Mindstorms® ? Well…they are simply new generation toys with programming capabilities. Mindstorms consist of several sensors, actuators and a control unit where algorithms run. Sensor and actuators can be put on Lego bricks to make any moveable device with a algorithm running behind. Lego Mindtorms comes with a visual programming interface, by which kids can develop visual algorithms to control their robots and execute consecutive tasks. Behind this simplicity, there exists an Arm Cortex-A9 processor running at 300MHz with a Linux operating system. Normally, programming such processors requires extensive knowledge on the microcontroller programming. But, do the kids need to wait for graduating from an engineering faculty just to have some fun with robots? Definitely not.
Let’s take another example from control engineering. After designing a control system,a control engineer needs to implement the control algorithm on a hardware. In order to that, algorithm should be written C/C++ and compiled to run on a specific processor. So, a control engineer needs to develop skills also in embedded programming or ask someone else who can. It takes too much time to see the results of the design and it requires many engineers. There are some solutions which enable changing control parameters dynamically thru a pre-developed interface, but it still limits flexibility in system level design. Now consider embedded code generation with Matlab/SIMULINK®. It enables graphical programming by building block diagrams and defining interactions between them, even for very complex mathematical calculations. Once the model is developed, the C/C++ code can be generated automatically for the embedded system targeting specific processor. No more handwritten codes! Control engineer does not need to excel in embedded programming in order to develop a control algorithm for any system. S/he can quickly evaluate the results on a real hardware and keep developing.
These two examples were based on automation or simplification of development steps. What if we put some artificial intelligence (AI) in it? A fascinating example is about website design utilizing computer vision and AI. It’s under development though, but it's a promising tool by Teleport HQ. In the demo video on YouTube, the customer draws wireframes the website on the white board, AI generates the source code and actual design simultaneously.
All these examples have a technological enabler behind, ranging from core programming to artificial intelligence. Each of them not only enables customers to develop what they need, but also shortens the time to the solution. Hence, overall customer satisfaction increases. Complex and dependent systems may still require several engineers working on the projects. Perhaps, in time, AI would be taking care of complex systems too. Can we imagine a world where an AI is handling all the coding and development, while we narrate what we need?