HeaderSIS.jpg

Difference between revisions of "IS480 Team wiki: 2017T2 Bare Code Wiki Finals"

From IS480
Jump to navigation Jump to search
 
(19 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
 
 
[[File:Logo1.jpg|200px|center|link=IS480_Team_wiki%3A_2017T2_Bare_Code]]
 
[[File:Logo1.jpg|200px|center|link=IS480_Team_wiki%3A_2017T2_Bare_Code]]
 
<div style = "width: 1000px">
 
<div style = "width: 1000px">
Line 36: Line 34:
  
 
==Project Progress Summary==
 
==Project Progress Summary==
 
* Please see deployed site link here:<br>
 
* Please see presentation slides here: <br>
 
 
* MSL @ NP is now available for download on Apple App Store!<br>
 
* MSL @ NP is now available for download on Apple App Store!<br>
 +
* Please see presentation slides here: <br> [[File: IS480_FINAL.pdf]]
 
* Please see our other deliverables [https://drive.google.com/drive/u/1/folders/10LyD075xnNntD8ybGdlhD5t7LQAGvnJX| here]
 
* Please see our other deliverables [https://drive.google.com/drive/u/1/folders/10LyD075xnNntD8ybGdlhD5t7LQAGvnJX| here]
 +
* Please see our deployed application [http://54.169.100.75/NPServiceLearningWebAPI | here] <br>
 +
 +
'''Persona:''' Lecturer<br>
 +
'''Username:''' BBR12<br>
 +
'''Password:'''BBR12<br>
 +
 +
'''Persona''': Administrator <br>
 +
'''Username:''' admin<br>
 +
'''Password:''' password<br>
  
 
===Progress Update :===
 
===Progress Update :===
Line 57: Line 62:
  
 
===Project Challenges:===
 
===Project Challenges:===
 
Describe areas of the project that were particularly difficult and how they were dealt with, whether successfully or not. Again, a few sentences are enough. If there are no challenges, remove this section.
 
 
 
* <b>Loss of 33% of task force:</b> Coping with the reduction in team members was difficult, especially when the remaining team members had no experience in coding iOS. Consulting friends, books, video tutorials and putting in the extra coding hours helped in delivering the mobile application.  
 
* <b>Loss of 33% of task force:</b> Coping with the reduction in team members was difficult, especially when the remaining team members had no experience in coding iOS. Consulting friends, books, video tutorials and putting in the extra coding hours helped in delivering the mobile application.  
  
* <b>Software Maintenance: </b> With the change in roles, the new developers had difficulty reading and understanding and trying to incorporate codes by the previous developers, especially when there was no documentation or comments in the code.  
+
* <b>Software Maintenance: </b> With the change in roles, the new developers had difficulty reading and understanding and trying to incorporate codes by the previous developers, especially when there was no documentation or comments in the code. Again, we consulted friends, books and tutorials to get a grasp of things.
  
* <b>Acquisition of new skills within a short period of time:</b> As 2 of our key developers left the group, we had to take over their codes as quickly as possible to ensure that disruptions to our project timeline, despite not having prior experience
+
* <b>Acquisition of new skills within a short period of time:</b> As 2 of our key developers left the group, we had to take over their codes as quickly as possible to ensure that disruptions to our project timeline, despite not having prior experience. Learning curve was made steeper with the limited amount of time we had.
  
* <b>Communication (or lack thereof): </b>Despite the stress we faced from taking over our new roles, we struggled to communicate with each other and grew distant from each other. We mitigated this through having a couple of honest F2F talks to sort things out. This cleared this air and allowed us to speak our minds, and that kept the team going till now, illustrating the importance of proper communication.
+
* <b>Communication (or lack thereof): </b> Despite the stress we faced from taking over our new roles, we struggled to communicate with each other and grew distant from each other. Lack of communication meant everyone was unclear about what was going on. We mitigated this through having a couple of honest F2F talks to sort things out. This cleared this air and allowed us to speak our minds, and that kept the team going till now, illustrating the importance of proper communication.
  
 
* <b>Server Faults: </b> A "Service Unavailable" fault surfaced during our presentation rehearsal at midterms. With the help of others, we realised that it was due to the low performance capabilities from the free tier we were using. We also clicked "Submit" on the web app multiple times, causing a long queue, then subsequently crashing the server. We overcame this by upgrading our instance to t2 small.  
 
* <b>Server Faults: </b> A "Service Unavailable" fault surfaced during our presentation rehearsal at midterms. With the help of others, we realised that it was due to the low performance capabilities from the free tier we were using. We also clicked "Submit" on the web app multiple times, causing a long queue, then subsequently crashing the server. We overcame this by upgrading our instance to t2 small.  
Line 83: Line 85:
  
 
==Project Management==
 
==Project Management==
 
Provide more details about the status, schedule and the scope of the project. Describe the complexity of the project.
 
  
 
===Project Schedule (Planned Vs Actual):===
 
===Project Schedule (Planned Vs Actual):===
Line 105: Line 105:
 
[[File:Timeline4A (After Change in Priorities).png | 700px | center]]
 
[[File:Timeline4A (After Change in Priorities).png | 700px | center]]
  
<br>
 
 
<b> Write Up: </b><br>
 
<b> Write Up: </b><br>
 
The project plan during midterms did not include "Offline Mode", "Mobile Features", and "Security Module", but the "Offline Function" and "Mobile Features" portions were added based on feedback the team obtained from midterms.  
 
The project plan during midterms did not include "Offline Mode", "Mobile Features", and "Security Module", but the "Offline Function" and "Mobile Features" portions were added based on feedback the team obtained from midterms.  
Line 114: Line 113:
  
 
===Project Scope:===
 
===Project Scope:===
 
 
The team had 3 revisions to the project scope since the start of the project.<br>
 
The team had 3 revisions to the project scope since the start of the project.<br>
 
Scope 1: Pre-Acceptance <br>
 
Scope 1: Pre-Acceptance <br>
Line 131: Line 129:
  
 
<b>From Phase 2 to Phase 3: </b><br>
 
<b>From Phase 2 to Phase 3: </b><br>
We obtained feedback from midterms that our application was lacking the mobile aspect, and the reviewers recommended that we included some mobile-only features to the application. We took up their suggestion and <b>implemented the "Camera" function and "GPS" function</b>. The decision to implement these 2 mobile functions were based on how much value they would add to our sponsor, how frequently the intended users will use the functions, how beneficial it would be to them while they use the app for Service Learning purposes, as well as the team's capability to manage the addition. The team also discussed among ourselves and <b> decided that having an "Offline" function for the mobile application</b> would value add the project a lot more, as an app that provides learning-on-the-go capabilities. Hence we decided to put it into the scope. To cope with the new changes in the mobile portion, the "Survey Module" was dropped as the team realised that the value that the "Survey Module" provided to sponsor paled in comparison to the "Mobile Features" and "Offline" Function.  
+
We obtained feedback from midterms that our application was lacking the mobile aspect, and the reviewers recommended that we included some mobile-only features to the application. We took up their suggestion and <b>implemented the "Camera" function and "GPS" function</b>. The decision to implement these 2 mobile functions were based on how much value they would add to our sponsor, how frequently the intended users will use the functions, how beneficial it would be to them while they use the app for Service Learning purposes, as well as the team's capability to manage the addition. The team also discussed among ourselves and <b> decided that having an "Offline" function for the mobile application</b> would value add the project a lot more, as an app that provides learning-on-the-go capabilities. Hence we decided to put it into the scope. To cope with the new changes in the mobile portion, the "Survey Module" was dropped as the team realised that the value that the "Survey Module" provided to sponsor paled in comparison to the "Mobile Features" and "Offline Function" modules.  
 
+
<br>
 
On the web application, the team decided that we needed to include a <b>security feature</b> that would encrypt confidential information like passwords. As the web part was relatively stable, we did not have to make major changes to the timeline to accommodate this addition.   
 
On the web application, the team decided that we needed to include a <b>security feature</b> that would encrypt confidential information like passwords. As the web part was relatively stable, we did not have to make major changes to the timeline to accommodate this addition.   
 
+
<br>
 
At this point, it is imperative to highlight that the team has completed the project with the initial scope when decided as a 6-men team, despite downsizing to a 4-men team. While we dropped the "Survey Module", the team has included "Peer Evaluation Module" and "Security Module" which provided more value to the sponsor. This was agreed upon with the sponsor as well as our supervisor.   
 
At this point, it is imperative to highlight that the team has completed the project with the initial scope when decided as a 6-men team, despite downsizing to a 4-men team. While we dropped the "Survey Module", the team has included "Peer Evaluation Module" and "Security Module" which provided more value to the sponsor. This was agreed upon with the sponsor as well as our supervisor.   
  
 
===Project Metrics:===
 
===Project Metrics:===
  
Please see our metrics [[IS480_Team_wiki%3A_2017T2_Bare_Code_Metrics | here]]
+
Please see our metrics [[IS480_Team_wiki%3A_2017T2_Bare_Code_Metrics | here.]]
  
 
===Project Risks:===
 
===Project Risks:===
  
Please see our risks [[IS480_Team_wiki%3A_2017T2_Bare_Code_Risk_Mitigation | here]]
+
Please see our risks [[IS480_Team_wiki%3A_2017T2_Bare_Code_Risk_Mitigation | here.]]
 +
 
 +
===Change Management:===
 +
 
 +
Please see project changes [[IS480_Team_wiki%3A_2017T2_Bare_Code_Change_Management | here.]]
  
 
===Technical Complexity:===
 
===Technical Complexity:===
  
Describe and list the technical complexity of your project in order of highest complexity first. For example, deploying on iPhone using Objective-C, customizing Drupal with own database, quick search for shortest flight path, database structure, etc.
+
{| class="wikitable" style="text-align:center; background: white; margin: 0px; width: 100%"
 +
! style="background: #063852; color: white; font-weight: bold;" |S/N
 +
! style="background: #063852; color: white; font-weight: bold;" |Complexity
 +
! style="background: #063852; color: white; font-weight: bold;" |Description
 +
! style="background: #063852; color: white; font-weight: bold;" |Image
 +
|-
 +
||  1
 +
|| Content Management - Storage for large files
 +
|| Initially we did it such that every time the lecturer uploads a video, it will go into one of the folders we created in our project. We were not too experienced and we realised when we deployed, that would not work because the files are just stored locally on our computer. We had to learn about web storage and how to access the storage using the application. We then did research on how to store files on AWS and found a solution that uses S3 bucket from AWS.
 +
|| [[File:BareCode Tech Diagram.png| 200 px | left]]
 +
<br>
 +
|-
 +
|-
 +
|| 2
 +
|| Core Data for Offline Mode
 +
|| Core Data allows us to save and store the data locally, and enables us to easily map the objects in the apps to the table records in the database. The flexibility in fetching objects lies in the complexity of the fetch request. This is resolved by the association of an NSPredicate object with a fetch request to narrow the number of objects being returned, where we creates a new record in a database when the unique identifier is not found, but if the record already exists we just updates it.
 +
|| Refer to figures below
 +
|}
 +
 
 +
{| class="wikitable"
 +
|-
 +
| [[Image:BareCodeTechComplex1.png | thumb | 300px|center| Figure 1 ]]
 +
| [[Image:BareCodeTechComplex2.png | thumb | 300px|center| Figure 2]]
 +
| [[Image:BareCodeTechComplex3.png | thumb | 300px|center| Figure 2]]
 +
|}
 +
 
  
 
=== Quality:===
 
=== Quality:===
Line 153: Line 180:
 
* Though there is no confidential information in our database yet, the team has accounted for future users, and have developed the app such that all passwords will be encrypted when we bootstrap the lecturers and students.  
 
* Though there is no confidential information in our database yet, the team has accounted for future users, and have developed the app such that all passwords will be encrypted when we bootstrap the lecturers and students.  
 
* Our current instance also addresses reliability as we ensured that the server will not be unavailable by upgrading the instance.
 
* Our current instance also addresses reliability as we ensured that the server will not be unavailable by upgrading the instance.
* We separated all our folders for the backend codes and organized them by DAO, controller, service, model, constant so that our codes can be more easily maintained and changed (upgrade or fixing). We also designed our project such that the front end is separated from the backend such that it only uses a script to call the API to retrieve the contents to display on the web app.  
+
* Backend codes are separated organized by DAO, controller, service, model, constant so that our codes can be more easily maintained and changed (upgrade or fixing).  
 +
* Project is designed such that the front end is separated from the backend such that it only uses a script to call the API to retrieve the contents to display on the web app.  
 +
* The frontend of the web application uses JavaScript and server side application which improves performance.
 +
* Added error messages to make sure page does not crash when it encounters error thus improving fault tolerance
  
 
<b>2. iOS Application:</b><br>
 
<b>2. iOS Application:</b><br>
Line 194: Line 224:
 
|-
 
|-
  
|style="text-align: left;"| Navigation
+
 
|style="text-align: left;"| [[ IS480_Team_wiki%3A_2017T2_Bare_Code_Diagrams | Navigation Diagram]]
+
|style="text-align: left;"| System Architecture Diagrams
 +
|style="text-align: left;"| [[IS480_Team_wiki%3A_2017T2_Bare_Code_Project_Documentation | System Architecture Diagrams]]
 
|-
 
|-
 
|-
 
|-
|style="text-align: left;" rowspan ="3"| Design
+
|style="text-align: left;" rowspan ="2"| Design
 
|style="text-align: left;"| Persona & Scenarios
 
|style="text-align: left;"| Persona & Scenarios
 
|style="text-align: left;"| [[IS480_Team_wiki%3A_2017T2_Bare_Code_PersonaScenario | Persona & Scenarios]]
 
|style="text-align: left;"| [[IS480_Team_wiki%3A_2017T2_Bare_Code_PersonaScenario | Persona & Scenarios]]
Line 208: Line 239:
 
|-
 
|-
 
|-
 
|-
|style="text-align: left;"| System Architecture Diagrams
+
 
|style="text-align: left;"| [[IS480_Team_wiki%3A_2017T2_Bare_Code_Project_Documentation | iOS]]
 
|-
 
|-
 
 
|style="text-align: left;" rowspan ="4"| Testing
 
|style="text-align: left;" rowspan ="4"| Testing
 
|style="text-align: left;"| User Testing 1
 
|style="text-align: left;"| User Testing 1
Line 228: Line 256:
 
|-
 
|-
 
|style="text-align: left;"| User Testing 4
 
|style="text-align: left;"| User Testing 4
|style="text-align: left;"| [[IS480_Team_wiki%3A_2017T2_Bare_Code_User_Testing_4 | User Testing 4]]
+
|style="text-align: left;"| [[IS480_Team_wiki%3A_2017T2_Bare_Code_User_Testing_4 | User Testing 4 (TBU)]]
 +
|-
 +
|-
 +
|style="text-align: left;" rowspan ="4"| Miscellaneous
 +
|style="text-align: left;"| Handover Document
 +
|style="text-align: left;"| [[File: BareCode Handover Doc for Web Application.pdf |HandoverDoc]]
 
|-
 
|-
 
|-
 
|-
 +
 
|}
 
|}
  
===Deployment:===
+
===Testing:===
 
 
In an iterative approach, ready to use system should be available (deployed) for client and instructions to access the system described here (user name). If necessary, provide a [[IS480_Final_Wiki#Project_Deliverables: | deployment diagram link]].
 
  
===Testing:===
 
Describe the testing done on your system. For example, the number of user testing, tester profile, test cases, survey results, issue tracker, bug reports, etc. <br>
 
 
Please click [[IS480_Team_wiki%3A_2017T2_Bare_Code_UserTesting | here]] for more details on the UATs.
 
Please click [[IS480_Team_wiki%3A_2017T2_Bare_Code_UserTesting | here]] for more details on the UATs.
 
<br>
 
<br>
Line 265: Line 295:
 
|| Ngee Ann Polytechnic Bus Stops (ID: 12101 & ID: 12109), Beauty World MRT stations, King Albert Park MRT Station, Sixth Avenue MRT Station, Tan Kah Kee MRT Station
 
|| Ngee Ann Polytechnic Bus Stops (ID: 12101 & ID: 12109), Beauty World MRT stations, King Albert Park MRT Station, Sixth Avenue MRT Station, Tan Kah Kee MRT Station
 
|| 27
 
|| 27
 +
|-
 +
|-
 +
|| User Testing 4
 +
|| 6 April 2018
 +
|| Ngee Ann Polytechnic
 +
|| (TBU)
 
|-
 
|-
 
|-
 
|-
Line 271: Line 307:
 
==Reflection==
 
==Reflection==
  
Compile common lessons and reflection for the team and for each team member. Be brief.
+
===Team Reflection:===
 +
Overall, the team agrees that this IS480 journey has been fruitful. We sowed plenty of hours into the project and are about to reap our rewards. We’ve also agreed that apart from refining our coding & communication skills, we’ve learnt a lot more non-tangible skills from each other, our peers, our sponsor as well as our supervisor. The life lessons we took away from each other will stick with us for a long time to come. Transiting into a smaller team meant we had to put in extra hours. Stepping out of our comfort zones, taking on increased responsibilities, and subsequently, effective time management were some of the key issues that we had to learn how to cope with.  
  
===Team Reflection:===
+
Communication was weak at first, but we picked that up and it proved to be effective. We also suffered the brunt of bad documentation at the start, but moving on, we improved on our ways and made sure we accounted for everything we were tasked to do. Looking back, the days were difficult but overall it was through sheer grit, determination and a lot of positive thinking that got us through.
  
Key lessons learned – indicating where the team improved, or would do things differently next time. You may refer to the learning outcome summary in your proposal. A very short checklist style will suffice. It would be very convincing if the knowledge is share at the wiki [[Knowledge_base | knowledge base]] and linked here.
+
We’re also grateful for our sponsor and supervisor for the help and advice they’ve given us.  
  
 
===Individual Reflection:===
 
===Individual Reflection:===
 
Describe in a paragraph, the key areas of learning or improvement. These should be personal areas of growth or learning. Each individual should list his/her effort, responsibility, actual contributions and personal reflection. Do not repeat team project contributions or member roles. Link if necessary.
 
 
 
<b>Cheryl Lee Sze Min:</b><br>
 
<b>Cheryl Lee Sze Min:</b><br>
  
 
The whole IS480 has been a roller-coaster journey. It started off where everything was peaceful, on a plateau. We climbed and got to a high when we made it through acceptance. Everything was good until our first dip, and it was a deep plunge when we had 2 of our key developers choosing to leave. The climb up was then arduous, fraught with plenty of further dips, then slight climbs when our app part works, then dips again, especially closer to the midterms. While we kept our morale high, there was an obstacle called “Stress” that we had to overcome, because failing the midterms meant having to start from scratch. We were determined not to make that an option for us. Again, midterms ended on a high and then we plunged again when we had to develop more functions that were foreign, but would add immensely to the value of the project. Our cart went forward, dipped when there were problems, but the climbs this time were higher. Every positive step we made went a long way, and we're glad this roller coaster ride is almost over.  
 
The whole IS480 has been a roller-coaster journey. It started off where everything was peaceful, on a plateau. We climbed and got to a high when we made it through acceptance. Everything was good until our first dip, and it was a deep plunge when we had 2 of our key developers choosing to leave. The climb up was then arduous, fraught with plenty of further dips, then slight climbs when our app part works, then dips again, especially closer to the midterms. While we kept our morale high, there was an obstacle called “Stress” that we had to overcome, because failing the midterms meant having to start from scratch. We were determined not to make that an option for us. Again, midterms ended on a high and then we plunged again when we had to develop more functions that were foreign, but would add immensely to the value of the project. Our cart went forward, dipped when there were problems, but the climbs this time were higher. Every positive step we made went a long way, and we're glad this roller coaster ride is almost over.  
  
What I’d like to say is that I’ve learnt to pick myself up from “failure”. And failure is in quotes because it’s really not a failure. Coming this far has been a great achievement for a handicapped team. I used to term ourselves “handicapped”, in this sense, it's “a circumstance that makes progress or success difficult” but looking back, I can proudly say the team made this work for ourselves.  
+
What I’d like to say is that I’ve learnt to pick myself up from what seemed like a failure at the beginning. Coming this far has been a great achievement for a "handicapped" team. I used to term ourselves “handicapped”, in this sense, it's “a circumstance that makes progress or success difficult” but looking back, I can proudly say the team made this work for ourselves.  
  
 
During the journey, I saw the team standing by 3 principles:  
 
During the journey, I saw the team standing by 3 principles:  
1. The first step is always the most difficult
+
#The first step is always the most difficult
2. Be afraid, but do it anyway
+
# Be afraid, but do it anyway
3. Things always seem impossible until its done
+
# Things always seem impossible until its done
  
What I took away from the project is a whole bout of grit and lots of positivity. How can you keep your team’s morale high when you’re not positive? And of course, friends. I think bad circumstances have bonded us, giving us the opportunity to learn from each other and I’m glad it was a positive kind of bond.  
+
What I took away from the project is a whole bout of grit and lots of positivity. And of course, friends. I think bad circumstances have bonded us, giving us the opportunity to learn from each other and I’m glad it was a positive kind of bond.  
  
 
Apart from guidance in terms of steering the project, I think Prof Raf has also given us plenty of life advice. Concepts like sharpening the saw, how to approach things without a fear of failure, his zest for improving education were a fresh sight in SIS. I took away more than just knowing how to mange stakeholder expectations and a team. I took away relevant  life lessons which has aided me, and will continue to aid me as I approach bigger things in life.  
 
Apart from guidance in terms of steering the project, I think Prof Raf has also given us plenty of life advice. Concepts like sharpening the saw, how to approach things without a fear of failure, his zest for improving education were a fresh sight in SIS. I took away more than just knowing how to mange stakeholder expectations and a team. I took away relevant  life lessons which has aided me, and will continue to aid me as I approach bigger things in life.  
Line 300: Line 334:
  
 
<b>Grace Foo Huan Ting:</b><br>
 
<b>Grace Foo Huan Ting:</b><br>
 +
Through this long-term project, I got a feel of how it is like working with a software developing team. I learnt how to code with new and more difficult programming languages, how to learn on my own, from the web and from friends. It is through countless hours of testing and debugging before the final product can be produced. Of course from this experience with FYP, it is much more than just the coding experience. I have learnt how to work together in a team with different dynamics and to utilise everyone’s strengths to the best of their abilities. Though it wasn’t an easy path, I am glad we managed to overlook our flaws and achieve what we have today.
 +
 +
I also realised the importance of time management in this project. This is because it is much easier for us to manage tasks which we know what to expect and how to do, and we will know how much time to allocate for each task. However, things are not as simple for things that we are unsure of how to do, as we are unable to estimate the time needed for research as well as trial and error. However, the ability to estimate time taken for each task is extremely important for us as it gives us  the confidence that we are able to complete the project, reducing our stress levels and thus improving our well being, this is important for a small group like BareCode. I want to thank our supervisor Rafael for helping us with time estimation and management during one of our consults and that helped increase the confidence and morale of the team.
 +
 +
I would like to thank our supervisor Prof Rafael, sponsor Andrew, the teaching team and most importantly my group members, PM Cheryl, iOS developer Pei Jia, Backend developer Ailin for the ups and downs of this project.
  
 
<b>Lee Pei Jia: </b><br>
 
<b>Lee Pei Jia: </b><br>
Line 305: Line 344:
  
 
I feel that I gain more than what I lost in this FYP. New genuine friendships, and more resilience and I believe I have a “stronger’ heart now. No matter what our final grade is, I'm already very proud of what the 4 of us have managed to overcome and achieve together.
 
I feel that I gain more than what I lost in this FYP. New genuine friendships, and more resilience and I believe I have a “stronger’ heart now. No matter what our final grade is, I'm already very proud of what the 4 of us have managed to overcome and achieve together.
 
===Sponsor Comment:===
 
Sometimes, the client writes a report to feedback on the system; this sponsor report can be included or linked from here.
 

Latest revision as of 14:16, 13 April 2018

link=IS480_Team_wiki%3A_2017T2_Bare_Code

HOME

ABOUT US

PROJECT OVERVIEW

PROJECT MANAGEMENT

DOCUMENTATION

MAIN WIKI

WIKI FOR MIDTERMS

WIKI FOR FINALS

Project Progress Summary

  • MSL @ NP is now available for download on Apple App Store!
  • Please see presentation slides here:
    File:IS480 FINAL.pdf
  • Please see our other deliverables here
  • Please see our deployed application | here

Persona: Lecturer
Username: BBR12
Password:BBR12

Persona: Administrator
Username: admin
Password: password

Progress Update :

  • As of 4 April 2018, MSL @ NP is 100% completed.
  • As of 2 April 2018, 3 UATs were conducted with a total of 53 students for the iOS application.
  • MSL @ NP has gone live on Apple App Store on 15 March 2018

Project Highlights:

  • Priorities were changed based on midterms feedback and sponsor's preference
    • Added mobile features to the application (e.g. upload photos & location-tagging)
    • Added an offline function to facilitate learning-on-the-go
    • As a result, the team dropped the "Survey Module" to work on the two above-mentioned functions
  • Took 3+ weeks to learn and develop offline function on iOS

Project Challenges:

  • Loss of 33% of task force: Coping with the reduction in team members was difficult, especially when the remaining team members had no experience in coding iOS. Consulting friends, books, video tutorials and putting in the extra coding hours helped in delivering the mobile application.
  • Software Maintenance: With the change in roles, the new developers had difficulty reading and understanding and trying to incorporate codes by the previous developers, especially when there was no documentation or comments in the code. Again, we consulted friends, books and tutorials to get a grasp of things.
  • Acquisition of new skills within a short period of time: As 2 of our key developers left the group, we had to take over their codes as quickly as possible to ensure that disruptions to our project timeline, despite not having prior experience. Learning curve was made steeper with the limited amount of time we had.
  • Communication (or lack thereof): Despite the stress we faced from taking over our new roles, we struggled to communicate with each other and grew distant from each other. Lack of communication meant everyone was unclear about what was going on. We mitigated this through having a couple of honest F2F talks to sort things out. This cleared this air and allowed us to speak our minds, and that kept the team going till now, illustrating the importance of proper communication.
  • Server Faults: A "Service Unavailable" fault surfaced during our presentation rehearsal at midterms. With the help of others, we realised that it was due to the low performance capabilities from the free tier we were using. We also clicked "Submit" on the web app multiple times, causing a long queue, then subsequently crashing the server. We overcame this by upgrading our instance to t2 small.
  • App Crashes To implement the Offline Function, the iOS App crashed frequently as the architecture was not suitable. We then changed the architecture of the app to correctly incorporate the core data model.

Project Achievements:

  • Achieved our initial scope set as a 6-men team, despite having to downsize unexpectedly to a 4-men team.
  • Application successfully deployed to Apple App Store
  • Focusing on the experience rather than the outcome also helped alot in relieving stress for the team, which translated into better productivity and morale
  • To ensure everyone is on the same page after every meeting, each member is assigned a role in minutes taking. E.g. Cheryl takes minutes, Ailin will vet through Supervisor Meeting Minutes, Grace will vet through Client Meeting Minutes & Pei Jia will vet through Team Meeting Minutes.

Project Management

Project Schedule (Planned Vs Actual):

The team had 5 revisions to the project schedule since the start of the project.
Timeline 1: Pre-Acceptance
Timeline 2: Post-Acceptance
Timeline 3: After change in team structure
Timeline 4: Post Midterms
Timeline 5: After Change in Priorities

Please see all 5 versions of the project schedule here.

Planned Project Schedule (based on midterms feedback):

BareCode Timeline4 (After Midterms).png

Actual Project Schedule (after change in priorities):

Timeline4A (After Change in Priorities).png

Write Up:
The project plan during midterms did not include "Offline Mode", "Mobile Features", and "Security Module", but the "Offline Function" and "Mobile Features" portions were added based on feedback the team obtained from midterms.

1. Initially, the team had doubts about delivering the product with a fully-functional "Offline Mode" function, and decided to prioritise the "Mobile Features". However, after several internal discussions, the team decided to implement the "Offline Mode" function to boost the application as a tool that allows for learning-on-the-go. The supervisor and sponsor were also supportive of the move. Hence, to cope with the new additions, the team decided to drop the "Survey Module" as it provided the least value to the sponsor amongst all three features (Offline, Mobile, Survey). The team also decided to add the "Security Module" as a security feature since the project deals with confidential information like passwords.

2. The schedule during midterms only allowed for 3 UATs to be conducted, but post-midterms, the timeline has allowed for an additional UAT to be conducted on 5 April 2018.

Project Scope:

The team had 3 revisions to the project scope since the start of the project.
Scope 1: Pre-Acceptance
Scope 2: After change in team structure
Scope 3: Post Midterms

Latest Scope:

BareCodeFinalScope.png


Please see all 3 versions of the project scope here.

Write Up:
From Phase 1 to Phase 2:
We changed the way our scope was named, based on acceptance & supervisor's feedback. The new scope had features named in modules, and sorted by user type, which was a lot clearer than the initial scope that we wrote. We took a closer look at our scope and realised our good-to-have function of "Analytics" could value-add our sponsor more than the ability to collate assessments via iOS, which was parked under Secondary functions. After guidance from Prof Rafael, we decided to swap these two over, such that collating assessments via iOS became a good-to-have function, while moving "Analytics" to our secondary functions. It was also during this time where 2 of our group members left and dropped the project on us. Hence, after speaking to the sponsor and supervisor, we managed to scope down. By scoping down, we dropped all the good-to-have functions, and took out the interactive elements parked under "iOS Accessibility" Module . The "iOS Accessibility" was initially a core function of the project, but due to the sudden reduction in manpower, we had to take it out to complete the project on time. We also dropped our he sponsor was agreeable to our request.

From Phase 2 to Phase 3:
We obtained feedback from midterms that our application was lacking the mobile aspect, and the reviewers recommended that we included some mobile-only features to the application. We took up their suggestion and implemented the "Camera" function and "GPS" function. The decision to implement these 2 mobile functions were based on how much value they would add to our sponsor, how frequently the intended users will use the functions, how beneficial it would be to them while they use the app for Service Learning purposes, as well as the team's capability to manage the addition. The team also discussed among ourselves and decided that having an "Offline" function for the mobile application would value add the project a lot more, as an app that provides learning-on-the-go capabilities. Hence we decided to put it into the scope. To cope with the new changes in the mobile portion, the "Survey Module" was dropped as the team realised that the value that the "Survey Module" provided to sponsor paled in comparison to the "Mobile Features" and "Offline Function" modules.
On the web application, the team decided that we needed to include a security feature that would encrypt confidential information like passwords. As the web part was relatively stable, we did not have to make major changes to the timeline to accommodate this addition.
At this point, it is imperative to highlight that the team has completed the project with the initial scope when decided as a 6-men team, despite downsizing to a 4-men team. While we dropped the "Survey Module", the team has included "Peer Evaluation Module" and "Security Module" which provided more value to the sponsor. This was agreed upon with the sponsor as well as our supervisor.

Project Metrics:

Please see our metrics here.

Project Risks:

Please see our risks here.

Change Management:

Please see project changes here.

Technical Complexity:

S/N Complexity Description Image
1 Content Management - Storage for large files Initially we did it such that every time the lecturer uploads a video, it will go into one of the folders we created in our project. We were not too experienced and we realised when we deployed, that would not work because the files are just stored locally on our computer. We had to learn about web storage and how to access the storage using the application. We then did research on how to store files on AWS and found a solution that uses S3 bucket from AWS.
BareCode Tech Diagram.png


2 Core Data for Offline Mode Core Data allows us to save and store the data locally, and enables us to easily map the objects in the apps to the table records in the database. The flexibility in fetching objects lies in the complexity of the fetch request. This is resolved by the association of an NSPredicate object with a fetch request to narrow the number of objects being returned, where we creates a new record in a database when the unique identifier is not found, but if the record already exists we just updates it. Refer to figures below
Figure 1
Figure 2
Figure 2


Quality:

1. Web Application:

  • Though there is no confidential information in our database yet, the team has accounted for future users, and have developed the app such that all passwords will be encrypted when we bootstrap the lecturers and students.
  • Our current instance also addresses reliability as we ensured that the server will not be unavailable by upgrading the instance.
  • Backend codes are separated organized by DAO, controller, service, model, constant so that our codes can be more easily maintained and changed (upgrade or fixing).
  • Project is designed such that the front end is separated from the backend such that it only uses a script to call the API to retrieve the contents to display on the web app.
  • The frontend of the web application uses JavaScript and server side application which improves performance.
  • Added error messages to make sure page does not crash when it encounters error thus improving fault tolerance

2. iOS Application:

  • (Refer to Figure 1): We adopted the MVC architecture for the iOS app. The model files have been replaced by core data after implementing the Core Data model. Core Data drastically decreases the amount of code you write to support the model layer, which decreases potential errors. It ensures sophisticated query compilation. Instead of writing SQL, you can create complex queries by associating an NSPredicate object with a fetch request.
  • (Refer to Figure 2): We modified the codes in the API and Controllers to ensure that they connect to the data model instead of connecting to the API directly as before. The codes are now reusable as they follow a standard format, and we also added comments for easier maintenance in future, wherever needed.
Figure 1
Figure 2

Immediate Deliverables:

Stage Specifications Modules
Project Management Minutes Team, Supervisor, Sponsor Meetings
Metrics Bug Metrics, Task Metrics, Wellness Metrics
Diagrams ER Diagram ER Diagram
Use Case Use Case Diagram
System Architecture Diagrams System Architecture Diagrams
Design Persona & Scenarios Persona & Scenarios
Prototypes Low Fidelity Prototypes, High Fidelity Prototypes
Testing User Testing 1 User Testing 1
User Testing 2 User Testing 2
User Testing 3 User Testing 3
User Testing 4 User Testing 4 (TBU)
Miscellaneous Handover Document File:BareCode Handover Doc for Web Application.pdf

Testing:

Please click here for more details on the UATs.

User Testing Date Venue Number of Testers
User Testing 1 6 November 2017, 1130AM - 230PM Ngee Ann Polytechnic 8
User Testing 2 13 February 2018, 430PM - 715PM Ngee Ann Polytechnic 20
User Testing 3 14 March 2018, 4PM - 8PM Ngee Ann Polytechnic Bus Stops (ID: 12101 & ID: 12109), Beauty World MRT stations, King Albert Park MRT Station, Sixth Avenue MRT Station, Tan Kah Kee MRT Station 27
User Testing 4 6 April 2018 Ngee Ann Polytechnic (TBU)

Reflection

Team Reflection:

Overall, the team agrees that this IS480 journey has been fruitful. We sowed plenty of hours into the project and are about to reap our rewards. We’ve also agreed that apart from refining our coding & communication skills, we’ve learnt a lot more non-tangible skills from each other, our peers, our sponsor as well as our supervisor. The life lessons we took away from each other will stick with us for a long time to come. Transiting into a smaller team meant we had to put in extra hours. Stepping out of our comfort zones, taking on increased responsibilities, and subsequently, effective time management were some of the key issues that we had to learn how to cope with.

Communication was weak at first, but we picked that up and it proved to be effective. We also suffered the brunt of bad documentation at the start, but moving on, we improved on our ways and made sure we accounted for everything we were tasked to do. Looking back, the days were difficult but overall it was through sheer grit, determination and a lot of positive thinking that got us through.

We’re also grateful for our sponsor and supervisor for the help and advice they’ve given us.

Individual Reflection:

Cheryl Lee Sze Min:

The whole IS480 has been a roller-coaster journey. It started off where everything was peaceful, on a plateau. We climbed and got to a high when we made it through acceptance. Everything was good until our first dip, and it was a deep plunge when we had 2 of our key developers choosing to leave. The climb up was then arduous, fraught with plenty of further dips, then slight climbs when our app part works, then dips again, especially closer to the midterms. While we kept our morale high, there was an obstacle called “Stress” that we had to overcome, because failing the midterms meant having to start from scratch. We were determined not to make that an option for us. Again, midterms ended on a high and then we plunged again when we had to develop more functions that were foreign, but would add immensely to the value of the project. Our cart went forward, dipped when there were problems, but the climbs this time were higher. Every positive step we made went a long way, and we're glad this roller coaster ride is almost over.

What I’d like to say is that I’ve learnt to pick myself up from what seemed like a failure at the beginning. Coming this far has been a great achievement for a "handicapped" team. I used to term ourselves “handicapped”, in this sense, it's “a circumstance that makes progress or success difficult” but looking back, I can proudly say the team made this work for ourselves.

During the journey, I saw the team standing by 3 principles:

  1. The first step is always the most difficult
  2. Be afraid, but do it anyway
  3. Things always seem impossible until its done

What I took away from the project is a whole bout of grit and lots of positivity. And of course, friends. I think bad circumstances have bonded us, giving us the opportunity to learn from each other and I’m glad it was a positive kind of bond.

Apart from guidance in terms of steering the project, I think Prof Raf has also given us plenty of life advice. Concepts like sharpening the saw, how to approach things without a fear of failure, his zest for improving education were a fresh sight in SIS. I took away more than just knowing how to mange stakeholder expectations and a team. I took away relevant life lessons which has aided me, and will continue to aid me as I approach bigger things in life.

Cheau Nor Ailin:
Being able to have made it this far has truly been a huge achievement for myself and the team. I remembered how we struggled so badly at the start of the year and how much we wanted to give up so badly because we thought we weren't good enough. We really thought we would fail but when we talked to Prof Rafael and Prof Ben, everything just did not sound as bad anymore. And that kept us going all the way till midterms which we were truly proud to have reached! And even after midterms when we struggled because we had to do 2 new functions that we weren't familiar with, we still persevered with the help of our wonderful supervisor! He gave us good insights on what can be done for analytics and also gave us a boost of confidence. He told us this term called "Sharpen The Saw" which helped us to take a step back and look through the fundamentals to see what was lacking instead of trying & trying with a blunt blade. I remembered before that meeting, Pei Jia was so stressed about not being able to finish the offline function and how she was worried she might pull us down. And we stood outside the gantry talking to each other for an hour, telling her to look at how far we've gotten and if we could get through all that, we can get through this as well! And she persevered and we were so proud of what she has achieved now without any prior knowledge! It has truly been an amazing journey with the team through our ups and downs. And I'm really proud of how much we have all grown and how much we have learnt throughout this whole process. I was also thankful to have gained a whole lot of new friends from all the problems I had such as "service unavailable", "api calls", and even "s3 storage". It was through these struggles that we truly managed to learn and grow from them. And it is with all these experiences that we can now look forward in life, believing that we can achieve much more even if we have any setbacks by not giving up and sharpening the saw.

Grace Foo Huan Ting:
Through this long-term project, I got a feel of how it is like working with a software developing team. I learnt how to code with new and more difficult programming languages, how to learn on my own, from the web and from friends. It is through countless hours of testing and debugging before the final product can be produced. Of course from this experience with FYP, it is much more than just the coding experience. I have learnt how to work together in a team with different dynamics and to utilise everyone’s strengths to the best of their abilities. Though it wasn’t an easy path, I am glad we managed to overlook our flaws and achieve what we have today.

I also realised the importance of time management in this project. This is because it is much easier for us to manage tasks which we know what to expect and how to do, and we will know how much time to allocate for each task. However, things are not as simple for things that we are unsure of how to do, as we are unable to estimate the time needed for research as well as trial and error. However, the ability to estimate time taken for each task is extremely important for us as it gives us the confidence that we are able to complete the project, reducing our stress levels and thus improving our well being, this is important for a small group like BareCode. I want to thank our supervisor Rafael for helping us with time estimation and management during one of our consults and that helped increase the confidence and morale of the team.

I would like to thank our supervisor Prof Rafael, sponsor Andrew, the teaching team and most importantly my group members, PM Cheryl, iOS developer Pei Jia, Backend developer Ailin for the ups and downs of this project.

Lee Pei Jia:
I felt a lot of stress when I was first entrusted with the role of iOS developer, because I’m afraid that I will fail to deliver since I have no prior knowledge in Swift at all. However, I'm thankful that I have friends who care more about my well-being than their grades, as they told me that I can just do my best, and they are ok with any grade we get. To be honest, I'm really very touched, not by what they said, but because I feel that all 3 of them are being genuine when they said that. FYP is not just a module to me, but I've learnt many things beyond textbook materials. I learnt about how the real society works, where people come and go; the Sharpen-Your-Saw concept, and it also helps me to know myself better. I came to the conclusion that your only limit is yourself. People always think that they can only do this much. However, when you really go all out and force yourself to level up, you will be surprised at how much you can achieve. With this group of friends and my supervisor Rafael, I find more confidence in myself, and I believe I will have more faith in the things I do in future.

I feel that I gain more than what I lost in this FYP. New genuine friendships, and more resilience and I believe I have a “stronger’ heart now. No matter what our final grade is, I'm already very proud of what the 4 of us have managed to overcome and achieve together.