Planning, Tools

My planning process

I use Trello to keep track of tasks, which is an app based on the Kanban framework where you have a board in which you have several groups, and you have cards for each major task. In Trello you can have one or more checklists within each card and you can label them and filter by label. The idea is that you move your card/task into a different group when it is at a different stage of completion. Kanban was developed at Toyota in the 1940s using actual cards and a marked-out board. I first came across it in a summer job at an electronics factory in 2002, and by the mid 2000s it was being used in knowledge work.

I started by planning several versions of the app to be completed by the first of each month but towards the final two months I found this to be inefficient as I was continually thinking of new tasks to be added to the list for each version. Each version had a Trello card in my general task list with a checklist for each milestone of the app to be completed in that version.

FireShot Capture 098 - Project I Trello - https___trello.com_b_PrnbD6uy_project

For the last month of the project I estimated that I had 100 hours to work on it, allowing for some overruns, so I divided that up into Coding, Writing, Blogging, Portfolio and User Testing. I set up a new Trello board with the classic Kanban boards of To Do, Doing and Done, and I split up all the tasks needed in each group into chunks of approximately an hour and any left over I titled as “Spare”.

FireShot Capture 099 - Create V4 of CianT_ - https___trello.com_c_uhJXD3pV_356-create-v4-of-ciantube

The first week I did this I got 25 tasks done, plus reading. This system helps me prioritise tasks as if there isn’t a spare card available or it isn’t a small task to be added to another card, I have to either choose another card to remove, or admit that the new task isn’t important enough to add to the project. I have added a “Holding” group where I have added tasks that it would be good to do if I can fit them in.

Standard
App Infrastructure, User Research, UX

Interface testing with Cian

Once the app was deployed, I gave it to Cian on the iPad. He was excited to see some favourite shows that don’t surface on their own on YouTube Kids (railway model building, Network Rail instructional videos).

He found it harder to get his head round using the browser buttons to navigate forwards and backwards through the screens, which means I need to consider how to remove the browser interface, perhaps with some elements of a PWA, and add a back button within the app.

I also had the video player too big within the landscape orientation to see the suggested videos underneath immediately, which is a relatively easy fix and I can use Media Queries to show it the right size on each device.

Standard
App Infrastructure

Scheduling actions

Structure of the App

  1. Flask web app
  2. Grabber – fetches video IDs from a specified YouTube Playlist and saves them as JSON files
  3. Loader – loads video IDs and the ID of the device that added the playlist into the database

Functionality

The app needs to be able to ingest playlist URLs and work with them at regular intervals.

  1. When someone enters a new playlist
    1. Run Grabber
    2. Run Loader
  2. When someone returns to the app
    1. Run Grabber
    2. Run Loader
  3. At intervals
    1. Run Grabber
    2. Run Loader

Possibilities

Things to consider

  • Running concurrently – as the app gets more widely used, waiting for one user’s videos to be included before another’s can start (running serially) will be inconvenient.
  • How long does it take? If it’s too long I may need to store when videos were last checked for and only bring in those added since then.
  • Running Grabber and Loader at intervals is relatively unimportant, it’s utility would be for when a parent is actively adding videos to a playlist while the child is using it.
  • Should Grabber and Loader be added to the main app as functions?
  • Do I need to refactor the app into separate files? I’m reluctant to do that as it’s actually working now.

Standard
App Infrastructure

Workflow

I have the app set up both on my CodeAnywhere container and my Mac, with both connected to the same GitHub repository, so I can work on them from anywhere.

Zappa enables you to set up several stages, for example /dev, /staging and /production, and once the initial setup is done, the app can just be deployed by entering zappa deploy STAGENAME in Terminal. It can be updated with zappa update STAGENAME.

I don’t have Zappa installed on the CodeAnywhere container as the AWS login credentials method is a bit complicated for a terminal-only container, so to deploy changes made on there from my Mac I need to get the changes from GitHub with the command git pull origin master.

Standard
Legal

GDPR

The General Data Protection Regulations (GDPR) is a set of new EU regulations regarding the collection and processing of personal data on EU citizens.

The UK is committed to enforcing these regulations despite Brexit, but they apply to any entity, regardless of where they are located, unless they specifically block visitors from the EU and other GDPR countries, and it becomes law on 25th May 2018.

GDPR considers personal data to be anything that can be used to identify an individual, whether directly or indirectly. Aggregated data may still be identifying if it isn’t sufficiently pseudonymised (Bowles, 2018).

The regulations seek to stop the indiscriminate collection of data, and state that data can only be collected and processed for “specific, explicit and legitimate purposes” (ICO, 2017), and not vague reasons such as “Marketing Purposes” or “Future Research” (Bowles, 2018).

There are several legitimate bases for processing data, including Consent and Legitimate Interests. Consent must be positive – not based on pre-ticked or opt-out boxes – and should be refreshed to comply with the regulations if already gained (ICO, 2018a).

Legitimate Interests is the most flexible basis for processing data and applies where people’s data is “used in ways they would reasonably expect and which have a minimal privacy impact, or where there is a compelling justification for the processing” (ICO, 2018b). A Legitimate Interests Assessment should be carried out in order to demonstrate that this basis can legally be applied (ICO, 2018c).

The GDPR provides the following rights for individuals (ICO, 2018d):

  • The right to be informed
  • The right of access
  • The right to rectification
  • The right to erasure
  • The right to restrict processing
  • The right to data portability
  • The right to object
  • Rights in relation to automated decision making and profiling.

External services integrated with a main service (such as analytics or database providers) should also be GDPR-compliant.

Children

Only children over the age of 13 are able to give their own consent for data collection and processing, and for children younger than this consent must be given by whoever holds parental responsibility for the child (ICO, 2018e). Services are expected to be proactive about ascertaining whether the user can give consent so it would seem that legitimate interests would be a better basis for data processing by CianTube.  In this case the interests of the data processor or controller must be balanced against the child’s interests and their fundamental rights and freedoms.

Children should also be provided with privacy notices so they are able to understand what will happen with their data.

References

Bowles, C. (2018) A techie’s rough guide to GDPR. [Available from https://www.cennydd.com/writing/a-techies-rough-guide-to-gdpr]

ICO (2017) Principles [Available from https://ico.org.uk/for-organisations/guide-to-the-general-data-protection-regulation-gdpr/principles/]

ICO (2018) Consent [Available from https://ico.org.uk/for-organisations/guide-to-the-general-data-protection-regulation-gdpr/lawful-basis-for-processing/consent/]

ICO (2018) Legitimate interests [Available from https://ico.org.uk/for-organisations/guide-to-the-general-data-protection-regulation-gdpr/lawful-basis-for-processing/legitimate-interests/]

ICO (2018) How do we apply legitimate interests in practice? [Available from https://ico.org.uk/for-organisations/guide-to-the-general-data-protection-regulation-gdpr/legitimate-interests/how-do-we-apply-legitimate-interests-in-practice/]

ICO (2018) Individual rights [Available from https://ico.org.uk/for-organisations/guide-to-the-general-data-protection-regulation-gdpr/individual-rights/]

ICO (2018) Children [Available from https://ico.org.uk/for-organisations/guide-to-the-general-data-protection-regulation-gdpr/applications/children/]

 

Standard