![](https://software.intel.com/sites/default/files/managed/97/d1/ISS_developer.jpg)
Developing embedded devices is becoming more and more complex as sensing, compute, memory and communications technologies rapidly evolve. Here, I’ll highlight some of the challenges of software development for devices, as teams cope with shrinking timelines, scarce resources, and rigorous requirements for quality and performance optimization.
In case you feel a bit overwhelmed, rest assured there is a solution with the strength of Intel’s edge-to-cloud ecosystem behind it. More on that, later.
Complexity is a Double-Edged Sword
It seems only yesterday when I was spending hours writing assembly code on Intel 8051 board to make a rudimentary device blink its lights. When I started using compilers, it seemed for a while that all fun was lost. But I could still type long command line statements. Then came Integrated Development Environments (IDEs) and I had to get comfortable with few easy clicks of edit-compile-debug and extremely visual workflows. Reflecting back, it seems I derived pleasure in building my device one brick at a time, being in full control at all times on every line of software. Fast forward, in less than 10 years, I had to give up my urge to understand and hand optimize every aspect of my code.
Today, it has been replaced with – OMG, how am I going to ever understand and optimize a million-plus lines of code, running on multiple cores using multiple threads, across an interconnected mesh of devices. The fact that more than 95 percent of the code was written by hundreds of unknown entities, frankly, scares me. Thankfully, my device is providing far more useful value than just blinking LEDs.
I am sure, your experience as a software developer must be no different. Like death and taxes, fundamentals of software development and your compensation (adjusted for inflation) have practically remained the same. On the commercial front, more intelligent devices with higher software complexity do not necessary command a higher price in market. Consequently software development is under tremendous pressure to deliver value within time, budget and quality constraints.
Three Pressures Squeezing Developers
Three things have to come together for any development effort to succeed: timelines; optimization; and resources. This is true for any modern industrial product. However software development is uniquely different from most manufacturing. It is a perfect blend of art and science in what ultimately gets produced. Unlike a typical manufacturing line stamping out car parts, every software program developed is unique and in many ways, a reflection of you as the developer. While very satisfying, there is always the opportunity to optimize your software—and nearly always, multiple opportunities to find bugs. When dealing with a very large code base and multi-featured hardware, it becomes a challenge to deliver quality software within time constraints, limited resources, and software that is optimized for quality and performance.
![ISS 2018 3 Pressure ISS 2018 3 Pressure](https://software.intel.com/sites/default/files/managed/f3/0a/ISS-2018-3-pressures.png)
Most commercial companies have to constantly catch up with technology and market innovations, maintain price points and deal with intense competition. It is no surprise that most development teams are under constant pressure from squeezed timelines, limited resources and rigorous optimization requirements. Despite all that, developers are still expected to produce bug-free, high-performance code. If the developer team struggles with even one of those pressures, it impacts overall output and puts the product at risk.
Mitigating the Pressures on Development
If this resonates with your situation and project, you can mitigate these pressures by selecting the right set of tools for your project. Tools are your virtual team members, doing all the work that you don’t want to do. To select the most optimum tools, I recommend a three prong strategy
- Prefer adoption over assembling, or even building your own
- Ensure that you have covered every stage of your development
- Choice of tools should be future proof
Every development team has to struggle with "build vs. adopt" decisions for their project. However for development tools, it is generally not a good idea to spend precious time, resources and mindshare in building your own tools. Building your own tools is only half the effort. To maintain them over a long period of time with constantly changing technologies becomes very expensive. A simple rule of thumb is, "If your effort does not add any unique value to your end product that can be monetized, let someone else do it for you."
When making tool decisions, review each section, and stage of your development. Ensure that you have tools that cover the needs of developers working on every development stage. It takes a team effort to produce a complex software project, and you want to optimize every stage, avoiding weak links in the process.
The one strategy that I would pay most attention to is reviewing that your development tools are future proof. Technology evolution and market demands never cease. For example, new processors come out with new features, and you want to take advantage of them as soon as possible in compilers, debuggers and libraries.
Innovation Today and in the Future
While I miss the happiness I used to get by blinking LEDs by writing to registers, I think it is a golden period for software developers. Software development, especially for embedded devices, is very complex, but tools like Intel® System Studio are specifically designed, and constantly updated, to help address the complexity.
Get started now with a free download of Intel System Studio 2018. You get a 90-day renewable commercial license with community support, and there is no cost, ever. The solutions that can be applied and optimized by this tool suite include digital security and surveillance, 5G, networking, industrial, data storage, healthcare, retail, smart homes/cities/buildings, automotive, and office automation.
In future blogs, I will drill-down into the details of device and IoT solutions developed with Intel System Studio 2018. You will learn how device manufacturers experience shorter development and validation cycles, system integrators optimize software stacks faster, and IoT application developers efficiently deliver new capabilities with access to cloud connectors and sensors for edge-to-cloud solutions.
You may know us for our processors. But we do so much more. Intel invents at the boundaries of technology to make amazing experiences possible for business and society, and for every person on Earth.
Harnessing the capability of the cloud, the ubiquity of the Internet of Things, the latest advances in memory and programmable solutions, and the promise of always-on 5G connectivity, Intel is disrupting industries and solving global challenges. Leading on policy, diversity, inclusion, education and sustainability, we create value for our stockholders, customers and society.