Software design, what is it all about?
Tuesday, July 29th, 2014
In short, software design is the process of turning a client’s requirements into an overall system architecture that will enable the code, once implemented, to satisfy them all. A good design describes a solution to the set of problems the software must eventually resolve.
As in everything, balance is key. Expecting the development team to throw themselves into the programming without giving any thought to the overall architecture of the system is probably just as bad as spending so much time writing design specs that the project is over-budget before it has even started.
In the first case, bringing new team members up to speed on a project is hindered by a complete lack of documentation. While some will argue software should be so well written that no documentation should be required, the reality of most software projects is that budget constraints rarely allow developers the luxury to write software as they would poetry.
Relying on comments in the code is as unreliable as these could be far and few between. Clients should also think about what happens if they decide to out-source their software development to a different company. We have taken over other teams’ work on more than one occasion and unfortunately, the process is often more costly than it ought to have been due to a complete lack of documentation.
In the second case, the documentation becomes so heavy and cumbersome that it holds back any development effort as well as any progress on the project. Costs shoot up and delivery dates are blown – in other words, the project becomes a failure.
Bearing in mind the principles of Agile methodology, at Irontech we believe that evolutionary design is the most efficient way to tackle software design and increase the productivity of our development team.
By evolutionary design, we mean that while the design is thought through at the start of the project, it is not set in stone by the time programming starts. While the majority of the design is discussed in-depth upfront with our clients, we nonetheless acknowledge that most, if not all, software projects evolve during the course of the development.
Thus, our approach to software design is flexible enough to allow the initial solution to be evolved and refined during the implementation process. Agile software development cycles, with incremental releases being provided to the client as the project progresses, mean that we keep an open line of communication throughout a project with regular feedback.
This enables us to incorporate any new requirements, or changes to initial requirements, into our initial architecture until the final software solution perfectly fits our client’s set of requirements.