The Difficulties Encountered in Developing Software
The Difficulties Encountered in Developing Software
Brooks,
Jr.’s No Silver Bullet
“Building software will always be hard; there is inherently no silver bullet.” Software entities
are more complex for their size than perhaps any other human construct. Many of the
classic problems and challenges of developing software products derive from complexity
and its nonlinear increases with size such as: 1.) Difficulty of communication among team
members; 2.) Difficulty of enumerating; and 3.) Difficulty of overviewing. Hence leading to
accidental difficulties such as: product flaws, schedule delays, budget breaches, unreliability,
and impeding of conceptual integrity. These difficulties cannot be simplified out by
redesigning a software alone. A software of a system embodies its function or features, and
the function is the only part that has or feels the most pressures of change. High costs of
change are in fact encountered when building a software or project, and this serves to
simplify the complaints or reduce intensity of the project itself. The pressures of expanded
functions come from users or clients who like to go beyond the original domain and invent
new uses for it. By that, software must be conformed to extended vehicles of uses and
opportunity.
In diagramming software structures, they can be very complex and a superimposed such as:
data and control flows, dependency patterns, time sequence, and name-space relationships.
Software is invisible and inherently unvisualizable. They do not help or allow the mind to use
some of the most powerful conceptual tools such as geometric abstraction tools. Even
though progress is present in simplifying the structures of a software, they are still
inherently unvisualizable. This lack not only hinders the process of designing or developing,
but it severely slows down or blocks communication among minds. Moreover, when
elaborating high-level languages- which is one of the past breakthroughs in developing a
software, creates a burden that increases the intellectual task of users who are rarely using
esoteric constructs. Other than that, when a solution is encountered in the process of
developing a software, such as object-oriented programming; difficulties are also faced in
order to make the project successful. The management of complexity and the abstraction of
details in software design and programming is one of these difficulties.
Artificial Intelligence is commonly used today. However, some abstraction and creativity
involved can only be generalized from limited data, which can be a challenging task.
Defining the objectives and requirement of AI systems requires developers to have a precise
knowledge and well-thought understanding of the problem they are trying to solve and what
they want the system to achieve in order for them to clearly define what the system is
supposed to do. The generation of a program for solving problems from a statement of the
specifications of the problem or “Automatic” programming can be a powerful tool too, which
is most effective when applied to problems that align with its right or favorable properties,
but can also primarily revolve around the diversity and complexity of problem domains
which limits scalability and software quality. On the other hand, with program verifications,
they require a lot of work that only a fewer substantial programs have ever been verified.
The hardest part with the software task is specifying the requirements and ensuring their
accuracy, and also the debugging of the specification.
While modern workstations and other solutions for the software difficulties have improved
efficiency in a lot of aspects of programming environments and editing documents, there are
still numerous challenges or difficulties related to complexity of tasks such as the need for
effective communication and problem-solving, the time constraints, and limited resources.
With that, Brooks believes that the conceptual components of the software tasks are now
taking most of the time. In modern software development, time and effort is spent on the
high-level thinking, careful planning, and problem-solving which are critical for the success
of software development. The most possible approach and solution for constructing software
is by not constructing it at all. The hardest part of developing a software system is deciding
what to build especially when clients do not know what they want, even when working with a
software engineer, what specifications should be specified, and what requirements should
be corrected. In order to get good designs or ideas, designers should follow good practices
instead of poor ones. “Software construction is a creative process.” This underscores the
significance of individual insights, creativity, and skills in developing a successful software.
While sound methodology is essential, it’s the designer’s passion, effort, and creative
perspective that elevates a design from good to great.
Reference/s
[1] Brooks, F. (n.d.). No Silver Bullet –Essence and Accidents of Software Engineering.
ResearchGate. http://worrydream.com/refs/Brooks-NoSilverBullet.pdf