Endertech’s Theory of Software Development

What is Great Software Development?

Great software development will quickly produce systems that work reliably and efficiently. Great software development stands upon the shoulders of the great software that has come before, it does not reinvent the wheel. Great software development is driven by great design coupled with efficient and forward thinking project management.

So there’s the elevator pitch, you can tell great software development from it producing correct, fast running results, within a relatively short period of time even when facing moderately changing circumstances. You achieve this through smart design & planning, executed by experienced developers and project managers who know how to look ahead and make intelligent decisions about development priorities.

How do I achieve Great Software Development for my project?

Be sure that your development team has a clear vision for the desired end results. You can receive a bit of inspiration regarding this from our theory on web design section, which has concepts that apply to planning & design in general, but to sum it up… your programmers tend to be logical creatures more than visual creatures. If you verbalize a requirement to them, they’ll probably make it happen *technically speaking*, but the interface and the user experience may not be quite what you had in mind. You really need to deliver your software developers a painted picture so there is as little ambiguity regarding desired end results as possible.

If you engage an agency to help you develop this painted picture, be sure that agency has not only marketing & visual design experience, but that an experienced software engineer is involved as well. The purpose is to ensure that the visual designs imagined are feasible, and fit your budgetary and time constraints. In truth, expert software developers can make pretty much *anything* happen, but that doesn’t mean you can afford it, or that the design is particularly efficient from a software development point of view. Involve your engineers in the design process and you’ll reap the benefit of smart visual AND technical design.

Beyond these high level strategic approaches, there are some tactical practices that can increase your success.

For instance, be sure your software engineers are using well-established software development frameworks. In the web world, for custom apps, the backend would be something like Symfony, or Rails, or Django. The front-end might involve a templating engine like Twig, a JS front-end like Angular, and a CSS framework like Bootstrap.

Using these frameworks helps to ensure your developers are following industry best-practices, like the MVC (model view controller) pattern, Service Oriented Architecture, and other software engineering design patterns that have been long established. Proper use of these frameworks help to ensure components of your system remain decoupled, so that as your software changes and evolves (and your software *will* need to change and evolve over time), that change process can be more easily managed, without wide-scale need to refactor.

Another good idea is to ensure your engineers are utilizing an ORM or ODM system. These acronyms stand for Object (Relational | Document) Mapping. Most modern software architecture is object-oriented, yet most data storage structures are not. Object oriented programming is a really wise and efficient way to organize and write software, and relational / document databases are really wise and efficient data storage mechanisms. ORM / ODM ‘s manage the interaction between the software and the data store, enabling object-oriented ways to interface with relational and/or document storage engines.

The results of using an ORM or ODM compared to hand-built database querying is faster development, faster adaptation to data structure changes, more consistent database interactions, and automation of the most common and trivial database interactions, helping to avoid reinventing the wheel.

One final tidbit we’ll share for now relates to how the project is managed. The agile software development method is probably the smartest approach available for most projects. The core principles of agile software development include developing features by order of priority, time-boxing feature development into “sprints” each between 1 and 4 weeks, daily scrums to stay apprised of developer progress and challenges, client check ins that bookend each sprint, and an understanding that priorities and requirements will change over time.