Docs
Evaluations
Critical Evaluation

Critical Evaluations

We performed critical self-evaluations to gain unbiased insight into our work, identify areas for improvement, and enhance the product. This ensures high quality and meeting client expectations while aligning with project goals. By reviewing the work, we can identify deviations from the original plan and correct them before final delivery.

We are evaluating our product and our overall progress in these areas:

  • User interface / user experience: This refers to how easy the product is to use and how it makes the user feel. We will evaluate the product using Jakub Nielson's 10 heuristics to ensure a systematic and comprehensive evaluation.
  • Functionality: This refers to how well the product performs its intended tasks and if it meets the user's needs.
  • Stability: This refers to how reliable and consistent the product is in different environments and under various conditions.
  • Efficiency: This refers to the overall system performance and how efficient it is in terms of resource usage.
  • Compatibility: This refers to how well the product works with different hardware, software, and platforms.
  • Maintainability: This refers to how easy it is to maintain and update the product over time.
  • Project management: This refers to how well the team planned, executed, and delivered the project, taking into account factors such as timeline, budget, and team collaboration.

User Interface / User Experience

A good user interface is important because it can greatly impact the user's overall experience and satisfaction with the product. A well-designed user interface can make the product easier to use, more intuitive, and more enjoyable for the user. When designing our UI interface, we adhere to three design principles: consistency, simplicity, and colorfulness. This means that elements throughout the product should follow the same design patterns, the product should be easy to use and navigate, with a minimal design that prioritizes the most important information and actions, and color should be used in a thoughtful and strategic way to convey meaning and create visual interest.

We use 10 usability heuristics developed by Jakob Nielson. It provides sound guidance for evaluating a complex application in terms of usability [1]. The 10 heuristics are:

  • Visibility of system status
  • Match between system and the real world
  • User control and freedom
  • Consistency and standards
  • Error prevention
  • Recognition rather than recall
  • Flexibility and efficiency of use
  • Aesthetic and minimalist design
  • Help users recognize, diagnose, and recover from errors
  • Help and documentation

We will not exhaustively provide analysis for every heuristic; instead, we will provide analysis for several heuristics that can best highlight the strengths and aspect we can work on more in our implementation.

Our strengths are:

  • Match between the system and the real world: This heuristic is defined as “The design should speak the users' language. Use words, phrases, and concepts familiar to the user, rather than internal jargon. Follow real-world conventions, making information appear in a natural and logical order.” [1] We avoid using technical jargon and instead use language that is familiar to the user. We also follow real-world conventions, such as using standard icons and placing information in a logical order. For example, our use of a “group of people” icon to represent students is a familiar convention that users will understand. We designed the system so that noi prior learning is required to use.
  • Consistency and standards: This heuristic is defined as "Users should not have to wonder whether different words, situations, or actions mean the same thing. Follow platform and industry conventions.” [1] We achieved consistency and standards in our user interface design by using the Material-UI (MUI) framework, which is a widely-used design system that follows Google's Material Design guidelines. By using MUI, we were able to ensure that our design was consistent with industry standards and that users would be familiar with the design patterns and interactions. Additionally, MUI provided us with a set of pre-built components that we could use to speed up development and ensure consistency across the product.
  • Error Prevention: This heuristic is defined as “Good error messages are important, but the best designs carefully prevent problems from occurring in the first place. Either eliminate error-prone conditions or check for them and present users with a confirmation option before they commit to the action.” [1] We implemented input validation and meaningful error messages throughout the system to prevent user errors and help them recover from mistakes. For example, we use form validation to ensure that users enter valid data and provide error messages that explain what went wrong and how to fix it. Additionally, we use confirmation dialogs to prevent users from accidentally deleting important data or performing irreversible actions.

One aspect we can still work on:

  • Help and Documentation: This heuristic is defined as "It’s best if the system doesn’t need any additional explanation. However, it may be necessary to provide documentation to help users understand how to complete their tasks." [1] While we have provided some documentation, we acknowledge that it is not of the highest quality due to time constraints. However, we have designed the system to be intuitive and easy to use, so users should not have too much difficulty navigating and using the product. Additionally, we have included tooltips and other contextual help throughout the system to assist users in understanding how to perform various tasks.

Overall, in terms of UI and user experiences, the product is well-designed, easy to navigate, and adheres to industry standards. It provides meaningful error messages and input validation to prevent user errors. However, we acknowledge that we could improve our documentation and help features to provide more comprehensive support for users.

Functionality

Evaluating the functionality of the system is crucial because it ensures that the product performs its intended tasks and meets the user's needs. This includes testing the system's ability to handle different scenarios, input data, and user actions, as well as its performance and reliability. Ultimately, the system's functionality is a key factor in determining its overall success and value to users. We evaluate our functionality by checking whether we have fulfilled the majority of tasks listed in the original MoSCoW requirements section. This way, we can ensure no features are omitted and our product precisely addresses clients' expectations. Based on the MoSCoW requirements list, we have successfully delivered all of the Must-Have features and all of the Should-Have features. We were also able to deliver several of the Could-Have features, which we believe will greatly improve the user experience. While we were not able to deliver all of the Could-Have features, we believe that the product as it stands exceeds expectations and omitted features will not affect normal usability, based on the testimonials we gathered through user acceptance tests. However, should we have time and resources in the future, we will strive to achieve those outstanding features.

Stability

Stability is one of the key factors that determine the overall success of a project. It ensures that the product is reliable and consistent in different environments and under various conditions. In other words, a stable application can be trusted to perform its intended tasks consistently and without errors. A system that is unstable can result in data loss or corruption, which can have serious consequences for users and the organization as a whole. Additionally, an unstable system can lead to user frustration and dissatisfaction, which can damage the reputation of the organization and negatively impact its bottom line.

