Designing and developing successful software products is difficult.
Steve McConnell identified determining the solution to a complex software design as a “Wicked Problem”, where the problem/solution often cannot be clearly defined until you have solved it. Our team has a long history of developing complex software products so we know first-hand how accurately this describes the reality of our industry.
The challenge before us is not to transform the nature of software development, but to develop processes and practices that allow us to effectively manage the complexity and uncertainty that is intrinsic to software development.
We used our years of experience and knowledge in software development to assemble a framework that we rely upon to “attack” each new challenge in a familiar, predictable, and controlled way.
Our software is architected based on principles, processes, patterns, and values that:
Allow the code to withstand change
Increase the quality of the finished product
Save us from “building it the right way” later on
Always Have a Plan
You would never build something as complex as a house without a set of plans to guide the construction. We believe the same is true for building software that is developed and maintained by teams.
Expect Change to Occur
Requirements will consistently change in form and in priority, so we use iterative/Agile approaches for development and releases. It is also why we design our systems to allow for change to occur.
Layered Approach to Quality
There is no one software practice that will find every bug. That is why we employ a layered approach to quality that includes automated unit/integration testing, code reviews, pair programming, etc.
Hierarchy and bureaucracy are rarely beneficial in creative endeavors, which is why we promote accountability and decision-making at both the individual and team levels.
Proven Patterns & Designs
Few problems require novel solutions. That is why we strive to adopt proven patterns and designs whenever possible. We develop from first principles when absolutely necessary.
No two projects are identical, so no single approach to design and project management is ever appropriate. That is why we adapt our processes and practices to each new project.
Software engineering is our passion.
Talking about the various facets of software engineering is what we love, almost as much as actual development.
So we could give you bullet lists and flow charts to explain how we do what we do, but sometimes it is better to hear it directly from us.