<P> Brooks distinguishes between two different types of complexity: accidental complexity and essential complexity . Accidental complexity relates to problems which engineers create and can fix; for example, the details of writing and optimizing assembly code or the delays caused by batch processing . Essential complexity is caused by the problem to be solved, and nothing can remove it; if users want a program to do 30 different things, then those 30 things are essential and the program must do those 30 different things . </P> <P> Brooks claims that the accidental complexity has decreased substantially, and today's programmers spend most of their time addressing essential complexity . Brooks argues that this means that shrinking all the accidental activities to zero will not give the same order - of - magnitude improvement as attempting to decrease essential complexity . While Brooks insists that there is no one silver bullet, he believes that a series of innovations attacking essential complexity could lead to significant improvements . One technology that had made significant improvement in the area of accidental complexity was the invention of high - level programming languages, such as Fortran at that time . Today's languages, such as C, C++, C#and Java, are considered to be improvements, but not of the same order of magnitude . </P> <P> Brooks advocates "growing" software organically through incremental development . He suggests devising and implementing the main and subprograms right at the beginning, filling in the working sub-sections later . He believes that programming this way excites the engineers and provides a working system at every stage of development . </P> <P> Brooks goes on to argue that there is a difference between "good" designers and "great" designers . He postulates that as programming is a creative process, some designers are inherently better than others . He suggests that there is as much as a tenfold difference between an ordinary designer and a great one . He then advocates treating star designers equally well as star managers, providing them not just with equal remuneration, but also all the perks of higher status: large office, staff, travel funds, etc . </P>

No silver bullet – essence and accidents of software engineering