The Practice of Software
There's more to the practice of medicine than writing prescriptions.
There's more to the practice of law than writing briefs.
Software is a practice and there's more to the practice of software than writing code.
At Symphono, we've defined a software development life-cycle which fully encompasses the steps required to deliver a quality product.
To learn more about how we practice software, please step through our life-cycle.
Identifying Your Strategy
A software solution is most effective when it begins with a well articulated strategy. It's our experience that the best first step of the software life-cycle is a strategy definition exercise where the client communicates their business goals, we identify possible solutions and then jointly execute an analysis to build the solution roadmap. This roadmap may include custom software, third-party solutions and in some cases can lead to a reframing of the business goals.
Writing Requirements
A strategy can set the direction but good requirements provide the level of detail necessary for effective and predictable execution. While sometimes undervalued, writing well-defined requirements offers the earliest opportunity for reducing project risk.
We take a collaborative approach to the requirements writing process. This drives out the gap between client expectation and product delivery which, if not eliminated, will ultimately lead to the inflation of cost and project duration.
Design & Architecture
Just like detailed requirements flow from strategy, implementation flows from design.
The Symphono approach to design and architecture is simple; build for today, design for tomorrow. This yields clear, pragmatic, and extensible designs where changes in requirements don't cripple projects.
Our architects' backgrounds and experience is concentrated in designing large, distributed systems requiring the highest levels of uptime and reliability, including trading, risk management, and collaboration systems for global financial institutions.
From Whiteboard to Keyboard
Just as we take a collaborative approach to strategy and writing requirements, the same principles apply when we begin writing code. In our experience, maintaining a high level of client involvement throughout this phase of the software life-cycle leads to the most successful projects.
What this means in practice is that we typically follow an iterative process where code is written and feedback is received from the client in real-time. Just like good, extensible design accommodates change without crippling a project, this feedback loop builds flexibility into the implementation process, ensuring greater efficiency.
Quality Assurance
We work with clients to execute quality assurance in the way that best integrates with their organization. While there are cases where Symphono is responsible for this phase, we are also able to integrate our development team with client QA resources.
Delivery & Rollout
Our combined experience is a valuable asset once a product is tested and ready to be delivered into production. Large scale deployments can be both complex and challenging, and an understanding of production environments is essential to a smooth rollout.
Our engineers have years of experience with production systems. This experience informs their work across all phases of the software life-cycle, from strategy through QA, resulting in the creation of systems which minimize delivery risk. Symphono works with clients to write user documentation and train support personnel to guarantee smooth delivery.
Maintenance & Support
Software continually evolves and delivering projects into production is not necessarily the end. A comprehensive maintenance plan, including long term support as well as ongoing enhancements and defect fixes, is essential.
We approach maintenance in the same collaborative manner we execute the rest of the software life-cycle. Working with clients we have assisted with service agreements to manage post-production development and have even staffed production support teams to ensure long term success for the delivered solution.