Summary of Achievements
Functional Moscow List Achievement
ID | Description | Priority | State | Contributors |
---|---|---|---|---|
1 | Allow multiple users to create/edit/cancel appointments at the same time and automatically update after editing by refreshing the screen. | Must | ✔ |
Arslan Kamil |
2 | Record and view the changes in an appointment. | Must | ✔ | *self fulfilled |
3 | Show appointments for today by default and be able to show appointments for selected date and selected week. | Must | ✔ | Arslan Kamil Yue |
4 | Ability to view specific patients' detail by click patient's name. | Must | ✔ | Arslan Kamil Yue |
5 | Ability to view and search appointments. | Must | ✔ | Arslan Kamil |
6 | Ability view and search patients. | Must | ✔ | Arslan Kamil Yue |
7 | Ability to see and hide team rota. | Must | ✔ | Arslan Kamil |
8 | Cancelled appointments should be automatically removed from rota to reduce repetitive work. | Must | ✔ | Arslan Kamil |
9 | Ability show all free slots. | Must | ✔ | Arslan Kamil |
10 | Schedule appointment to multiple slots if it duration is longer than 1 regular slot. | Must | ✔ | Arslan Kamil |
11 | User authentication for the ocularists and admin staff. | Must | ✔ | Arslan Kamil |
12 | Use distinct and intuitive colours to indicate different appointment type. | Should | ✖ | |
13 | Options to filter information about a patient at waitlist page. | Should | ✔ | Arslan Kamil |
14 | Hide patient already seen from timetable. | Should | ✖ | **self fulfilled |
15 | Automatically fill in patient details when booking new appointments. | Should | ✔ | Arslan Kamil |
16 | Send notifications if appointments due within 2 days are cancelled. | Should | ✔ | Arslan |
17 | Suggest patients from waitlists according to their waiting time and urgency. | Could | ✖ | |
18 | Automatic time slot suggestion when scheduling a patient. | Could | ✖ | |
19 | Manufacturing Tracking. | Won't | ||
20 | Statistics Tracking. | Won't | ||
Key functionality (Must have & Should have) | 87.5% | |||
Optional functionality | 0% |
*PAS provides this functionality
**Previous day's appointments no longer appear on the default view.
We are happy to present a proof-of-conecpt that fulfils 87.5% of the key functionality outlined in the functional MosCoW list requirements. We recognise the hard work and dedication our development team has made throughout the project.
Non Functional Moscow List Achievement
ID | Description | Priority | State | |
---|---|---|---|---|
1 | Be delivered with documentation in the form of a website. | Must | ✔ | |
2 | Applied the the design principles of visibility, consistency and feedback wherever it is deemed nessecary. | Must | ✔ | |
3 | Deliver an extensible system. | Must | ✔ | |
4 | Prevent unauthorised access/only allow access to legitimate users. | Must | ✔ | |
5 | Deliver a codebase that follow best practices. | Must | ✔ | |
6 | Be able to run in multiple platforms. |
Should | ✔ | |
7 | High learnability. | Should | ✔ | |
8 | Be scalable for larger numbers of patients database. | Should | ✔ | |
9 | Automatic deployment/CI Pipeline. | Could | ✔ | |
10 | System integration with PAS and OpenEyes. | Won't | ||
Key functionality (Must have & Should have) | 100% | |||
Optional functionality | 100% |
Individual Contribution
Part of Project | Arslan | Kamil | Yue |
---|---|---|---|
Project Partners Liaison | 60% | 40% | 0% |
Requirement Analysis | 37.5% | 37.5% | 25% |
Research and Experiments | 47.5% | 47.5% | 5% |
UI Design | 35% | 35% | 30% |
Coding | 45% | 45% | 10% |
Testing | 0% | 100% | 0% |
Deployment | 100% | 0% | 0% |
Report Website | 14.33% | 57.33% | 28.33% |
Blogs | 87.5% | 0% | 12.5% |
Presentations | 33% | 33% | 33% |
Monthly Videos | 0% | 50% | 50% |
Overall Contribution | 45% | 45% | 10% |
Main Roles | Programmer, Blog Editor, Deployer |
Programmer, Website Editor, Tester |
Video Maker, UI Designer, Website Editor |
Known Bugs
This is a list of known bugs, their severity is ranked from Low, Medium and High.
Bug Description | Severity | Solution |
---|---|---|
Users can set an already cancelled appointment back to booked status. This should not be allowed. Users should instead create a completely new appointment to replace the cancelled one. |
Medium |
Add tighter validation to UpdateAppointmentView.py to remove the
option to adjust the appointment status |
If searching for a cancelled appointment, the result will be displayed under 'Upcoming Appointments' and a cancel button will be displayed. A user should not be able to cancel an already cancelled appointment. |
Medium |
The methods used to fetch appointments in AppointmentView.py
is mismatched to the one that is called when searching for an appointment. |
On the appointment form, the dropdown list for appointment code section
displays |
Low |
The Appointment model currently stores
AppointmentCode as appointment_code = models.ForeignKey(
AppointmentCode, ...). |
Critical Evaluation
In order to perform a critical evaluation on ourselves we will evaluate our performance in different criteria and give ourselves a ranking on the following scale:
Bad, Not Good, Good, Very Good, ExcellentUser Interface and Experience
We followed HCI design principles of visibility, consistency and feedback while implementing our
user
interfaces.
There are various examples of where we applied these principles across our
system, these examples can be found by clicking the 'UI Design' tab on the navigation
bar.
Also, we always made attempts to evaluate the project from a user's perspective, this was done
in 2 ways.
☑ We demonstrated our progress with the project in our weekly meetings with Moorfields. As our
client was going to be the main user of the system, their feedback was from a user's
perspective. We considered their feedback to help build a system that provided the best user
experience.
We balanced their feedback with the time constraints to avoid scope creep.
☑ We conducted a user acceptance test's on users who have not used the system before. We used
users
who have different levels of software proficiency to perform tasks on our system.
The result shows that all testers found our application easy to use.
A senior ocularist at Moorfields said they were particularly impressed by the design of the
rota page. Testers pointed out that found difficulty in selecting and viewing multiple
ocularists'
rotas on the team rota page. To remedy this, we created a user manual that gives new users
instructions on how to use our system. Further feedback from our user acceptance tests can be
found on the 'Testing' tab on
the navigation bar.
Overall, from the feedback from our client (who is also the user), and our user acceptance
testers, our application provides a simple, easy to use and usable user interface. We believe
that this was
achieved by stringently following the HCI design principles.
We rate our achievement in 'User Interface and Experience' as Excellent.
Functionality
We successfully delivered workflow management proof-of-concept.
The application resolves all of the major frictions in Moorfields' current system which we
identified at the start of the project.
The major frictions and their implemented solutions are as follows:
Friction | Implemented Solution |
---|---|
Too much information presented at once. | Organised data representation using filters, expanding windows and search functionality. |
Tedious to triage patients | Avoid repetitive work by reflecting changes across the system. |
Multiple users can't use the system at once without overwriting changes. | Synchronisation between users to prevent overwriting. |
We are very proud of accomplishing 87.5% of the
key functionality in the
functional MOSCOW list.
It is also important to note that our client is very satisfied with the proof-of-concept that we
handed over to them.
For the requirements that we didn't fulfil, specifically requirements 17 and 18 these
requirements involve automatically
arranging appointments and suggesting patients.
We believe that the best way to implement this functionality involves machine learning and is
quite complex.
The complexity of this is important because, due to the time constraints, we decided that
implementing this complex functionality was not feasible. Therefore, we mutually agreed with
Moorfields
that this functionality would not be included in the proof-of-concept that we would hand over to
them. Moorfields confirmed that ocularists and admins prefer to manually
book in appointments so we decided to narrow down the scope and focus on fulfilling other
major requirements.
Overall we produced a proof-of-concept that Moorfields is very satisfied with and solves
Moorfields' major frictions with the current system and achieves 87.5% of the functionality
outlined in our functional MoSCoW list.
We rate our achievement in 'Functionality' as Excellent.
Stability
We conducted two different types of automated testing to ensure our application is stable, we
used unit tests and integration tests.
We managed to reach a code coverage of 97%.
Passing all unit tests informs us that individual functions work as we intended. Passing all
integration tests informs us that views integrate with templates to render or redirect to the
correct
template.
One way that we could improve our testing procedure to more rigorously measure the stability is to
check what values are passed to each template in the response. Currently, this check is not
performed on
every integration test. Implementing this check would only require adding one extra assert
statement to the test so there is not much extra work for future developers.
Overall we have a high test coverage with all tests passing. Some tests could be extended to be
more rigorous.
We rate our achievement in 'Stability' as Very
Good.
Efficiency
Since our codebase is very simple, it’s very efficient to run.
Currently, our application responds to a request within a few seconds.
It processes searches and logins within a few seconds too.
This proof-of-concept will not be used with real patients data, it will be used to aid
development for Moorfields. Because of this, it was a low priority for us to measure efficiency,
particularly with a large database of patients as this was unlikely to happen under Moorfields
normal usage of the system.
Currently, using a small database of patients we rate our achievement in 'Efficiency' as Excellent.
*To further measure efficiency, beyond what we measured, future developers should test on larger
datasets.
Compatibility
We deployed our application by running it as a docker image and hosting it on Azure Cloud.
This allows our application to be accessed by multiple browsers, across multiple devices from
anywhere with an internet connection.
In addition to this, we programmed the front-end in Bootstrap, this improves the compatibility
because Bootstrap supports automatic formatting for different devices.
To elaborate, the page and the navbar will automatically change based on screen size in order to
display all of the contents in a clear and logical fashion.
If multiple systems were to be integrated such as synchronising our workflow management app with
PAS,
a virtual machine could be a better option than docker as docker is better suited to supporting
one application.
If this is the case, Moorfields can implement this as the source code for the project has been
provided via a git repository.
Overall our system has compatibility across multiple devices. It has good potential for
compatibility with other systems that Moorfields use. If Moorfields would like to implement this
compatibility across systems we have suggested how they could do so.
We rate our achievement in 'Compatability' as Excellent.
Maintainability
Our code comes with documentation in for form of a website. Other developers should not have any
trouble understanding what the code does and how it does it. Meaning it would be easy for them
to modify the code to implement new features
Our code also comes with an easy to use, CI pipeline. Developers only need to push to main for
changes to be reflected on the live server, more information about the CI pipeline can be seen
on the 'Deployment' tab on the navigation bar.
For the most part, our code complies with PEP8 standards. We performed checks on our code with
flake8
and fixed the syntax standard violations. We did this to make our code as readable as possible
for future developers, we believe that the more readable the code is, the more maintainable it
can be.
We also have a small codebase with sensible variable names which further makes the code readable
and easy to follow.
We implemented separation of concerns this can further help with maintainability, we did this
when we separated the views into different files and and when we followed the MVT design pattern.
Overall we took multiple actions to make our codebase as maintainable as possible in order to
aid development during the project and future development by Moorfields.
We rate our achievement in 'Maintainability' as Excellent.
Project Management
Our team used a Gantt chart timeline to make sure our project is on track
and we used Trello board to organise our work and to set tasks for teammates during the design
phase.
We shared these with our TA, our IXN mentor and Moorfields.
We met our client weekly on Thursday afternoons to discuss progress. During each of these
meetings, we took minutes so we could refer back to them during the week. We also had weekly
meetings with our TA and our IXN mentor.
During the implementation phase, it was easier for us to allocate tasks on a Google doc than on
Trello. The Google doc had a list with checkboxes of tasks that needed to be completed. The tasks
were colour coded based on priority and who was assigned to it. A majority of the team completed
tasks
by the agreed deadlines.
We used telegram to communicate with teammates and email to communicate with
Moorfields.
Overall, we rate our achievement in 'Project Management' as Very
Good.
Further Work
If more time was given, we would make implement the following features to further improve our
system:
1. We would integrate our system with PAS. Doing so would save time on things like adding
patients to the workflow application. We could also add functionality to automatically create
and
send letters to patients once appointments have been made, this would save time for the admin
staff.
2. Automatic appointment allocation. This was one of the suggestions made when exploring the
requirements at the start of the project.
We thought it was too complex to fully implement in our timeframe. Future developers could use
information about previous appointments
to predict when the best time is to book a new appointment and automatically book this
appointment.
3. Further support for mobile device users. Moorfields primarily use computers to manage
patients so we spent all of our time
designing our UI for a computer user, however, using Bootstrap meant that all of the content is
still visible on mobile devices.
In the future, we believe we could provide a more usable UI for mobile devices if we spent more
designing specifically for these devices.
4. Improve the login experience. Currently, our login page is very bare-bones. If we had extra
time, we would consult users on how to improve the experience.
We believe that implementing 'Forgot Password' functionality may be one way to improve the user
experience when logging in.
5. Prompts that require users to confirm their actions. Currently, a user can delete an
appointment at the click of a button. Although the purpose of the
button is very clear, it may be a good idea to ask users to confirm their actions to avoid
mistakes from occurring when using the system. If it takes a significant
amount of extra admin work to rebook the appointment, this functionality could be incredibly
useful.
6. Functionality for manufacturing tracking. We explored this functionality at the start of the
project however we decided to
narrow the scope and not implement this in our system. Once our system is polished it could
be useful for Moorfields to track which
materials were used for which prosthetic.
7. Given more time, we would love to further refactor our codebase
to make things even more modular. A lot of our functionality refreshes the webpage
the user was currently on, which means that we duplicate sections of code in a lot of places.
For example, at many points we have to fetch the list of appointments, and we in fact have
a known bug where sometimes the list of appointments is not tagged properly! This can be all
solved by introducing a base method that returns the information needed to populate the template,
and then overriding some of the other functionality, to differentiate the operations.
8. Currently, we have tested the system for simultaneous use; and it works! The backend model on the
server will track changes in real time and prevent overwriting of data. However the visuals on screen
are not always seen in real time, you have to infact refresh to see the changes to the rota or appointment
list. Given the time and resources, we would like to implement a solution that uses AJAX in
order to automatically refresh the template whenever the backend Model changes.
9. We have set user groups and permissions seperately for admin staff and ocularist staff, and
given then time it would be natural to retrict their permissions when using the app. This way
the PAS checklist can only be confirmed by a member of the admin users group. Features like This
would make the system more reflective of who has what work to do, and decreases the chance for someone
to make a mistake.
10. Everytime that we Dockerise and deploy the application to Azure, the local database is
used to create the Docker image. As such, all remote data, i.e. on Azure is lost and
overwritten by the local copy of the database. Though this is fine for a proof of concept,
we should have the backend database mounted as a persistent file storage to our container
registry or container instance. There already exist solutions to this, and it would be natural during
real world use to want to maintain the information located in the database.
Here is what a quick search reveals about this!