Download our synthetic case study (.pdf, 84 Ko)
Our extensive experience with software engineering allows us to offer unique insights into ways to improve your practice of development. Our perspective on
this matter has led us to developing our own methodology with an explicit focus on encompassing the whole development pipeline, favouring pragmatism over
dogma and, most of all, adapting to your environment:
A multi-faceted analysis: in order to analyze the full development cycle and its various interdependencies with your business
environment, Sycomor conducts an overview of your practice along eight distinct axes and their inner couplings, grouped as two main facets (structures
and operations), allowing for a synthetic description of your activity and methods.
An aggregative approach: rather than stay captive to a single method, Sycomor draws its insights from
multiple sources (e.g. lean management, rapid application development, agile methodologies), evaluates their relevance to your practices and integrates
them into a unique and homogeneous solution.
This section succinctly describes the main analysis axes that we follow on during an audit.
The structural analysis section aims at conducting a thorough overview of the general environment (organisational, human, technological)
in which your software development activity takes place. Adjusting some of these structural variables to better further your goals may be a potent way of
improvement because they impact, by nature, the very core of your activity and the way it integrates into your business logic.
Structural evaluation can be synthesized along the following axes:
Organization: development team structure is a possible venue of productivity increase if it allows for a better use of
available resources by leveraging existing skillsets, increasing team commitment by the attribution of adequate responsibilities, clarifying the chain of
responsibility in decision-making or arbitration processes, and facilitating the emergence of new projects with the explicit definition of associated resources.
Suggested course of action: optimize your team structure, define chains of responsibility, explicit and specify job descriptions.
Human resources: human resources are obviously a key factor in successful development projects. Rational
use of skills and resources is beneficial to both your company and your team members. An integrative view of available skills can help the emergence of
new and improved practices, detect gaps or redundancies in your team's technological portfolio, and facilitate knowledge and skill transfer.
Suggested course of action: technical skill inventory, collective training sessions, internal training sessions, expert profile recruitment.
Project management: while not specific to software development, sound project management methods remain a
major source of quality and efficiency for any project. The implementation of project monitoring tools, definition of efficient communication channels
(able to transmit relevant information without becoming needlessly time consuming), the rational organization of meetings are so many elements that help
ensure a fluid transfer of information and knowledge across your structure, a higher reactivity when faced with unpredictable change or your company
needs evolving over time.
Suggested course of action: selection of collaborative monitoring tools, project management methodology, operational meeting methodology.
Technical environment: technological choices are an essential part of a development project specifications
and will significantly impact not only its implementation but also its final capabilities (notably performance, scalability, evolutivity and maintenance).
While early adoption of emerging technologies may come at too high a cost in an industrial setting, technological stagnation, often due to historical rather
than technical causes, can be just as damaging. A solid middle ground approach, based on the evaluation and thorough testing is therefore the best way to
yield good cost-benefit ratios when integrating relevant technological upgrades but can only be achieved through a continuous and well-focused technology watch.
This technoloical overview will obviously have strong implications for the
operational facet of our diagnosis.
Suggested course of action: technological overview, evolution suggestions (programming languages, development frameworks, third-party functional
libraries, computer-assisted software engineering [CASE]), targeted technology watch.
The operational facet of our analysis deals with the more practical aspects of development so as to help you turn your current development
activities into an industrialized process with a strong emphasis on quality, robustness, performance and scalability. Operational analysis can be summed up
in four complementary evaluation modules:
Methodology: while an abundand literature dealing with development methodologies already exists for your perusal
(waterfall, agile methods, rapid application development, etc.), our experience has led us to conclude that blind application of any method can end up being
exceedingly costly, especially for companies or structures of intermediate size, whose core business is not necessarily software engineering. It is therefore
our belief that we need to adopt a more practical approach to this issue by privileging the integration of methodological elements that will offer the
most added value, with the lowest cost, to your activity.
Suggested course of action: development cycles, definition and formal communication with business units, progress indicators, collaborative
practices, refactoring, testing and test-driven development.
Development practices: any project will largely benefit, on the long term, from the application of good
programming practices (GPP) to its code base. Quality code will facilitate maintenance, both corrective and evolutive, knowledge sharing and refactoring.
Suggested course of action: static and dynamic analysis, CASE solutions, collective definition of
common practices.
Design and modeling: our experience shows that, even within the context of short development cycles, the
design and modeling phase is major factor in determining overall quality and productivity: a well-designed data model will limit the cost of refactoring to
unforeseen changes and will play a major role in determining application performance, robustness and scalability.
Suggested course of action: rigorous application of modeling tools (UML), model review, forward engineering.
Resource pooling: resource pooling (in its most general sense, which includes code and API pooling) is a
major source of productivity gains and development quality increase. It allows for the centralizayion of critical components, ensures they will evolve
consistently across all your projects and applications, reduces maintenance costs of your codebase (including testing and documentation) and ultimately yields
significant time savings because quality components are reused rather than reimplemented. This kind of initiative may also be applied to the sharing of
external tools and libraries if they present a demonstrable transversal value. It is nevertheless one of the main weaknesses of most development
platforms, due to a lack of internal communication and global visibility, and warrants therefore our attention.
Suggested course of action: functional inventory, collaborative code review, internal communication, common library development.