Objexx Design Process
Excellent design is essential to successful solutions to complex technical software projects. Objexx has the experience to produce innovative designs that can be built efficiently and yield robust, maintainable, high-performance applications. The core elements of the design process are described below.
The design process starts by working with the client to identify the project goals, requirements, and preferences. Additional information about unstated secondary goals, dependencies and priorities of goals, and any flexibility in the goals or requirements are elicited during this phase as well.
Design should be driven by the project's specific requirements and challenges. The assessment phase involves evaluating alternatives for key aspects of the solution. This can include overall project strategies, sequencing, languages, libraries, and tools. A careful assessment process enables smart, innovative strategies for each project.
The assessment phase might look at any of these:
- Strategy alternatives: identify key factors enabling or hindering meeting goals and strategies.
- What type and granularity agile process is best suited to the project?
- Which systems are most important to prototype first?
- Which design choices are the most difficult or critical?
- What aspects of the design are clear up front and which will need to evolve during development?
- Technology evaluation: languages, libraries, and tools. This could include a consideration of questions such as:
- What language is best suited to the technical requirements and client environment?
- Would a hybrid (multi-language) design allow sufficiently greater development efficiency and code extensibility to justify its downsides?
- Which computational, GUI, and visualization libraries are best suited to project needs?
- Is a cross-platform solution needed or can platform-specific tools be exploited where beneficial?
- What collaborative development system is best suited to the project, such as GitHub, GitLab, Bitbucket, or Trac?
In the planning phase high-level project milestones are created and scheduled. This will typically require a few iterations to finalize. A schedule of meetings, demos, progress reports, and deliverables is also established. All milestones and schedules are set up in the collaborative server.
The software design phase begins with a focus on key high-level components and those necessary for early milestones. Software design is an ongoing process throughout an agile project. Design at Objexx exploits object-oriented techniques with a focus on high performance. Documentation is created as a by-product of the design process.
Objexx high-level designs are generally informed by an object-oriented approach even when the code won't be constructed in a pure object-oriented manner. This helps manage the complexity of designs and provides tools, such as the Unified Modeling Language (UML), for building and documenting the design.
Good object-oriented designs are highly modular and extensible:
- Decoupled interface-based designs.
- Pluggable modules and types.
- Patterns to construct powerful systems with a standard "language".
- Best practices for lifetime, ownership, and dependency management.
Computational algorithm and data structure design is, of course, critical to technical application performance. Objexx brings its extensive experience and skills to crafting robust and high-performance solutions. Cache-friendly data access in hot spots is critical on modern CPUs. Vectorization and parallelization in hot spots can be important for application performance and must be supported by the design of data structures and computational algorithms.
Capture of key design reasoning and subtleties is a vital part of any project. Design can be documented in a number of ways depending on forces such as communication and efficiency. High-level and complex subsystem design is often documented in UML diagrams accompanied by design documents. More fine-grained components are often described in a design document, with the code and comments serving as the detailed documentation.