Software development and design is part art and part science, but which part wins out in most projects? It seems even the most prolific developers disagree.
Capers Jones, software quality expert, says it is 90% art and 10% science.
“There’s no way to prove [software development] is a science. There’s no board certification,” he said. “Eventually, it will be board-certified, but for now, the knowledge of quality today is roughly the same as doctors had before sterile procedures.” He added that it will be a combination of calls for certification from vendors and end users that will ultimately change the process of development.
Standardizing the development process, as well as requiring software developers, engineers and designers to take a variety of tests and certifications, will, in Jones’ mind, help make software quality better.
Jones believed a stricter and more standardized certification process is most needed for mission-critical projects, such as medical devices, aircraft, and in the financial sector and beyond. Today, he said, the FDA certifies medical devices such as hearing aids and pacemakers, and he believed that is a step in the right direction.
This certification process makes the software development process more scientific, Jones said. Science, according to Joe Pezzillo, cofounder of Push IO (a mobile cloud services platform), is based on one’s ability to create a pattern based on a repeatable formula that almost guarantees a common end result.
Pezzillo said that a successful software project “depends on how closely [art and science are] balanced and how one dominates the other in a specific ratio.” He said it also varies by type of software.
“If you’re working on a piece of financial software, the science should be perfect. This type of app doesn’t allow developers to express themselves. You don’t want to try out cool, new things in a financial application,” he said.
Much creativity in mobile
Mobile applications seem the most creative to end users, Pezzillo said, because developers are charged with transporting users to another world, a world that really is only limited by a developers’ imagination.
Mobile devices, in Pezzillo’s opinion, are much more immersive, and yet the science still has to be correct.
“GarageBand is so amazing because it is creative, but the science still has to be right,” he said. “You don’t want to hit the G key and get an A chord. But end users wouldn’t want to see a graph of these notes either; they’d rather see the piano user interface.”
The creativity of these applications feels strong because of all the things developers are able to do with the same “rectangle,” as Pezzillo called today’s devices.
There are literally millions of applications, and yet each one is aesthetically different while still performing with scientific accuracy.
Wallace McClure, lead consultant at Sustainable Development, said the best developers are the ones who understand both sides of this argument.
“I have always felt that software development is a little bit of science/engineering and a little bit of art rolled up together,” he said. “It is like building a building. You have to understand many of the basics of the building will fall over. You also need to have architects, which are charged with the visual/artistic aspects of a building.”
#!
Addressing end users
Building software requires team members to understand the basics, he added. “You have to understand sorting, threading, async operations, user interfaces controls, database constructs, and many other items. These are important base items that we as developers must know.
“At the same time, developers have to have a ‘vision.’ Typically, this term ‘vision’ is associated with art or many other terms. This art/vision type of thinking really helps in the ability to look beyond logic.”
Pezzillo agreed that developers should have some engineering and artistic background. He said design is not just about how the application looks, but it’s also about how end users feel when they’re using it.
“Design is about purpose. How easy is the application to use? How does it render visually? And then you get into user experience stuff as well,” he said, adding that designers are not scientific and yet produce scientifically accurate applications, which is where that precarious balance between the two comes in.
Robert “Uncle Bob” Martin, president and CEO of Object Mentor, agreed with McClure and Pezzillo.
“Software engineering [and] software development crosses the boundary [between art and science], because within a framework of rules, there’s a lot of freedom for humans to form something that is beautiful, something that transcends the mathematics, something that is greater than the sum of its parts,” he said.
Martin added that agile methodologies focus on the human element and on the craftsmanship, and that perhaps the pendulum has swung a bit too far in that direction at this point in time.
“In the 1970s and 1980s, there was a such a focus on the engineering element that the creative element was almost drowned out,” he said. “Now, there is such a focus on the agile processes, which rely greatly on the creative.” He added that there needs to be a balance between the two in order for all projects to be successful.
Martin suggested thinking of software development as martial arts. “There are lots of rules and principles in martial arts, but the exercise of it is very human and beautiful,” he said.
Ivar Jacobson, father of the Rational Unified Process, said art and science really don’t define the overall process of developing software, which he referred to as software engineering.
The term “code engineering,” Jacobson said, implies that everything done in the process—from gathering the requirements and an understanding of who will use it and how it will be used—will be expressed in code, which is rarely how any of the methodologies function. Because of this, he said, software engineering is the most appropriate term for what is done by developers on a daily basis.
“It is more like a craftsmanship, based on experience, skills and talent,” Jacobson said, adding that as with any craftsmanship, everyone is not necessarily gifted with the same skills nor do they possess the ability to do the same things.
“You need to know ‘how’ to do things, and in some cases you need to do things [like reviewing requirements, developing and testing] in a sequence. You learn the best way to develop as you go,” he said.
#!
Educational adjustments
Much of today’s engineering work is automated, Jacobson said, so many developers are talented, but their talents are not necessarily used on the coding part of development. The business processes are also an important part of today’s work, which takes another set of skills, he said.
Most learning, according to Jacobson, is done in the work world, but it should be done through a developer’s education. Many in the community, including Jacobson, are working toward aligning the education of software developers with the reality of the profession.
A group of senior-level developers are currently working toward a standard by which software developers can be measured, something that can help employers ensure they have hired someone who is fluent in the craft, according to Martin.
“There is a growing movement toward apprenticeship in software development,” Martin said, adding that Ken Auer just started an academy to promote this sort of activity. Martin said this is a worldwide movement, with several different academies already established in the United States.
Auer began his program through RoleModel Software in 1998 in his North Carolina offices, and he has continued to grow the apprenticeship program to what it is today. RoleModel Software Academy recently unveiled a new model to train developers, and will begin its first semester in May 2012.
Martin said regulations will eventually be established, although he is not sure if it will resemble the way doctors and architects work, or if it will be more like the way electricians and plumbers work.
In the end, Jacobson said beyond an art or a science or a craftsmanship, it comes down to individual talent: Some developers can create certain types of software while others can’t, which is why so many work in a team to create an overall successful project.
Chris Gunther, cofounder and developer at Room 118 Solutions, agreed with Jacobson.
“I believe software development is not an art, but rather a craft as it is ultimately defined by its ability to solve a need for an end user,” he said. “Beautifully written code doesn’t count for much when it fails to solve the needs of the end user, and vice versa; poorly written code will have little negative effect on the end user when it successfully solves their needs.
“I think the craft side of software development becomes more of a necessity when working alongside other developers. Code that clearly reflects the domain model and is well organized becomes self-documenting and allows fellow developers to collaborate and understand the domain much easier.”
Gunther believed that science plays a role in development, but mainly due to the experiments used to find the perfect combination of code and the fact that developers are always building on top of older theories and ideas.
Pezzillo said some designers will also be scientists and vice versa.
“Some engineers and designers are one and the same, like Leonardo Da Vinci. There will always be people who embody both aspects in a strong way,” said Pezzillo. He added that in today’s world of downsizing, developers need to continue to improve their skills, both artistically and scientifically.