Software Engineering is inherently complex, atleast to the software developers. This is because the purpose of software engineering is always always more than just technical – to solve some real world problem. That is why it is very important to realise the problem that the software is attempting to solve.
Multiple Solutions
Just like in the real world, there can be more than one answer to a question, there can be more than one ways of solving a problem in software engineering, especially after so many man-years in the software industry have produced multiple technologies and programming languages that fit the bill.
Andrei Alexandrescu says in his book – Modern C++ Design – “Software engineering, maybe more than any other engineering discipline, exhibits a rich multiplicity. You can do the same thing in many correct ways, and there are infinite nuances between right and the wrong.”
Not only because multiple solutions exist, but identification of multiple solutions is important to qualify one of them as the best. This concept of multiple solutions applies right through the software development lifecycle – from the macro of architecture to the micro of individual line of code.
Lateral Thinking
Lateral Thinking is a problem solving approach that tells you to think in multiple directions.
“You cannot dig a hole in a different place by digging the same hole deeper”. This means that trying harder in the same direction may not be as useful as changing direction. Effort in the same direction (approach) will not necessarily succeed.
Edward De Bono, who invented this term, says that Lateral Thinking is for changing concepts and perceptions. It asks you to change your point of view and then think about the problem. Lateral Thinking applies to all the walks of life, and a lot to Software Engineering.
By definition, Lateral Thinking makes you think about the same thing from different points of view, all of them being right in their own way. In this process, a software engineer can discover factors that had not been considered earlier. The factor can be one of the requirements, one of the stakeholders or a business constraint. Sometimes such thinking can change the composition of all these factors and change their priorities, affecting definition of the problem sometimes. Lateral Thinking puts focus on the problem so much, that we automatically distinguish the problem from its solutions, i.e., distinguish what from how.
When the system is being designed, Lateral Thinking can help build relations between the different modules involved. In case of Object Oriented Programming (OOP) it can help in designing different objects and communication between them. Thinking from different perspectives also helps gain an abstract understanding of the problem, or the generic definition of the problem that we had discussed in Adaptive Programming.
As Andrei Alexandrescu says, “The design of a software system is a choice of solutions out of a combinatorial solution space.”
Lateral Thinking can provide this combinatorial solution space. The choice of the right solution then depends on all the different factors, sometimes the budget is more dominant, sometimes the deadlines overrules everything else, or sometimes it is simply the skillset available. The subject of choice of the right solution deserves its own space of discussion.
In a nutshell, Lateral Thinking allows you to think in multiple ways, from multiple directions – including non-traditional ones, enabling out of the box thinking to create innovative and effective solutions.
Copyright Abhijit Nadgouda.

March 18th, 2006 at 11:41 am
“Lateral Thinking” will be defined by different people in different ways at different points in time. What we say is “Lateral Thinking” today can/might not be the same tomorrow!!
March 18th, 2006 at 11:51 am
Hi Prathap,
I agree that the concept of Lateral Thinking will evolve, and so its definition. I believe that the notion will be associated with thinking from basics, which sometimes causes change in perception. Whether tomorrow will change Lateral Thinking or evolve into something different is a subjective matter, these concepts will still apply to software engineering though.
April 7th, 2006 at 10:09 am
Yes. That’s right. Lateral thinking WILL apply to software engineering processes and systems development. It will apply to all places where the work involves both science and art. For example, software engineering is both a science and an art!
April 13th, 2006 at 5:15 am
hi there,
thought you might like to know (for the people in the region) that Mr de Bono will be coming to Australia! he will do a one-day seminar in Melbourne and Brisbane somewhere later this month.
I am thrilled!
cheers
April 14th, 2006 at 7:55 am
Cool, lucky you! I wish I could have been there.
May 22nd, 2006 at 9:56 pm
[...] Software solutions require more and more out-of-box thinking, solutions that are not run-of-the-mill but innovative and original. TOC can provide answers to the basic questions leading to an unique and effective solution. Use of TOC can also provide pragmatic solutions in project management. [...]
June 15th, 2006 at 11:40 am
[...] Lateral Thinking and Software Engineering [...]
September 22nd, 2006 at 9:22 am
[...] Software solutions require more and more out-of-box thinking, solutions that are not run-of-the-mill but innovative and original. TOC can provide answers to the basic questions leading to an unique and effective solution. Use of TOC can also provide pragmatic solutions in project management. [...]