To ensure theoretical stability, we carefully designed our database and system architecture to handle large volumes of data and traffic. However, due to time constraints, we have not performed proper stress tests to verify our assumptions. If we had more time, we would perform stress tests to determine the system's actual capacity and ensure that it can handle the expected volume of traffic.

Despite not having performed stress tests, we feel confident in the stability of our system. Based on our assumptions and theoretical design, we believe that the system is designed to handle a much larger volume of traffic than it is expected to handle in a real-life scenario. This gives us confidence in the system's reliability and stability, and we are optimistic that it will perform well under normal usage conditions.

Efficiency

Efficiency refers to the overall system performance and how efficiently it uses resources. A highly efficient system is able to perform its tasks quickly and with minimal resource usage, which can lead to cost savings and an improved user experience.

Due to time constraints, we were unable to perform a thorough test for efficiency with well-defined metrics and rigorously monitored environments. Instead, we performed simple tests to measure its performance under different scenarios. Specifically, our metrics were the system's response time, load time, and resource usage under different levels of traffic and data volume.

Based on our tests, we are confident that the system is highly efficient and performs well under normal usage conditions. The response time is fast and the load time is minimal, even when handling large volumes of data and traffic. Additionally, the system uses a reasonable amount of resources, which helps to reduce costs and minimize the environmental impact of our operations.

Overall, we are confident it will provide users with a fast, reliable, and efficient experience. From user acceptance tests, we found only minor lags that do not affect overall usability for certain heavy operations. However, we will strive to conduct proper tests should we have time and resources.

Compatibility

Compatibility is an essential aspect that plays a crucial role in the success of a product. It not only allows the product to be used by a wider range of users, especially for people requires accessbility, but also makes it more user-friendly. By ensuring the compatibility of the product with various devices, platforms, and browsers, we can guarantee that users can access and use the product regardless of their specific setup. Moreover, product compatibility is an essential factor to consider when it comes to user satisfaction. Users are more likely to have a positive experience with a product when it is compatible with their preferred device or platform.

To ensure compatibility, we performed thorough responsive design testing in mobile, tablet, and desktop environments. Please refer to “Respnsive Design Testing” section for more details. We tested the system on a variety of devices with different screen sizes and resolutions to ensure that it was accessible and usable on all devices. We also tested the system on different browsers to ensure that it worked well across different platforms. Here is table of results:

DeviceResult
Full-screen Desktop BrowserNormal
Shrinked Desktop BrowserNormal
iPhone SENormal
iPhone 12 ProNormal
Pixel 5Normal
Samsung Galaxy S20 UltraNormal
Surface DuoNormal
iPad AirNormal
iPad MiniNormal
Surface Pro 7Normal

After performing extensive testing on different sizes of desktop browsers, phones, and tablets, we passed all the tests and we are confident that the system is highly compatible and works well across different devices and platforms. We are confident that our users will have an excellent user experience as we have tested every feature of our application on a range of devices.

Maintainability

A highly maintainable system is easy to modify, extend, and debug, which can save time and resources in the long run. Additionally, a system that is easily maintainable can help to reduce errors and minimize downtime, which can have a significant impact on user satisfaction and overall project success.

To ensure maintainability, we followed best practices for software development, including modular design, commented code, and version control. We also used a consistent coding style and adhered to industry-standard conventions to ensure that the code was easy to read and understand. This makes it easier for us and potential future successors to work with the codebase and to make modifications and additions as needed.

Moreover, we designed the system to be highly modular, which means that individual components can be modified or replaced without affecting other parts of the system. The front-end framework we chose, React.js, is modular and highly reusable in nature. The breakdown of UI components is straightforward and easily maintainable and upgradable. This makes it easier to add new features or to fix bugs and errors, without having to worry about the potential impact on other parts of the system.

Overall, we are confident that the system is highly maintainable and designed for long-term use without any critical foreseeable issues. By leveraging the latest web technologies and design patterns, we can ensure that if future developers work on this project, they can receive adequate documentation from the builders of these technologies or on the internet.

Project Management

Effective project management ensures that the project is completed on time, within a constrained budget and with the necessary resources, and to the required quality. It involves planning, organizing, and coordinating resources to achieve specific goals and objectives. Additionally, it involves communicating with clients, allocating tasks effectively, and monitoring progress to ensure that the project stays on track.

For us, this is our first major industry-scale project, and we had limited prior experience in internal team management or external client liaison. Despite this, we made every effort to ensure that our project management was effective and efficient. We recognized that good communication with our clients was essential and worked hard to maintain prompt client liaison and updates. This helped us to ensure that we were meeting our clients' expectations and that they were satisfied with our progress.

We also ensured that we allocated tasks internally based on the strengths and weaknesses of our team members. This helped us to ensure that the work was distributed fairly and that each team member was working on tasks that they were best suited for. We also strove to provide challenges to each team member by giving them some exposure to tasks they were not very familiar with so that they could pick up new knowledge. Additionally, we made sure to provide frequent and thorough documentation to prevent confusion and to ensure that everyone was on the same page.

Despite our efforts, we did encounter some challenges in our project management. One of our team members lacked motivation and did not complete their assigned tasks on time. This put a strain on the rest of the team and required us to reassign tasks and adjust our timeline. We recognize the importance of having a motivated and engaged team and will strive to address this issue in the future by providing additional support and encouragement to team members.

We were able to stay on track and deliver a high-quality product with our generally good project management practices. We have gained a lot of experience from this project and we will strive to achieve more in future projects.

References

[1] J. Nielsen, "Usability Heuristics for Complex Applications," Nielsen Norman Group, 1999. [Online]. Available: https://www.nngroup.com/articles/usability-heuristics-complex-applications/ (opens in a new tab). [Accessed: 14-Mar-2023].