• Software Architect, 30+ years experience
  • Teams built with integrity and trust
  • Roles: analysts, designers, coders, testers, project managers
  • Creative and productive on-shore and off-shore resources
  • Business analysis and requirements gathering
  • User experience design, wireframes, mockups, photoshop
  • Relational database schema design
  • High quality code construction, reviewed, unit tested
  • Testing: Functional, Automated, Regression, Load, Security
  • Agile project management and technical oversight
  • Mobile, Web, .NET, Java, Azure, REST, SQL, XML, C++, C#
  • TFS, SVN, Balsamiq, Adobe, Visual Studio, Eclipse, Xcode

Computer science pioneer Niklaus Wirth wrote:

Program = Data Structure + Algorithm

My insight was realizing that for a given program complexity, these two are inversely related to each other. Therefore, perhaps it should be written as:

Program = Data Structure * Algorithm

The more sophisticated the data structures, the simpler the algorithm. The more simplistic the data structures are, the more complicated the algorithms must be.

This is a very important reason why the risky approach is to "just start coding". The maintainability (and developability) of the software is proportional to the complexity of the algorithm. In other words, rushing into coding is likely to result in a simplistic, ad-hoc data structure design that will require overly complex code. This increases the cost of development and lowers maintainability and extensibility.

The best approach is to start with analysis and design (definition phase). Plan for design iterations with significant review by stakeholders.