722.3 Evaluation criteria for tool selection

Choose tools based on their merit, not just popularity.

Overview

Selecting a tool or technology for a software project is not simply a matter of personal preference. Software engineers must evaluate options based on how well each tool aligns with project goals, technical constraints, and user needs. In this section, you will learn how to justify your technology choices using structured evaluation criteria. These criteria will be used to support the rationale in your System Design Specification (SDS).

Even though all students are using a standard tech stack—HTML, CSS, JavaScript, Flask, and SQLite—you are expected to reflect on how these tools specifically support the design and implementation of your solution.

Evaluation table: Template

Use the table below to evaluate each major tool in your project. You may adapt or extend it to suit your documentation style.

Tool / Technology

Function in Project

Strengths

Limitations / Trade-offs

Why it's appropriate

HTML / CSS

Build user interface and page layout

Universally supported, easy to style and customise

Requires manual handling of responsive design unless using frameworks

Gives full control over UI, simple to learn and maintain

JavaScript

Add interactivity and handle client-side validation

Runs in browser, excellent for dynamic feedback

Can become complex if not modularised well

Enables responsive UX and supports validation before sending data

Flask (Python)

Process requests and render dynamic content

Lightweight, flexible, integrates with Python

Not suited for very large-scale systems

Ideal for single-developer projects with custom routing needs

SQLite

Store and retrieve persistent data

Lightweight, no server setup, SQL-compatible

File-based storage, not for high concurrency

Perfect for local development and prototyping

Codio

Development environment

Accessible anywhere, Git integration, browser-based preview

Requires setup for Flask apps and terminal use

Supports full-stack development in a school setting

Sample criteria for evaluation

Use these when completing your evaluation table and writing your justification:

  • Suitability for purpose – Does the tool directly support the required functionality?

  • Ease of use / learning curve – Can you use it efficiently within the project timeframe?

  • Community support – Is documentation or help readily available online?

  • Compatibility – Does it work well with other parts of the stack (e.g. Flask + SQLite)?

  • Performance – Does it handle the expected scale of data and users?

  • Security – Are there built-in features or best practices for safe handling of user data?

  • Maintainability – Will the codebase be easy to modify, test, and extend?

  • Licensing / availability – Is it open-source or freely available to use?

How to use this in your SDS

Each technology listed in your SDS should be accompanied by a concise written justification, drawing on the above evaluation. Avoid vague language like "I just like it" or "It’s easy" without explaining why.

Example: I chose Flask because it supports flexible route handling and integrates well with Python, which I am already comfortable using. It also works smoothly with SQLite for local data storage, making it suitable for a solo project that doesn’t need enterprise-scale infrastructure.

Resources

In your System Design Specification (SDS), you must justify each tool and technology used in your project. This section provides a model response, illustrating how to craft a concise and well-structured justification that reflects your understanding of the system requirements and development process.

The example below is written in a manner that would be suitable for inclusion in the SDS, specifically under the 'Tool selection and justification' section.

Tool justification example for the Secure Bug Tracker project

Front-end (HTML, CSS, JavaScript)

The front-end of the application is built using standard web technologies. HTML provides a semantic structure for each page, allowing users to navigate and interact with the interface. CSS is used to ensure a consistent and responsive design that is accessible across devices, while JavaScript enables client-side validation and dynamic behaviour, such as form handling and updating elements without reloading the page. These technologies are universally supported, require no installation for users, and can be tested directly in the browser or Codio’s live preview. This makes them suitable for a solo project where cross-platform accessibility is essential.

Back-end (Flask - Python)

Flask is used as the back-end framework to handle routing, session management, and integration with the SQLite database. Flask is lightweight, easy to customise, and integrates well with Python, a language I am confident using. Its use of Jinja2 templates allows dynamic HTML rendering without introducing complexity. Flask’s flexibility allows me to structure the application clearly and scale it incrementally as features are added. Codio supports Flask development natively, making setup and deployment straightforward within the school’s infrastructure.

Database (SQLite)

SQLite is a file-based relational database that meets the requirements of this project. It enables me to store bug reports, user credentials, and comments without requiring a separate server process. As the project is expected to have a small dataset and limited concurrent access, SQLite offers a perfect balance between simplicity and functionality. It supports standard SQL queries, helping me develop portable and transferable skills. Codio allows me to inspect and manage SQLite databases directly from the terminal.

Development environment (Codio)

Codio is used as the central development platform. It provides an in-browser IDE with full terminal access, support for Python and Flask, and integration with Git and GitHub. The consistent environment ensures I can develop, test, and debug across all layers of the stack in one place. Codio also simplifies package management and virtual environment setup, removing barriers to getting started with Flask and SQLite.

Version control (Git and GitHub) Git is used for local version control, with all commits pushed to a private GitHub repository. This enables me to document development progress, track changes, and revert to previous versions when necessary. GitHub also enables issue tracking and documentation through a README file and a project board. Version control is essential for maintaining an organised and traceable development process, particularly when iterating or debugging. Git and GitHub are fully supported in Codio, with workflows aligned to industry standards.

Last updated

Was this helpful?