πŸ’Ό Briefings

A Set πŸ”—

A Set

Business problem

At CodeYourFuture, trainees build many front ends, sample websites, and layouts as we learn web focused software development.

We use stock imagery sites, like Pexels, Unsplash, Pixabay, and other royalty free stock image sites, to find photographs, icons, illustrations, and other graphic assets.

But we also create lots of assets and we don’t have a way to share them with other members of our organisation.

How can trainees discover and use these assets in an organised way?

Proposed functionality

  • User accounts

  • A way to upload assets

    • How do we make sure we have the rights to these assets?

    • Should anyone be allowed to upload?

  • A way to discover assets

    • Can assets be described with keywords or tags?

    • Should they be organised into categories or folders?

    • What sort of categories? Does image size matter? Type?

  • A way to use assets

    • Can we provide an API as we know trainees will be building lots of front ends?

    • Do we need bandwidth limits?

    • How do we protect our images so they are not used by other people?

These assets should be stored in a PostGreSQL database and displayed by a React front end.

Users and roles

As a trainee, I want to quickly grab images and assets that represent me and my community.

As a mentor, I want to quickly grab images and assets that represent me and my community.

As a mentor, I want a go-to place to pull assets from to brand my CYF projects and tutorials instead of making them myself every time.

As a staff member, I want everyone to use assets that we have the rights to use.

Stretch goals

  • User collections

    • A user can collect assets into a themed collection they can share with others
  • On the fly API

    • Collections are also available as JSON so users can consume the images in their own application.

All Eyes On Me πŸ”—

All Eyes On Me (DevOps, QE)

Business problem

At Code Your Future, trainees open pull requests to coursework repo every week. Mentors work really hard to review PRs when they can, but a lot of time is wasted on getting the basics right: PR message filled in, acceptance criteria met, linting enabled, that often mentors run out of time before they can get to more substantive commentary. Trainees don't get as much feedback as they really need.

How can trainees get automated feedback on the basics?

Proposed functionality

  • A way to define basic PR quality standards

    • How will you set these? There are some notes in this briefing on typical mistakes CYF trainees make on every repo..
  • A way to test each PR

    • Github Actions can be run on PR. What existing automated testing exists in the repositories and how are they different across modules?
  • A way to reject each PR

    • We want to know which PRs are ready for human review, so how will you reject PRs that need more work before they can be looked at?
  • A way to share the standards

    • Actions can be published to a marketplace or stored at an org level. What will you choose?

Your solution/s should be available to everyone at CYF and be modifiable by mentors.

Users and roles

As a trainee at Code Your Future, I want help with making my PRs meet professional standards.

As a mentor at CYF, I want to make sure every trainee gets some feedback so they become the best they can be.

As a module lead, I want to get automated reports of trainee PR quality across a whole module or all of CYF (but this is a stretch goal)

What else do users want? How will you find out? Some user research may be needed. Remember: Do the simplest thing that could possibly work.

Stretch goals

  • Reporting

    • Automated and aggregated reporting to show us patterns over time

Things to consider

Here are all the repos trainees open PRs to https://github.com/CodeYourFuture/Table-of-Contents

There are existing tests running on some repos at CYF. Can your solution work with those tests? Make sure you don't disable existing, working solutions.

One approach to testing PRs is to write all the coursework answers in a file and check the PR code for them. Why is this not desirable? Another approach is to fix the errors for the contributor. Why is this not desirable? (Remember, at CYF the goal is to learn.)

Errors common to all CYF trainees in all weeks

Terrible communication

  • A single giant commit with no descriptive messages

  • PR message template not completed and nothing explained to or asked of reviewer

  • PR not titled as asked but something like "final" or "my work"

Junk changes

  • Junk files in the PR from using git add . (node modules, DStore, etc)

  • Old work from previous weeks in the PR

  • Formatting - not having Prettier installed

  • Loads of commented out code left in the files

Empty PR

  • There's basically nothing in the PR but it's not opened as draft

Appanage πŸ”—

Appanage

Business problem

At Code Your Future, we build loads and loads of team projects. We invent products, build apps and solve problems together. We use many products built by CYFers: the Dashboard, Classplanner, the Curricula, Signposts, Rainbird, and many more were all built in-house and some as "final" projects.

We have a great time and learn a lot, but good work is often lost because nobody maintains the product after the build is done. We still need a working attendance system, even though we've built several, and everyone wants one.

It should go like this:

πŸ’‘Idea ➑ πŸ§ͺCYF Labs ➑ 🎁CYF Products

Experimental products implicitly belong to CYF Labs. Once they have been trialled and proven, they can be proposed to CYF Products, and if there's a team and a solid use case, they will be accepted.

But most CYFers don't know this. So, how can CYF volunteers discover and adopt products CYF needs?

Proposed functionality

  • A way to produce listings of available products

    • What schema will you use or define to describe available repositories?

    • What information do CYFers need to understand how to adopt a build?

  • A way to organise participation

    • How will people sign up to adopt a build?

    • All these products should be Open Source; how will you also open up contributions from the broader FOSS community?

    • How will you empower CYFers to support specific products they want?

What is the simplest thing that can possibly work?

These product listings should be stored in a database and displayed by a front end which scores 100 for Accessibility on Lighthouse. You should produce a public unauthenticated API.

Users and roles

As a trainee, I want to develop my skills to help me get on to a CYF Products team when I'm ready

As a developer, I want to sign up to build things for real users to keep me motivated in my coding

As a mentor, I want to scan open listings and get a sense of the current builds and what I can help with

As a staff member, I want everyone to feel empowered to participate in the universe of CYF Products so I don't personally die of exhaustion trying to organise it all

Stretch goals

  • Slack feed

    • Should new products be posted to Slack? Will you create a webhook?
  • Product space similarity vector

    • There are often multiple takes on the same problem. Can you group products by similarity?

Things to consider:

Why aren't products adopted? There are many reasons, and not all of them can be solved. What happens in between the build and take-up? Understanding this gap will help you build something that can bridge it.

Is it desirable for every product to be adopted? Why or why not?

How can the Change Board help you? https://github.com/CodeYourFuture/Changes

https://docs.codeyourfuture.io/trainees/cyf-products

https://www.gov.uk/guidance/the-technology-code-of-practice

Avanart πŸ”—

Avanart (FE, UX)

Business problem

At Code Your Future, we interact on many different platforms: GitHub, LinkedIn, Slack, Codewars, and more. We all choose a single, consistent, avatar, so we can recognise each other in all these different contexts.

But not everybody can share a picture of themselves online in our community, so many people use Robohash to generate a unique robot avatar from their name.

We want our own CYF-flavoured robohash!

Proposed functionality

  • A way to generate avatars

  • A way to search avatars?

    • How will full-text search work on your product? Will you build it yourself or use services like Algolia or Lunr? What are the advantages and disadvantages of these?
  • A way to share avatars

These avatars should be generated and displayed by a front end which scores 100 for Accessibility on Lighthouse. You can choose the framework or build in native web components.

Users and roles

As a trainee at Code Your Future, I want to get a personal avatar so everyone can recognise me

As a mentor, I want a CYF-branded avatar system so I can easily recognise CYFers online and say hi

What else do users want? How will you find out? Some user research may be needed.

Stretch goals

  • Regional avatars

    • In North West, the different cities have different symbols: Manchester are bees, Leeds are owls, Liverpool are liver birds (cormorants), and Sheffield are smiths (Thor and Vulcan). Can you find a way to create regional avatars that incorporate these symbols? Can Boring Avatars help you?
  • Lighthouse CI

Can you integrate Lighthouse testing into your deployment workflow? Who will define the Github action? How will you decide what budget to set?

  • Gravatar Integration

Important Note to Developers: This project could be highly challenging or could be a fairly simple implementation of an existing library. The real skill here is to start with the simplest thing that could possibly work.

If the groundwork is solid, this project could be adopted by CYF Labs, so get the fundamentals right first.

πŸ–ΌοΈ
{width=“1.2083333333333333in” height=“1.2083333333333333in”}
πŸ–ΌοΈ
{width=“1.2083333333333333in” height=“1.2083333333333333in”}(current NW avatars for inspiration)

Badger Badger πŸ”—

Badger Badger (DevOps)

🦑 🦑 🦑 πŸ„

Business problem

At Code Your Future we have a bunch of great Open Source products, but they're not all in the greatest shape they could be. To really shine, our FOSS repos should meet the highest standards of https://www.bestpractices.dev. But to do this, we need a team of developers to understand the criteria, plan the changes, drive the adoption, and support all technical contributors to meet the new standards.

This highly challenging project is only suitable for advanced trainees or grads doing a specialisation track.

Proposed functionality

At least one CYF FOSS project should meet the requirements for a passing level Badge https://www.bestpractices.dev/en/criteria/0

Users and roles

As a FOSS maintainer I want my project to be well-run and of good quality

As a CYF organiser, I want to attract talented developers to volunteer with us

As a CYF trainee, grad, or volunteer I want to contribute to impressive codebases and raise my profile

As a CYF DevOps track trainee, I want to gain practical experience in creating a culture of excellence in an organisation

As the Director of Education, I want to share our work and have properly represent the talents and achievements of our community

Likely challenges

There are over 600 repos in CYF, and you can’t do them all. I suggest you start small. Do the simplest thing that could possibly work.

Stretch goals

Silver, or Gold!

Careless Whisper πŸ”—

Careless Whisper

Business problem

At Code Your Future, mentors and trainees hold many study sessions. Often people record these sessions, which is very helpful.

But not everybody can learn or absorb from video teaching. Some people really need a transcript. (Others desperately need a summary. )

How can trainees use Whisper to transcribe study sessions? How can they discover and browse those transcripts in an organised way? And could they even summarise those texts? How?! What is the simplest thing that could possibly work?

Proposed functionality

  • A way to use Whisper

    • How will you teach users to do this? Will you write a tutorial page? Embed a video? Your users are all developers; how does this affect your decision?

    • Are there free online services users can extract their transcripts with?

  • A way to upload transcripts

  • A way to search transcripts

    • How will full-text search work on your product? Will you build it yourself or use services like Algolia or Lunr? What are the advantages and disadvantages of these?
  • A way to browse transcripts

    • What metadata will users need? A link to the original video? A link to the module on the syllabus? What about repos on Github? Cohort name? Date? Keywords? Summaries?

    • How will users find the most useful transcripts? A voting system? Or what about most downloaded or most returned-to?

These transcripts and summaries should be stored in a PostGreSQL database and displayed by a React front end which scores 100 for Accessibility on Lighthouse.

Users and roles

As a trainee at Code Your Future, I want to get targeted mentorship on the coursework I am completing.

As a trainee who reads better than they hear, I want transcripts of everything.

As a trainee who has four kids and two jobs, I want a summary because I don’t have two hours to watch a video.

As a mentor at CYF, I want as many trainees as possible to be able to access the study sessions I run.

What else do users want? How will you find out? Some user research may be needed.

Stretch goals

  • Video upload

    • For teams with a Systems track developer, can you build A/V upload and process with Whisper in the cloud? What open source examples exist that you can use to help you?
  • Lighthouse CI

Can you integrate Lighthouse testing into your deployment workflow? Who will define the Github action? How will you decide what budget to set?

  • Summarise AI

You’ve taught the community to transcribe using one AI model. Can you teach them to use a summarise model? Which of the 700+ public models could you use? Teams with a PM, Product Owner, and Tech Lead should workshop and roadmap this feature, even if you don’t build it.

Important Note to Developers: This project could be highly challenging or could be a fairly simple text search and filter view. The real skill here is to start with the simplest thing that could possibly work.

If the groundwork is solid, this project could be adopted by CYF Labs, so get the fundamentals right first.

Clarissa Explains It All_ πŸ”—

Clarissa Explains It All

Business problem

At Code Your Future, Sally explains things. She actually cannot be stopped.

Of course we all have Google and can look things up ourselves. But in programming, for every problem, there are many right answers. What CYFers want to know is: which right answer have we agreed to use?

In collaborative software development, the most important thing is that everybody agrees on the rules of the road. Much like traffic laws, it’s not that driving on the left or right is better or worse, it’s that everybody must agree or we will drive into each other.

How can developers build a knowledge base of answers?

Proposed functionality

  • A way to ask questions

    • What interface will you build to help the user interact with the model? Do the simplest thing that could possibly work.
  • A way to rate answers

    • You’ll want to improve your model by flagging bad answers.

    • Who decides bad answers? Do admins and users have different levels of authority here?

The application should store data and display an interface which scores 100 for Accessibility on Lighthouse.

Users and roles

As a trainee at Code Your Future, I want to find out simple quick answers to my questions without reading a zillion docs.

As a mentor, I want to improve processes without creating a burden for others or a constant backlog of outdated docs..

What else do users want? How will you find out? Some user research may be needed.

Your CYF model will be supplied as a hosted model on huggingface but please give notice so CYF can prepare this for you.

Stretch goals

  • Fine tune

Can you create a way to update information by fine tuning with new facts?

  • Slack bot

    • Can you create a Slack bot to bring the question and answer interface into Slack?
  • Lighthouse CI

Can you integrate Lighthouse testing into your deployment workflow? Who will define the Github action? How will you decide what budget to set?

[Note: this challenging project should only be attempted by a strong group of developers who have a tech lead familiar with machine learning.]{.mark}

Deja Review πŸ”—

Deja Review

Business problem

At Code Your Future, we like to use a learning technique called spaced repetition. In fact it is set as prep work several times during the course. The technique involves reviewing a topic over increasing time gaps (e.g. after one week, one month, three months, six months, one year).

What is the simplest thing that could possibly work?

Proposed functionality

  • A trainee can add the name of a topic and the date on which they first learned it

  • The system then calculates the dates on which they should review

  • The computed dates could be stored in the browser and displayed when the trainee revisits the website

Users and roles

As a trainee, I want to easily calculate the dates when I should be reviewing a newly learned topic.

As a trainee, I want to know which topics I should be reviewing so that I can plan it.

Stretch goals

  • Integrate with Google Calendar / iCal / Outlook to allow future review dates to be added my calendar and notified about them

Things to consider

Leaning into browser storage seems like a good way to avoid building an auth system (which is a difficult challenge of its own).

Deskeando πŸ”—

Deskeando

Business problem

Who will work where, and when?

At HaveALook Multicorp, there are 50 desks in the office, but no way of organising who will work where. People may work alone, in pairs, or in larger teams, and these groupings change all the time. Sometimes there are Covid restrictions on how many people can be in the office and those change often too.

They need an application to manage this problem, a way to book desks in advance so everyone can be sure they have space to work.

Proposed functionality

  • A user account for each office worker.

  • A way to see what desks are available

  • A way to navigate a calendar of availability.

  • A way to see the features of different desks.

  • A way to book a desk for yourself.

  • A way to book desks for others in your team.

  • A reminder of an upcoming booking

  • A way to cancel a booking.

The database of bookings should be stored in a PostGreSQL database and displayed by a React front end.

Users and roles

There are developed personas for this project:

https://www.figma.com/file/4bit1t0X7VZB7XFCysGIhV/CYF-Project-Team-7?node-id=0%3A1

Please develop your user stories based on these.

Challenges

You will need to integrate a visual map - probably in SVG. You will have to make sure your SVG is accessible by keyboard and screenreader. How will you test this?

Most users will access the booking application on their phone, so your design should be “mobile first”.. How will you make the design flexible and flowing so it also works on desktop?

Stretch goals

  • SMS notification

    • A user can cancel a booking directly from a reminder text
  • User Testing

    • Recruit a group of users and run UX testing

Further resources

Draft of proposed Featureset

Main screen (X week view)

  • show all bookings for upcoming X week time period

    • As an employee I would like to see all bookings for the upcoming time period so that I can choose my days to book with maximum information
  • show number of available desks for each day

    • As an employee who makes bookings for my team I would like to know for each day how many desks are available so I immediately avoid days with too few availabilities
  • show bookings for no specific desk

    • As an employee I would like my booking to be visible so that other employees can know I’m in and choose to come in on the same day so we can get lunch
  • show bookings for specific desks clustered in a way that makes taken and empty clusters visible

    • As an employee who makes bookings for my team I would like to know for each day whether there seem to be any clusters available so that I immediately avoid days with no desk clusters available

    • As an employee who makes bookings for my team I would like to have visual confirmation that my booking is for a cluster so I know that I didn’t make any mistakes

  • options to navigate to future and past

  • Make booking for day

    • As an employee making a booking I would like to select a date and get taken to a booking screen with reasonable defaults so that I can click ok and move on with my life
  • Make booking for day/desk?

  • Cancel booking for day/person

  • Edit booking

Booking screen view

  • Select date

    • Date is preselected

    • Date can be changed

    • Date recurrence can be selected

    • Date range can be selected

  • Enter name

    • Single name is by default the logged in name (no login to start)

    • Names have a dropdown/autocomplete of known employees

    • Until we have logged in employees (not in the first increments), assume we have a pre-populated table of of employees from which names of people being booked will be logged in

      • Once we have login, can figure out what we do with not-yet-registered employees (or not-ever-going-to-be employees)
  • Don’t care where I sit

    • By default
  • Choose morning only/afternoon only

    • by default don’t need to do either
  • Floor plan appears and can select desk (note: developers should ask questions about this)

    • Floor plan shows desks that are already booked
  • Confirm button

Notifications

?

View big floor plan

?

Floorplan

πŸ–ΌοΈ
{width=“6.5in” height=“6.791666666666667in”}

Development Planner πŸ”—

Development Planner

Business problem

At CodeYourFuture, we work through a defined syllabus and our coursework is set by teachers and subject matter experts.

After we graduate, we need to take control of our professional development and plan our own learning schedule.

Proposed functionality

The app should have user accounts and all plans should default to private

Users can invite feedback on their private plans with a share link

Goals can be scheduled and tasks prompted by a notification system

All data should be stored in a database and be accessed by API

Users and roles

[As a graduate, I want to create a professional development plan with defined and scheduled SMART goals.]{.mark}

[As a job applicant, I want to create a role focused development plan to prepare for a specific job opportunity.]{.mark}

[As a mentor, I want to be able to give feedback based on my professional expertise.]{.mark}

Likely challenges

  • Be careful how you structure your data as this could get confusing quickly

  • How will you send out notifications? With a mailer, or push notifications?

  • How will you authenticate? Can you use Github? Should you use Google?

Existing Systems

Stretch goals

  • Allow role plans to be published and remixed after they have been developed

    • As a graduate, I want to share the effective development plan that helped me get a job

    • As a mentor, I want to improve a template development plan in my specialism

    • As an applicant, I want a framework to begin my own plan

  • User Research

    • Speak to your classmates about what features they’d like to use. Select a sensible feature and build it.

    • Speak to your teachers and mentors to see what features they’d like to use in the app. Select a sensible feature and build it.

Ding! Next! πŸ”—

Ding! Next! (DX/tooling)

Business problem

At Code Your Future, we run sessions and workshops online with lots of participants. These workshops usually involve timed segments with activities, discussion, and presentations. But it can be hard to keep to time when everyone is so interesting and smart (such a problem for us!)

How can we run our calls with discipline and timeliness so we can get everything we need to do, done?

Proposed functionality

Agenda Parsing

The extension will read the agenda written in the Google Calendar description and parse the items and timestamps.

Automated Meeting Chair

The chair could sound a buzzer when the timestamp for the next agenda item is reached.

It should automatically post the next agenda item in the Google Meet chat window.

Technology Stack

  • Frontend: JavaScript for the browser extension

  • Backend: Google Calendar API for fetching event data, Google Meet API for interacting with the meeting

  • Database: None required as it operates in real-time and doesn’t store data

Users and roles

As a meeting organiser, I want to ensure that the meeting follows the planned agenda so that it is more efficient.

As a meeting participant, I want to know what each segment of the meeting is about and when it will happen to stay engaged and contribute effectively.

What else do users want? How will you find out? Some user research may be needed. Remember: Do the simplest thing that could possibly work.

Things to consider

Likely Challenges

  • Synchronisation between Google Calendar and Google Meet.

  • Handling various time zones and daylight saving changes.

Stretch Goals

Voice Announcements: The extension could also make voice announcements for each agenda item.

Customisable Alerts: Allow users to customise the alert sound and message.

Development Phases

Feasibility Study: Research Google Calendar and Meet APIs to ensure the project is technically feasible.

MVP Development: Build a basic version of the extension that can read the agenda and sound a buzzer.

User Testing: Conduct tests with CYF staff and volunteers to gather feedback.

Iterative Improvement: Implement additional features based on user feedback and testing.

Deployment: Make the extension publicly available after thorough testing.

ξ°ƒ::agenda

10:00 agenda item eg description of activity

10:15 description of next agenda item

ξ°‚.

Energise! πŸ”—


title: “[]{#_nn86dzvod7qx .anchor}Energise!”

Business problem

At CodeYourFuture, we run lots and lots of meetings, often with people who don’t know each other well or at all. We begin our meetings with an energiser - a game to get the group together. But because we have so many meetings, it can get hard to think of all these energisers and it’s hard to know which are good.

Proposed functionality

The app should present an energiser from a database of energisers

Energisers can be chosen by name, randomly selected, or sorted by some metric

Users can vote on the energiser according to some metrics they find useful (fun/quick/ideal number of participants etc)

All data should be stored in a database and be accessed by API

Users and roles

As a host I want to pull up an energiser suitable for my meeting and have a good description of how to run it

As an attendee, I want to upvote energisers I like and downvote the ones I found a bit rubbish

As a creator, I want to upload my energisers in a simple structured way

Likely challenges

  • Be careful how you structure your data as this could get confusing quickly

Stretch goals

  • Create a slackbot

    • As a host I want to to run some energisers (eg voting or answers) on a slack post that is posted automatically by the app
  • User Research

    • Speak to your classmates about what features they’d like to use. Select a sensible feature and build it.

    • Speak to your teachers and mentors to see what features they’d like to use in the app. Select a sensible feature and build it.

  • Dark mode

    • As any kind of user, I would like to access dark mode
  • Host a game (mega stretch)

    • As any kind of user, I’d like to play simple games directly in the Energise app.

Glossary πŸ”—

Glossary

Business problem

We introduce a lot of new concepts and technical “nomenclature” to students during the CYF course. It can be hard to keep track of all of the different terms that get used, sometimes with different meanings in different contexts. You can search for a word within the syllabus, but the output isn’t formatted and it can be hard to figure out which reference to that word will actually give a good definition.

Proposed functionality

A solution would provide an easy-to-use way to search for a technical term and get a short definition, along with links to additional resources (e.g. appropriate section in the syllabus, MDN, …) and related terms.

Users and roles

The primary users will be students looking for a definition for a specific term. There will also be students and mentors adding content, either new terms or new/updated material for existing terms. There may also be some kind of moderation/administrative role (see below).

Likely challenges

How can we moderate and review the definitions as they’re added, to ensure that they’re high quality and easily understood by students? How do we handle common misspellings, or searching for things by symbols?

There can end up being a lot of data in a system like this, how can we create a system that scales efficiently to deal with that (e.g. showing “pages” of data)?

Stretch goals

  • Slack bot: that people can ask for definitions, and will reply with a snippet and link

  • History: can we see how the definitions have been changed over time, and by whom?

  • Syllabus integration: can we get the definition information from the syllabus somehow?

Goal! πŸ”—

Goal!

Business problemh

At CodeYourFuture we use daily standups, goal setting, and design thinking to continuously evaluate our work and plan improvements, and we want to teach our trainees this habit too. But right now this means we have a lot of meetings, where ideas get lost, or that we do a lot of paperwork and repetitive work, writing out all of these processes. We don’t want to teach our trainees this!

We want to spend around ten minutes each morning creating our standup, ten minutes each week setting our weekly goals, and ten minutes each month - etc.

We want to systematically record our work and then programmatically create each larger time block of goals from the smaller time block: quarter from month, month from week, week from day.

This is a challenging problem suitable for advanced trainees.

Proposed functionality

A ToDo app with time settings and Slack bot conversational interface. The app must integrate with Slack as that is where everyone in our community is every day, but the app should have a GUI (website) as well.

All data should be stored in a database and be accessed by API.

Users and roles

As a user, I want to spend less time recording my goals

As a user, I want to catch things I’ve missed and keep on top of my tasks

As a user I want to share my work easily

As a leader, I want to see what my team are working on

Likely challenges

  • Integrating with Slack means understanding the Slackbot API. Look at existing standup bots to see how this works.

https://codeyourfuture.slack.com/apps/search?q=standup

  • How will you manage access to the goals?

  • How will you manage time and navigating by time? Will you integrate Google Calendar?

Stretch goals

  • Suggest items in daily standup

    • In the Daily Standup conversational interface, suggest goals from the ’to do’ bucket that are not done.
  • Mark items as done

    • On the web app interface, the user can mark items as done and assign them to dates even if they were not chosen during the daily standup.
  • Create teams

    • Create a role of ’team’ and allow users to share goals with their team. This could include auto-posting to a team channel on Slack.

Note to Coordinator: This is already a challenging project, but if you wanted to go further, you could divide this into two teams - one building the graphical interface and one building the conversational interface. Managing multiple interfaces with one API is some next level stuff, so only choose this option if you have an abundance of very strong performers.

Good PR πŸ”—

Good PR

Business problem

At Code Your Future, trainees use various tools like GitHub Projects for issue tracking, Slack for communication, and Google Meet for video calls. However, there is no centralized platform to visualize everyone' progress and activity on their final projects.

How can trainees and mentors track project progress, visualize GitHub activity, and ensure fair contribution from all team members in a single, purpose-built platform?

What is the simplest thing that could possibly work?

Proposed functionality

Project data integration

  • Import project data: Team Name, Person, Role, Project Brief, Slack #channel, GitHub Username, GitHub Repo, GitHub Project Board, Deployed App, and Presentation

GitHub activity visualization

  • Display project progress and team member contributions based on GitHub activity

  • Generate graphs to visualize project progress and individual contributions

Fair contribution tracking

  • Implement a function to calculate and monitor each team member's contribution percentage.

  • Show alerts if contributions fall outside the acceptable range, prompting intervention

Centralized dashboard

  • Combine data to provide a comprehensive view of project progress and team collaboration

These features should be supported by a PostGreSQL database and displayed by a React front end, which scores 100 for Accessibility on Lighthouse.

Users and roles

As a trainee, I want to track my contribution to the project and ensure that the team is working together effectively.

As a mentor, I want to monitor project progress and intervene when necessary to maintain a fair distribution of contributions among trainees.

As a project manager, I want to visualize the progress of multiple projects and identify any issues that require attention.

As a participant, I want to see the progress of teams over time..

Stretch goals

Automated alerts

  • Send notifications to Slack or email when contributions fall outside the acceptable range

  • Customizable visualization

  • Allow users to customize the dashboard, selecting which data and visualizations are most relevant to their needs

Lighthouse CI

  • Integrate Lighthouse testing into the deployment workflow

  • Define GitHub actions and set budgets for Lighthouse scores

Things to consider:

Integrating with existing tools like GitHub requires understanding of their APIs and data formats. How can you ensure seamless integration while providing added value through visualization and fair contribution tracking?

There is already a spreadsheet that tracks this data, and it shows one way to pull the data you need from GitHub. Can you use this to help you? [TEMPLATE] Final Project - Tracker. The code is in the attached App Script.

Additional APIs and services to explore:

  • More GitHub APIs for repository, commit, and project board data

  • Slack API for sending alerts and notifications

[NOTE: a version of this project was built by trainees and adopted by CYF Products in Q3 2023]{.mark}

Hack Around the Clock πŸ”—

w

Hack Around the Clock

Business problem

At Code Your Future, we join hackathons and have a lot of fun learning and building together.

But we also find it hard to coordinate and we miss a lot of great opportunities.

How can we discover and participate in hackathons in an organised way?

Proposed functionality

  • A way to consume listings

    • How will you consume multiple APIs? Is it better to start with one feed and then add a second?

    • How will you normalise the data into one standard event listing with the details a CYFer cares about?

    • What event schema already exist?

  • A way to produce listings

    • How will you only show events that are still available?

    • How will your users sort and filter events to only show the ones that are right for them?

  • A way to organise participation

    • How will people sign up for events?

    • How will you empower CYFers to organise a group to participate in events?

What is the simplest thing that can possibly work?

These events should be stored in a database and displayed by a front end which scores 100 for Accessibility on Lighthouse.

Users and roles

As a developer , I want to sign up for fun events to keep me motivated in my coding

As a mentor, I want to scan open listings and get a sense of the current opportunities

As a staff member, I want everyone to feel empowered to participate in the universe of coding events themselves, so I don't personally die of exhaustion trying to organise it all

Stretch goals

  • Slack feed

    • Should new events post to Slack? Will you create a webhook?
  • Filtering events

    • Can you filter the events to only things CYFers can realistically participate in? For example, how will you discard all in-person events in the USA from MLH lists? How will make sure everything is free?
  • Google Calendar

Can you produce a google calendar of events that we can all subscribe to?

  • Conferences

    • What about free conferences and meetups? Can your app handle those too? Should it?

Things to consider:

Most events are hackathons, but not all. How will you decide what to tell the user about each event?

There are many more events than anyone can or should participate in? How will you filter events to things we really want to do?

How do event aggregation APIs get their data? What is web scraping?

Who already organises a lot of events at CYF? Would they be a good person to advise you on your development?

Useful links

How to Make A Class πŸ”—

How to make a class (UX/FE)

Business problem

At Code Your Future, setting up a new class involves coordinating various elements like trainees, volunteers, resources, and more. There is no fun and intuitive way to understand and visualise what goes into "baking" a successful class.

β˜€οΈWe like clarity. It's really important to us that everyone understands what they need to do to start a cohort at CYF.

How can cohort founders explore and experiment with different conditions to understand their options.

What is the simplest thing that can possibly work?

Proposed functionality

  • A way to visualise requirements

    • Create a web-based game using SVG illustrated game pieces.

    • Central mixing bowl where "ingredients" for a class are poured in from containers set around the page.

    • A "baking" phase where optional elements like food and childcare can be added, each having a cost.

  • A way to experiment with requirements

    • Dials and buttons could adjust ratios and tempo.

    • How will you set limits but still encourage autonomy?

This fun web game can be written in React, Web Components, or a framework of your choosing. You do not need to build a login or a database. The front end must score 100 for Accessibility and over 80 for Performance on Lighthouse.

Users and roles

As a prospective CYF organiser, I want to understand what elements are essential for setting up a new class and how they interact.

As a volunteer or staff, I want to express the complexities involved in forming a new class in an engaging way.

Stretch goals

  • Live data feed integration

    • Nobody can start a new class if the previous cohort is still struggling to find work. How will you set a limit by region?
  • Update constraints and ratios

    • As CYF evolves and we learn more about success and failure, we update the constraints. How will you allow administrators to update the values?
  • Lighthouse CI

Can you integrate Lighthouse testing into your deployment workflow? Who will define the Github action? How will you decide what budget to set?

Things to consider:

How can the Change Board help you? https://github.com/CodeYourFuture/Changes

How can the Programme Team help you? https://github.com/CodeYourFuture/Programme

This is a serious interface challenge. Get as much help as you can from UX and FE mentors.

More details:

When to launch ITD > Fundamentals > SDC

CYF Guide - Launching a cohort

Understanding Scale at CYF

—------------------

Notes: πŸŽ‚Cake Your Future

What is the recipe to make a class?

πŸ§‘ We need how many trainees

πŸ§‘ We need how many volunteers

🏒 We need a place to meet

πŸ’» We need laptops

🚌 We need a syllabus to understand what to do

πŸ§‘β€πŸ« We need training to understand how to do it

Where do trainees come from? ITD => funnel of ITD applicants and change the completion rate with a dial?

Where do volunteers come from? => meetups, dashboard signups, graduates => what is the retention rate on these inflows?

Where do places to meet come from? Volunteer workplaces, company donations, local government support, community centres

Where do laptops come from? Donations from companies, personal donations, donated money to buy them

Where does broadband come from? Donations from companies, personal donations, donated money to buy them.

Where does training come from? Volunteers and staff donate their experience. Some staff used to be volunteers!

Where does the syllabus come from? FOSS on Github, sister orgs like HYF, donations from Udemy and Codility, individual contributors

What extras are most impactful? (the icing on the cake)

🍲 food

πŸ‘Ά childcare

🎫 bus tickets

What makes a class even better? (light the candles)

=> hackathons

=> workshops

=> lightning talks

=> games

Hub Planner πŸ”—

Hub planner

Business problem

At Code Your Future, volunteers face extra challenges when coordinating remote and hybrid Saturday sessions. In the North West, for example, public transport is not reliable. Trainees could be in Manchester, Leeds or Liverpool. Some trainees may have to attend remotely due to train strikes, cancellations, breakdowns and floods!

Proposed functionality

  • A way for trainees and volunteers to check travel disruptions in their region

  • A way for everyone to register their attendance type

    • How can volunteers and trainees record their type of attendance? What sort of data will we need to store?

    • How can trainees provide a reason for their attendance? Is this useful?

    • What types of attendance are there? Remote, in person…. What else?

  • A way to notify facilitators of where everyone will be before class

    • How might fellow volunteers or trainees notify others that there are travel issues in their hub?

    • How will users tell what day everyone is talking about? Will you use a calendar?

The attendance type data should be stored in a PostGreSQL database and displayed by a React front end,

Users and roles

Trainees

As a trainee, I want to check for local travel disruption in my region before a Saturday class

As a trainee, I want to register my type of attendance ahead of a Saturday class

As a trainee, I want to be able to quickly update my attendance type ahead of a Saturday class

Volunteers

As a volunteer, I want to check for local travel disruption in my region ahead of a Saturday class

As a volunteer, I want to register my type of attendance ahead of a Saturday class

As a volunteer, I want to view the attendance type of all the trainees and volunteers for a given Saturday class

As a volunteer, I want to be able to quickly update my attendance type.

As a volunteer, I want to be able to automatically sort trainees and volunteers into breakout groups based on their attendance data according to some clearly stated criteria, for example:

- Trainees attending a hub in-person, say Leeds, where at least one volunteer is present won’t need to go into a breakout room.\

  • Trainees attending a hub in-person, say Leeds, where no volunteers are present will need to go into a breakout room.

- Trainees attending remotely will need to go into a breakout room

As a volunteer, I want to be able to override any breakout groups that are generated automatically.

Stretch goals

Pathways

The app can also handle a situation where a group of trainees are on several pathways and need to go into separate breakout rooms.

Class Planner integration

A previous Final Project built the Class Planner, which volunteers use to plan classes. https://classplanner.codeyourfuture.io/

How can the Hub Planner integrate with the Class Planner? Is it useful to do this? You might need to do some user research and talk to the Class Planner Product team.

Impact πŸ”—

Impact (Data)

Business problem

At CodeYourFuture, we use data to understand the impact of everything we do. We spend a lot of time diving into our data and tracing outcomes, and we use charts, graphs, and quantified impact statements in our pitch decks, grant applications, and regulated reporting.

But this is a ton of work; we repeat ourselves a lot, and we don't have a branded, organised way to explain these insights to others, including showing our working out and how we came to make these statements.

How can we explore, explain, store and share these insights in an organised way?

What is the simplest thing that can possibly work?

Proposed functionality

  • A way to pull anonymised data from multiple sources

    • We have the live data feed

    • What other data sources do we use a lot?

  • A way to interrogate data for the common questions we ask

    • Are there existing products we can use for this? What is simplest?
  • A way to visualise data for the common questions we ask

    • Are there existing products we can use for this? What is simplest?
  • A way to share impact data

    • Can we export CYF branded graphs and visuals?

    • Can we embed impact statements on Google Slides or websites?

This application could be full stack or front end. It is data focused. The front end must score 100 for Accessibility on Lighthouse.

Users and roles

As a CYF grant writer, I want to make clear, fact-based statements about our impact..

As a grant maker, I want to see the methodology for impact statements so I can verify them.

As a CYF data contributor (trainees and alum), I want to know that my data is being used correctly to support CYF's work and future trainees.

As a CYF member, I want to be able to talk about CYF's work with strong facts I can find and share easily.

As a regulator, I want to make sure Personally Identifying Information is not shared and all data is anonymised before store.

Stretch goals

Admin view

  • This product uses open data sets. CYF also has some private data sets, which cannot be connected publicly. What would you need to do to make this application secure for this data? Is it wise to do this? What are the implications?

User Research

  • Speak to staff about how they use data to help support CYF and what kinds of impact statements would help them most.

Things to Consider

Don't get overcomplicated. Start with a single data point comparison between two data sources. Use existing products to help you. Identify and build the missing piece for this use case.

πŸ’ΉRAWGraphs

πŸ“Œ CYF Data feed is pinned in general : CYF DATA Feed [LIVE]

Common datasets we compare against:

Here are some examples of CYF use of trainee data

In a Class of Our Own πŸ”—

In A Class of Our Own

Business problem

At Code Your Future, trainee progress is tracked on a trainee tracker against milestones set by the Director of Education. But each trainee at CYF is on their own personal journey towards employment, and should really set their own milestones on their own roadmap.

Proposed functionality

  • A way to define your milestones

    • How will you quantify your milestones? The trainee tracker code is available for you to incorporate as your starting point.
  • A way to check your milestones

    • Course milestone data is harvested from platform APIs (Codewars, Github, etc) and this code is available to you on request. What other goals might trainees set?
  • A way to display your progress over time

    • You’ll probably need a user account and some kind of dashboard.

Your solution should be stored in a database and displayed by a front end which scores 100 for Accessibility on Lighthouse.

Users and roles

As a trainee at Code Your Future, I want to set my own milestones for the course.

As a trainee at Code Your Future, I want to see and track progress towards my own milestones, as well as the ones set by the course.

As a mentor at CYF, I want to support each person as an individual towards their own career goal.

As a Programme Manager, I want to include trainee-chosen milestones in my evaluation of progress.

As an Education Director, I want to support each person as an individual towards their own career goal, while being able to get a reasonable overview of how our cohorts are doing.

What else do users want? How will you find out? Some user research may be needed. Remember: Do the simplest thing that could possibly work.

Stretch goals

  • Public API

    • To allow other services to pull the progress data, can you build a public API. The Attendance Register project has this goal; can you share your work?
  • Lighthouse CI

Can you integrate Lighthouse testing into your deployment workflow? Who will define the Github action? How will you decide what budget to set?

Notes

There is an existing tracker that harvests this data and quantifies it here https://docs.google.com/spreadsheets/d/1VoSIXo1M8RYFH8CexyAeDk2KrdxXpY6hDUmS1Ae_WMU/

Jobs From The Boards πŸ”—

Jobs from the boards

Business problem

At Code Your Future, graduates trawl job boards and gather leads as part of their Employment Programme. Graduates use Slack channels and calls to share their leads and progress with applications.

But we also duplicate a lot of effort, and job hunting is exhausting enough already.

How can trainees discover and apply for jobs in an organised way?

Proposed functionality

  • A way to consume listings

    • How will you consume multiple APIs? Is it better to start with one feed and then add a second?

    • How will you normalise the data into one standard job listing with the details a CYF grad cares about?

    • What job schema already exist?

  • A way to produce listings

    • How will you only show jobs that are still available?

    • How will your users sort and filter jobs to only the show the ones that are right for them?

  • A way to analyse jobs

    • Is it valuable to know which employers have already hired a CYFer?

    • Is it useful to identify keywords and highlight them in the listing?

    • What about salary ranges; is this key data for users? How will you find out?

These jobs should be stored in a PostGreSQL database and displayed by a React front end which scores 100 for Accessibility on Lighthouse.

Users and roles

As an applicant for junior developer roles, I want to browse and filter jobs that I have a chance of getting

As a mentor, I want to scan open listings and get a sense of the current market for my trainees.

As a staff member, I want everyone to share their leads and work together so we don’t get too broken down by job hunting..

Stretch goals

  • Slack feed

    • Should new listings post to Slack? Will you create a webhook?
  • Keyword scanning

    • Can you produce a dictionary of important keywords that CYF applicants would want highlighted? What user research will you do to identify these words?
  • Lighthouse CI

Can you integrate Lighthouse testing into your deployment workflow? Who will define the Github action? How will you decide what budget to set?

Things to consider:

There are enterprise solutions to this problem, like Google Cloud Talent Solution. What are the advantages and disadvantages to building your own?

There are many paid job aggregation APIs, but there are also some free ones. How do these job aggregation APIs get their data? What is web scraping?

Some free Job Board APIs

Knowledge Checklist πŸ”—

Knowledge Checklist

Business problem

At CodeYourFuture, our students gain a vast amount of knowledge and skills that in total, will result in them being able to call themselves a programmer.

It’s important that we can track a student's progress over the course to make sure that they are keeping up with the class and developing their understanding of our material.

Proposed functionality

The website should be able to have a list of skills that students are expected to achieve. For each item in this list we should be able to rank the students’ confidence with the skill.

Skills should be separated into categories depending on what they are about e.g. HTML/CSS, React, Node etc

Students should be able to create an account to track their progress over the course. These accounts should be publicly accessible on a path on the website e.g. cyf-knowledge-checklist/august but individual information cannot be accessed without authentication.

Each student should be attached to a class.

All data should be stored in a database using an API to interface with it.

Users and roles

As a student, I want to be able to create an account that will hold all of my knowledge checklist data.

As a student, I want to be able to update and chart my own progress

As a mentor, I want to be able to edit the class learning objectives in each of the subjects.(this should only be possible before a cohort starts - see stretch goals)

As a mentor, I want to be able to see an overview of all of the students in a given class.

Likely challenges

  • Be careful how you structure your data as this could get confusing quickly

Existing Systems

Here is a very simple example of this system created by CodeYourFuture

https://cyf-course-checklist.netlify.app/

The success view on the curriculum aggregates learning objectives into a checklist.

Stretch goals

  • Resources & Assessment

    • If a student says they are not confident in a subject show them a set of resources to help them

    • If a student says they are are confident in a subject, direct them to complete an assessment piece of work

    • As an admin, I want to be able to edit the resources and assessment for each topic

  • User Research

    • Speak to your classmates about what features they’d like to use. Select a sensible feature and build it.

    • Speak to your teachers and mentors to see what features they’d like to use in the app. Select a sensible feature and build it.

  • Dark mode / toggling modes (accessibility)

    • As any kind of user, I would like to be able to toggle my preference to use dark mode

    • If possible, as a user, I would like other options for the colours used on the background and text

  • Prevent editing of learning objectives after a class starts

    • As a mentor, I should not be able to edit the list of learning requirements once a class has started

Like Sands Through The Hourglass πŸ”—

Like Sands

Business problem

At Code Your Future, we try to save money as much as possible, so we can do the most with our limited funds. But sometimes it's hard to perceive the costs of our decisions and allocate our resources wisely.. For example, if five people spend one hour deciding whether to buy one software licence, it might actually be cheaper just to buy the software instead of having the meeting.

How can we better understand the value of our time? How can we help each other to not waste precious resources that could go towards trainee expenses or infrastructure improvements.

What is the simplest thing that could possibly work?

Proposed functionality

Poll salaries

Privately poll each meeting attendee for their annual salary

Do not permanently store or visually display this personal information

Calculate cost

Combine the salaries and compute the cost per second of the combined time of the attendees

Display cost clock

Display a cost per second ticking up in the Google Meet call

Users and roles

As a staff member, I want to visualise the cost of discussing resource allocation

As a donor, I want to know CYF rigorously examines its own use of funds

Stretch goals

  • Can this extension integrate with Google Calendar and project the cost of proposed future meetings as well?

  • It costs a company much more than the annual salary to employ someone; can you include those costs as well? Or a rough percentage?

  • Could an attendee also input the cost of the resource being discussed, if any, so if the cost of the meeting surpasses the cost of the resource, the attendees are notified?

Things to consider

If there are only two people in the meeting, each party can deduce the annual salary of the other. Is this a problem? How will you tackle this? Can CYF provide a blended employee cost per second default value that is used instead in this scenario?

http://www.expensivemeeting.com/ is a longstanding website that does a basic version of this idea. What can you learn from it?

Agencies and contractors must calculate their costs in this way to understand how much to bid for work. What can you learn from applications like Synergist, and what is "overkill" for your product?

Logistical Lunch πŸ”—

Logistical Lunch

Business problem

At CodeYourFuture, we are used to meeting on Zoom for every occasion, as we are living through a global pandemic.

But now we need to adapt to meeting together in person every weekend. We need to figure out our travel arrangements and, most importantly, what we will do for lunch!

This project is about systematising the management of the flow of things and people, according to complex and sometimes competing requirements: logistics.

Proposed functionality

Phase 1:

Optimal starting time.

Using the group’s starting positions and chosen mode of transport, evaluate a distance matrix to pick the optimal start time in the morning.

Phase 2:

Organise lunch

Create an interface to gather and display the answers to, at least, these questions:

  1. How many people will need lunch today?

  2. Who is in charge of making lunch today?

  3. Who is in charge of buying the ingredients today?

  4. What is the budget?

  5. What are the dietary restrictions that must be considered?

  6. Where is the nearest supermarket?

Users and roles

As a class organiser I want to coordinate the morning start time with all the trainees.

As a lunch shopper, I want to know what to buy and how much to spend.

As a lunch maker, I want to know what to make and for how many people.

As a lunch eater, I want to make sure that I don’t die from a terrifying anaphylaxis.

Likely challenges

  • How will you calculate the distance matrix?

  • Do you need user accounts to solve these logistical problems?

  • How will you keep the origin coordinates of individual students a secret? Do you need to associate identities and origins at all?

Existing Systems

Stretch goals

  • Integrate

    • As a class organiser, I’d like to access this logistics app from the Class Planner
  • Lunch assistant

As a lunch maker, I’d like suggested recipes from a database of successful class lunches.

As a lunch shopper, I’d like a suggested shopping list.

As an organiser, I’d like for the lunch maker and shopper to be selected on a rota.

  • Afternoon break

A substantial stretch feature could extend this product to negotiating the afternoon break schedule as well. Some starting user stories are provided to help you think about this feature.

As a Muslim, I need to schedule an afternoon break for prayers.
As a breastfeeding mother, I need to schedule an afternoon break to feed my baby.
As a disabled person, I need to schedule an afternoon break to manage my medication.

Love Me Tender πŸ”—

Love me Tender

Business problem

At Code Your Future, there are various opportunities for contract software development work. However, there is no centralised platform to publish these tenders and allow qualified suppliers to bid on them.

We like fairness and opportunity. It's really important to us that everyone has the same fair chance to bid for contracts.

How can trainees discover and bid for contracts in an organised way?

What is the simplest thing that can possibly work?

Proposed functionality

  • A way to publish tenders

    • How can staff easily describe their business problems

    • What details will be included in a tender listing? Scope, deadline, skills required, etc.

    • How will you structure fairness into the process?

  • A way to browse tenders

    • How will you only show jobs that are still available?

    • How will your users sort and filter jobs to only show the ones that are right for them?

  • A way to bid on tenders

    • How will contractors bid on available tenders? Will you build a UI for them to submit their proposals?

    • How will you ensure only available tenders are shown? Will you implement a status flag in the database?

These tenders should be stored in a database and displayed by a front end which scores 100 for Accessibility on Lighthouse.

Users and roles

As a CYF staff member, I want to easily publish and review tenders to efficiently match projects with contractors.

As a contractor, I want to find available tenders and have the opportunity to bid for them

As a contractor, I want the tendering process to be useful training for me, even if I don’t win the contract

As a mentor, I want to have an overview of the tenders to provide guidance to aspiring contractors within the CYF community.

Stretch goals

  • Slack feed

    • Should new listings post to Slack? Will you create a webhook?
  • Keyword highlighting and filtering

    • Can essential skills or technologies be highlighted in the tender UI?
  • Lighthouse CI

Can you integrate Lighthouse testing into your deployment workflow?

Who will define the Github action? How will you decide what budget to set?

Things to consider:

There are enterprise solutions to this problem. What are the advantages and disadvantages to building your own? There are also many Open Source tendering platforms. What can you learn from them?

How can the Contracts Finder Service and Find Tender Service help you? Can you make use of their FOSS API? (Also see V2)

How can the Change Board help you? https://github.com/CodeYourFuture/Changes

CYF would really like to adopt this project, if a build can meet our needs. Consider the Technology Code Of Practice to help you understand how to get your project up to a production standard. We want the simplest version we can possibly use.

Project Bolan πŸ”—

Project Bolan (FE)

Business problem

Using Chrome, if you try to access a website while offline you can play a game. Alternatively you can access the game by navigating to chrome://dino in the URL bar. More info can be found on Wikipedia.

The game is a fun Easter Egg when the user might be frustrated at the lack of internet connection. It may be a fun thing to add to your apps in the future to add some light relief.

What is the simplest thing that could possibly work?

Proposed functionality

  • You play a dinosaur who is running to the right of the screen

  • As you play, various obstacles appear on the right that the dinosaur must avoid, either by jumping over them (by pressing the Up Arrow or Space keys) or crouching under them (by pressing the Down Arrow)

  • The dino runs faster (and thus the obstacles also move faster) over time

  • A score counts up over time

Users and roles

As a player, I want the dino to move to the right when playing the game.

As a player, I want randomised obstacles to move to the left when playing the game.

As a player, I want to control the dino jumping/crouching via the keyboard.

As a player, I want a score to be recorded.

As a player, I want the dino to speed up over time.

Stretch goals

  • A high score is recorded for the player

  • Instead of a dino, make a custom CYF character

Things to consider

When implementing the game, try looking at requestAnimationFrame.

Q&A Site πŸ”—

Q&A Site

Business problem

It’s very common for students (and sometimes mentors!) to have technical issues running their code - errors, unexpected outputs, or refusing to run entirely. The Technical Question Form (see the ⚑️ icon in e.g. #london-class6) has a good structure but asking questions like this in Slack is difficult for a number of reasons, e.g. it doesn’t handle (and format) code very well and threads disappear quickly. Stack Overflow has a very mature UI for asking code-related questions, but asking there is a big step; it’s not really designed for beginners and the comments don’t provide enough space for a complex back-and-forth. We could bridge the gap with a Q&A system of our own, which would hopefully improve the quality of questions, both getting better answers now and preparing students for a better entry to asking on Stack Overflow.

Proposed functionality

The key functionality would be a way for the asker to post and subsequently edit a question, comprising an explanation of the context (why the code is being written, e.g. linking to a class or homework), the expected outcome, the actual outcome and the (HTML, CSS, JS) code. A question could then have responses: follow-up questions, to give feedback and clarify what is being asked; and answers.

Users and roles

The primary roles in the system will be people asking questions, and people responding to them with follow-up questions and answers.

Likely challenges

How can we develop a structured format that encourages clear, high-quality questions? How do we encourage good feedback and refinement of questions? How do we manage different types of content (text vs. code, and different kinds of code for formatting)? There can end up being a lot of data in a system like this, how can we create a system that scales efficiently to deal with that (e.g. showing “pages” of data)?

Stretch goals

Some form of notification for key events (e.g. answer posted) via Slack or email would mean users didn’t need to keep checking back for responses. Being able to create a question straight from Slack using the existing form would be pretty cool! What if you could run the code examples (for client-side things, Express and Mongo might be tricky…) right in your browser while looking at the question?

QR Code Scanner πŸ”—

QR Code Scanner

Business problem

QR codes are a common sight nowadays, as they can easily integrate the physical world (such as museums, cafes, restaurants) with the digital world.

Let’s imagine we’re building a website for a museum which wants to allow museum attendees to scan QR codes next to exhibits to see more information.

What is the simplest thing that could possibly work?

Proposed functionality

  • Allow users to take a photo of a QR code and add it to an image element on the application

  • Use the BarcodeDetector API to scan the QR code

  • Display the information contained within the QR code

Users and roles

As a museum attendee, I want to learn more information about an exhibit.

Stretch goals

  • Allow the user to directly scan QR codes with their camera (rather than taking a photo then processing it)

Things to consider

A QR code generator like this one may be useful for testing.

Unfortunately, the BarcodeDetection API does not have very good browser support yet, as it is only fully supported by Chrome on Android. You may want to consider showing a warning message to the user if it is not supported.

Quiz app πŸ”—

Quiz App

Business problem

With a large group of students it’s difficult to track how everyone is doing with the material; we move quite quickly through the course at CYF, and a student can sometimes fall behind without the mentors realising. We’ve had quizzes at the end of some of the modules, but these take a lot of effort to prepare and mark, and the earlier we understand a student’s position the more support we can provide.

We’ve been experimenting with Kahoot! for this in London, running quizzes at the end of classes to figure out how people are getting along with the material. However, Kahoot! isn’t free, it prioritises being fast (which can put unhelpful pressure on students) and it would be nice to have a system that we could integrate more closely with the other tools we’re using.

Proposed functionality

Similar to Kahoot!, the quiz app will allow a lead mentor to prepare simple quizzes to give throughout the modules (e.g. one before lunch and one at the end of the day). It will then allow them to present the quiz to a class and enable the participants to answer the questions.

Users and roles

There’ll be three kinds of user for this: the lead mentor preparing the quiz; the students (and maybe floating mentors!) taking part in the quiz on the day; and the other mentors reviewing the results to try to spot patterns and offer additional support (or suggest improvements to the course material and teaching) where required.

Likely challenges

This app will probably have lots of different views - on top of the “preparing quiz” and “reviewing results” views, the on-the-day usage will have distinct UIs for the participants’ devices (answering the question), the lead mentor (tracking participation) and the projector (showing the question). How can we show different kinds of question? How would e.g. code examples and pictures work out? How can we help the lead mentor preview their questions, and get them reviewed (so they don’t make the students go through a quiz with mistakes)? How do we make this accessible so that any user can take part (e.g. responsive design, keyboard usage, …)? Can we usefully categorise questions, or set estimated difficulty, to give more insight into class progress?

Stretch goals

  • Interactivity: you can build a simple app with a request/response pattern and polling, but to make the app more interactive (e.g. scores in real time) you’d have to look into something like websockets

  • Analysis: initially you could just allow export of the data for import to Google Sheets for further analysis, but what if there were tables and charts available directly in the tool?

  • Scoring: a simple version of this app would just store the participants’ answers, but if you wanted to add a competitive element you could develop a scoring system.

Radio Free YF πŸ”—

Radio Free YF

[Note: this challenging project requires significant up front research on API restrictions]{.mark}

Business problem

At Code Your Future, we like to dance, we like to share our music, and we like to stream coding music while we work. But we don't have our own radio station to share and discover music that resonates with the community.

What is the simplest thing that could possibly work?

Proposed functionality

Spotify integration

A way to pull playlists from multiple Spotifys

  • How will people submit their playlists? Will the API let you do this or will you use Slack?

  • Who decides what gets played? Anyone?

Visualisations

A way to display the current song playing

  • Can you generate a waveform and animate it?

  • Can you pull the cover from the API and show it?

  • What about the current 'DJ'? How will you represent the CYFer playing the track

Memory

Do we need a way to browse the tracks already played?

  • Can you put 'sets' on a calendar?

  • Will you make the past tracks searchable? There are restrictions on storing data in the Spotify Developer Agreement.

These features should be supported by a PostGreSQL database and displayed by a React front end, which scores 100 for Accessibility on Lighthouse.

Users and roles

As a CYF musician, I want to share my music

As a CYFer, I want to share my music

As a CYF musician, I want to share my music! πŸ˜‚(I think some more detailed user stories would be a good idea)

Stretch goals

Lighthouse CI

  • Integrate Lighthouse testing into the deployment workflow

  • Define GitHub actions and set budgets for Lighthouse scores

Slack bot

  • Post the current playlist to Slack

  • Ask /tunes what is playing on CYF Radio

Things to consider:

There is another Spotify API project, which may be approachable if you're on a short deadline: Team Project: Spotify Playlist Filterer

There is a cyf music channel. Can you recruit user testers from this group? What other things would they like from this application?

The Spotify API is free but has a lot of restrictions and is only for personal or development use. What can you NOT do that you would like to?

This project suggests Spotify, but you can choose your own solution if Spotify doesn't work for you. Remember to do the simplest thing that can possibly work.

Read Me Hire Me πŸ”—

Readme Hireme

Business problem

At Code Your Future, we need to showcase the talents and skills of graduates who are available for work. Currently, there is no centralised, up-to-date platform for this. We could ask them to update one, but our graduates are tired, and very busy coding! So is there a way to harvest that activity and use it to power a graduate directory automatically?

What is the simplest thing that could possibly work?

Proposed functionality

GitHub API integrations

A way to pull data from GitHub

  • Use GitHub Activity API to fetch each graduate's contributions, projects, and skills.

  • Use GitHub Profile README to extract personal statements, resumes and LinkedIn

  • Use GitHub pinnedItems API (GraphQL) to extract projects and portfolio

  • How will you add and remove grads from the platform? Should grads do it themselves via a GitHub login?

Visualisations

A way to display data

  • Can you generate graphs to visualise activity?

  • How will you present each grad's profile?

Search and browse

A way to search and browse for grads

  • How will you sort up active graduates?

  • How will you only show people available for work?

These features should be supported by a PostGreSQL database and displayed by a React front end, which scores 100 for Accessibility on Lighthouse.

Users and roles

As a graduate, I want to be able to focus on coding great projects and know my work is discoverable

As a mentor, I want to see at a glance who is active and who is losing motivation

As a recruiter, I want to see a range of CYF grads at a glance, and search and filter them too for my needs

As an employer, I want to easily find suitable CYF graduates so that I can hire skilled developers.

As a mentor, I want to make sure CYF grads spend their time on things that will genuinely help them get jobs

Stretch goals

Lighthouse CI

  • Integrate Lighthouse testing into the deployment workflow

  • Define GitHub actions and set budgets for Lighthouse scores

Things to consider:

This app should look really smooth, because we're presenting ourselves to recruiters. Can you recruit a UX/UI designer or front end specialist to polish up your look? Where will you find these people?

Integrating with existing tools like GitHub requires understanding of their APIs and data formats. How will you test your approach using the smallest slice of end to end functionality you can first?

There are already multiple small apps and scripts in use at CYF that pull from various GitHub APIs. Can you use these to help you?

Previously there was a project Team Project Graduate Platform [RETIRED] which several teams built, but we never integrated or updated. Make sure your solution is lightweight, easy to maintain, and does not rely on manual input of data.

Recommendation Tracker πŸ”—

Pin the Mood

Business problem

People recommend things (books, TV shows, music, etc). Sometimes we don't get around to trying them out for a while. We want a website to track those recommendations, and to help us pick things when we're in the right mood for them.

User roles

We will make a single-user website, with exactly one expected user:

  • Collector - someone who receives recommendations, and wants to log and track them.

User stories

  • As a collector, I can save a recommendation, including at least the following information:

    • What the thing being recommended is

    • Who made the recommendation

    • What medium of the recommendation is (e.g. book, TV show, movie, …)

    • The mood of the recommendation (e.g. upbeat / scary / thoughtful / …)

      • One recommendation may have multiple moods!
  • As a collector, I can see a list of recommendations that have been made.

  • As a collector, I can filter the recommendations based on any combination of:

    • Who made the recommendation

    • The medium of the recommendation

    • The mood of the recommendation

Stretch User Stories

  • Ability to add custom recommendation media (e.g. if someone recommends an "immersive theatre" event, that can be entered as a new medium when saving)

  • Ability to add extra moods

  • Ability to rate recommendations

    • Analytics about who makes the best recommendations

Table stakes

Unrelated to any one user story, the following requirements must always be met:

  • The website must be deployed somewhere where it's accessible to anyone with internet access.

  • The website must be fully accessible.

  • If an error occurs, it must be obvious to the user that something has gone wrong, and what they should do about it.

  • Any data must be persisted - re-deploying or re-starting the server must not lose any data.

Suggested implementation plan

High Level

  1. Talk through what functionality should live where.

  2. For all of the user stories you're likely to target:

    a. Sketch out some wire-frames to map out the user experience.

    i.  Wireframes can be as extensive or detailed as you want. It
        could range from a simple pen paper design to a detailed
        figma design; whichever suits your needs better.
    
    ii. You can always add more detail when you\'re focusing on any
        one user story.
    

    b. Model the data in database tables.

  3. Make your frontend, backend, and database work both locally and deployed - you should be able to switch between these just by setting up a .env file.

  4. Choose some user stories to focus on first, and:

    a. Write backend features which you can test out with curl/postman.

    b. Add frontend features to visualise the data from the backend and interact with it.

    c. Deploy everything.

  5. Iterate.

Day by day

Day 1 - Day 2 : Planning phase (no coding if you can resist) -

Might seem long and an overkill but will benefit you at next steps. Key steps to complete (you pick the order):

  • Design the DB for your business problem.

  • Pick a feature that you want to focus on.

  • Identify different pages / views required for the selected feature. Design Wireframes.

  • Identify the API endpoints the feature would require.

  • If time left complete the basic setup - setup a react app, express server & connect them with each other. Note - You can test with a simple endpoint if the frontend and backend are connected.

Day 3 - Day 4 - It's a choice you can start from the front end / back end.

Backend
  1. Create DB and tables.

  2. Basic app structure, setup of the express routes, skeleton only. Just routes with simple console.logs.

  3. Implement the full logic of the route including db calls - test with PostMan/curl.

  4. Implement the front end that calls these api endpoints / routes.

  5. Go back to step 2 of this section & iterate.

Frontend
  1. Implement the front-end view.

  2. Use dummy data to style it.

  3. Once happy with the layout, implement backend endpoints and replace dummy data with fetch statements.

  4. Go back to step 1 of this section & iterate.

Day 5 onwards

Iterate.

STAR πŸ”—

STAR

Business problem

At CodeYourFuture, trainees keep a brag diary to build up a bank of examples of their skills, knowledge and capabilities. They need these examples for interviews.

Everyone does this differently. But really everyone should record these in the format they need for interview: STAR.

STAR means Situation, Task, Action, Result.

How can trainees record, review, and recall these examples in an organised way?

Proposed functionality

  • A user account for each trainee.

  • A way to record examples in the STAR format

    • Can this be a template?

    • Should this be a conversational form?

  • A way to review examples

    • Can a view show many entries together so users can browse their diaries

    • Can users link or share an entry with a mentor if they choose?

  • A way to recall examples

    • Can entries be searchable, perhaps using a free Algolia React plugin?

    • Can we record and show the date of the event/experience happened, instead of the date the entry was made on the website

    • Can we tag entries? Is that useful?

As the trainee completes the course, a constellation of STAR answers are accumulated.

These answers should be stored in a PostGreSQL database and displayed by a React front end.

Users and roles

As a student, I want to be able to create an online diary that holds all of my STAR based entries.

As a student, I want to be able to return and update and improve my entries as well as answer general interview questions using them.

As a TA, I want to know that trainees are regularly adding to their STAR accounts and even suggest to them ‘hey, you solved that, or helped - add it to your STAR account’.

As a PD mentor, I want to be able to discuss their examples and help them elaborate and celebrate both their CYF and non-CYF STAR examples.

Stretch goals

  • User adaptability

    • A trainee can select and answer a particular interview question listed.

    • A STAR entry can be compiled and shared by a trainee , either with others or to a document.

  • User Research

    • Speak to trainees about what extras would help them write their STAR entries - prompts or questions?

    • Speak to PD mentors and past students to ask how many examples should trainees be aiming to provide - or how many skills do they suggest to demonstrate (and which ones)?

Scout Activity Scheduler πŸ”—

Scout Activity Scheduler

Business problem

One of the volunteers (Ali Smith) also helps out with a group of Scouts who plan an international expedition to the Swiss Alps every 5 years. Since this is a big (and expensive) trip, the organisers offer each individual Scout the choice of 3 activities that they would like to do.

Once the activity choices have been submitted, the organisers produce groups for each of the activities. These groups are then added to a daily schedule, fitting around some activities that the whole group will do together.

The schedule has the following constraints:

  • Groups can be configured to either fill 1 day or 2 days on the schedule

  • All of the groups are added to the schedule at some point during the trip

  • No individual Scout is doing two activities on the same day

  • It is allowed for an individual Scout to not be assigned to a group on each day. An activity will be created for them to do on that day

In the past, this planning has been done by writing out the groups on pieces of paper and moving them around until a suitable schedule is found. However, this requires a lot of manual checking, so producing the schedule more easily in software is desirable.

What is the simplest thing that could possibly work?

Proposed functionality

Users and roles

As a trip organiser, I want to generate a schedule that meets all of the constraints listed above.

As a trip organiser, I want to generate multiple schedules that can be chosen from based on other “non-computable” properties (e.g. avoiding schedules that “too tiring” for individual Scouts)

Stretch goals

  • ?

Things to consider

Ali Smith is happy to be consulted on the requirements.

Ideally the app should be working (and verified) by the end of January 2024.

Shared Bookmarks πŸ”—

Shared Bookmarks

Business problem

As developers, we spend a lot of time reading articles on the web and we often want to record useful links to come back to them later. It is fun to share your bookmarks with others so that they can find interesting and useful links too.

Here are some examples of bookmark sites:

What is the simplest thing that could possibly work?

Proposed functionality

  • Display a list of links stored as JSON files within the repo

    • Each JSON file contains the URL, title and a description of the link

Users and roles

As a developer, I want to share a list of interesting/useful links that I’ve found.

Stretch goals

  • Allow a user to search the links

  • Switch from storing the links as JSON files to a database. To do this securely, this may require supporting authentication

    • Suggested approach: design the authentication so that only 1 user is supported. You can then fake “registering” this 1 user behind the scenes and save the password so that only 1 person can log in
  • Allow other developers to subscribe to updates by supporting RSS

Things to consider

<DESCRIPTION OF OTHER THINGS TO CONSIDER>

Slack dashboard πŸ”—

Slack dashboard

Business problem

Slack is the main forum for communication between all of the members of the CYF family during the week; there are a lot of messages and calls going back and forth between various groups and channels. It allows us to provide mentoring during the week, even though we’re only able to get together as a whole group on Sundays, and is a core part of the CYF social network.

However, this extensive communication means it’s sometimes difficult to keep track of who’s been talking and how much. This means that we can miss out on when a trainee has stopped communicating, which can be a signal that they need further support. Communication is one of the key soft skills we’re encouraging, too, and we want to be able to evaluate how trainees are doing at this.

Proposed functionality

To help trainees and mentors understand communication levels in each city, this application will create a dashboard to view statistics of Slack usage for each week of the course. To encourage trainees to be proactively communicating their progress with the rest of the group, the mentors will be able to set individual and class targets.

Priorities

  1. Aggregated Communication stats (messages and calls) of certain number of trainees in a given Slack channel over a period of time /mentor

  2. Ability to create different cohorts based on a region, list of trainees and a number of Slack channels /mentor

  3. A unique trainee profile that summarises their personal stats per week and overall

Users and roles

Both trainees and mentors will be able to see information about the levels of communication in class and city channels (although the trainees’ view will only show their detailed data). Additionally, mentors will have an administrative role, setting individual and class targets for number of messages and number or duration of calls.

Likely challenges

Building this application would require integration with the Slack API pretty early on (you can build some dashboards with canned data to prove out the UI, but we want this whole process to be as automated as possible). The data itself can be pretty boring, so how do you make it fun to use, could you try some kind of gamification? How does this align with trainees’ incentives and drive the behaviour we’re actually trying to encourage (we don’t want people posting “asdf” just to get their numbers up, for example - how do we encourage quantity and quality)?

Stretch goals

  • Notifications: can we prompt trainees to hop back into the channel if they’ve been away? What if it’s for a reason? Can they snooze these messages and/or be prompted to contact a mentor?

  • Integrations: how can we get this Slack data into e.g. Google Sheets along with the other information we have about trainees' progress?

Space Aliens πŸ”—

SpaCy Aliens

THIS PROJECT COULD INVOLVE SOME PYTHON

Business problem

At Code Your Future, trainees are often learning many languages at the same time, and English is just one of them. During class and in study sessions, we get lots of practice with English but during the week sometimes we need a buddy, especially to practise professional scenarios like job interviews, code reviews, and demos. Most English support available does not support trainees with highly technical conversations, and hardly any can translate technical concepts from a different language we already know.

How can trainees practise business English with a tech focus in a single, purpose-built platform? Can they use a chatbot that converses with users in their target language, providing corrections, explanations, and relevant vocabulary based on the context of the conversation.

What is the simplest thing that could possibly work?

Proposed functionality

Contextual Learning Engine

  • Detect conversation topics and suggest relevant vocabulary and phrases.

  • Use NLP to correct syntax and grammar mistakes in real-time.

Daily Scenario Simulations

  • Simulate common daily scenarios like responding to code review, asking for help with blockers, analogising technical concepts, etc.

  • Create a specific prompt for practising Technical Interviews

Users and roles

As a language learner I want to practice English in a real-world context

As a part-time learner I want to practice English on my own schedule

As a mentor I want to suggest realistic scenarios for my students to practice English

Stretch goals

  • UX: Create a logged in area to track progress

  • QE: Integrate Lighthouse testing into the deployment workflow

  • Cloud: Define GitHub actions and set budgets for Lighthouse scores

  • AI: Integrate voice recognition

Things to consider:

Study Buddies πŸ”—

Study Buddies

Business problem

At Code Your Future, trainees form study groups to work together during the week.

It’s very complicated to arrange this as everybody has different schedules. Some trainees work nights, others look after their children during the day; some trainees work zero hour or gig jobs and their availability changes all the time.

Everybody’s schedule is different, but many people’s schedules are complimentary. If we could all put our availability in one sorting system, an application could tell us who has matching availability.

How can trainees discover and connect with study partners in an organised way?

Proposed functionality

  • A way to enter your availability

    • How will you define availability and time?

    • What is the minimum and maximum amount of time to make available for a useful study group?

    • Can users connect their Google calendars to enter availability? And is this MVP?

  • A way to match with other trainees

    • How will you only show trainees with overlapping availability?

    • How will users book this time; is there a maximum number of trainees that is useful to form a study group?

    • Should everyone in class be matched and grouped at once, or should trainees do this ad hoc?

These availability ranges should be stored in a PostGreSQL database and displayed by a React front end which scores 100 for Accessibility on Lighthouse.

Users and roles

As a trainee at Code Your Future, I want to form study groups with people who are available without constantly negotiating with 30 people.

What else do trainees want? How will you find out? Some user research may be needed.

Stretch goals

  • Jack Jones

    • What happens when someone cannot match with anyone? How will you discover and communicate this situation to their cohort?
  • Preference ranking

    • Sometimes we can be available if necessary, but it’s not very convenient. Could users rank their availability?
  • Lighthouse CI

Can you integrate Lighthouse testing into your deployment workflow? Who will define the Github action? How will you decide what budget to set?

TOOT πŸ”—

Tip of Our Tongues

Business problem

At Code Your Future, trainees and mentors collaborate and communicate with each other while working on projects. However, sometimes we face difficulty in phrasing our comments, questions, or feedback effectively, especially for those of us who are speaking English as an additional language.

How can we use APIs like DataMuse, Wordnik, and Grammarly to craft clearer and concise messages in English? How can we use speakable elements to check we are saying words clearly? How can we use technology to improve our communication skills and overall collaboration experience?

What is the simplest thing that could possibly work?

Proposed functionality

Input message

  • Allow users to input their initial comment, question, or feedback

  • Phrase suggestions

Evaluate message

  • Use Grammarly, DataMuse, or Wordnik APIs to generate alternative phrasings, synonyms, or related terms

  • Offer suggestions for more concise or clearer wording

Message refinement

  • Users select and edit suggested phrasings to create a final version of their message

Speakable

  • Allow users to hear the pronunciation of words or phrases in their messages

  • Provide an option to adjust the speech rate and volume for better understanding

These features should be supported by a PostgreSQL database and displayed by a React front end, which scores 100 for Accessibility on Lighthouse.

Users and roles

As a CYF member, I want to improve my communication skills and ensure my comments, questions, and feedback are clear and concise in English.

As a project manager, I want to enhance the overall collaboration experience within Code Your Future, ensuring effective communication among all participants.

Stretch goals

Sentiment analysis

  • Use sentiment analysis to ensure that the suggested phrasings convey a positive and supportive tone

Lighthouse CI

  • Integrate Lighthouse testing into the deployment workflow

  • Define GitHub actions and set budgets for Lighthouse scores

Things to consider:

Integrating with APIs like DataMuse, Wordnik, and Web Speech API requires understanding their features and limitations. How can you check the suggestions provided by these APIs are accurate and relevant?

https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisUtterance

https://www.datamuse.com/api/

https://developer.wordnik.com/gettingstarted

https://developer.grammarly.com/docs/api/editor-sdk-react/

Important Note to Developers: This project could be highly challenging or could be a fairly simple React component . The real skill here is to start with the simplest thing that could possibly work.

If the groundwork is solid, this project could be adopted by CYF Labs, so get the fundamentals right first.

This App Ointment πŸ”—

This App Ointment

Business problem

Outside of London, trains don't really work. It makes it really difficult to plan meetups as everyone is delayed all the time, sometimes for hours. It would be great to identify the most reliable place and time to meet for most people, based on actual train times not timetables.

How can we plot a meeting point between a group of people that is more reliable and minimises the chance of intolerable disruption, disappointment, and delay?

This project is all about data and insights. Be very very careful about your scope.

What is the simplest thing that could possibly work?

Proposed functionality

A way to enter locations

A way to join a meeting group

A way to identify an optimised location

A way to share the identified meeting location

A way to access everything on a phone (in transit)

Users and roles

As a community member, I want to look forward to in-person meetings instead of dreading them

As a community organiser, I want to arrange meetups people show up for!

As a tired and old person, I want to spend less time freezing on the platform at Manchester Victoria

Stretch goals

  • Considering setting further parameters like:

  • Maximum time each person is able to spend travelling

  • Maximum price each person is able to spend on tickets

  • Save favourite locations to groups

  • Help users recommend places around train and bus stations that can host CYF groups (this could be an integration with Maps)

Things to consider

Tick Tock πŸ”—

Time Tracker

Business problem

At Code Your Future, we often have to balance multiple commitments and so need to use our time efficiently. To help understand how our time is being used, we could use a time tracker to track how much time has been spent on a particular task. This can then be visualised to understand where time could be used more efficiently.

What is the simplest thing that could possibly work?

Proposed functionality

Tracker

  • Allow a user to input a description of a task and start a timer for that task

  • The amount of time until the user clicks the stop button is recorded

    • This could be stored in the browser e.g. with localStorage

Visualisation

  • A graph showing the amount of time each task has cumulatively taken over the whole day

  • A graph showing the amount of time each task has cumulatively taken over the whole week

  • See https://timeryapp.com/ for inspiration

Users and roles

As a trainee, I want to track how much time a task has taken over a period (e.g. a day or week) so that I can understand if the time could be used more efficiently

Stretch goals

Things to consider

This is really just re-building Toggl. How could you put a spin on it? Can you find a way to report your data on your Coursework Planner? What insights could you send to your project board?

Remember, start with the minimum viable product and then iterate.

Volunteer Schedule Calendar πŸ”—

Eie.io

Business problem

A city farm has volunteers who look after its animals. Every day, one volunteer is needed every morning and every evening to feed the animals.

We need a website to ensure that every session has exactly one volunteer signed up.

User roles

  • Manager - ultimately responsible for ensuring every time slot has a volunteer.

  • Volunteer - can sign up for sessions.

User stories

  • As a manager, I need to be able to see if any sessions don't have a volunteer signed up.

  • As a manager, I need to be able to see the name, email, and phone number of the person who signed up to any session.

  • As a volunteer, I need to be able to see what sessions are available to sign up to volunteer.

  • As a volunteer, I need to be able to see what sessions I have signed up for.

  • As a volunteer, I need to be able to claim an available session.

  • As a volunteer, I need to be able to cancel a session I have already signed up for.

  • As a manager, I need to be notified if someone cancels a session at short notice.

  • As a volunteer, I don't want any other volunteer to know when I am volunteering, to protect my privacy.

Stretch User Stories

  • As a volunteer, I get a notification (perhaps by email or SMS) to remind me about my session.

  • As a manager, I can view statistics around how often each volunteer volunteers.

  • As a volunteer, I can sign up to sessions on a schedule, e.g. "Every Monday morning".

  • As a manager, I want to be able to email all upcoming volunteers with some information.

Table stakes

Unrelated to any one user story, the following requirements must always be met:

  • The website must be deployed somewhere where it's accessible to anyone with internet access.

  • The website must be fully accessible.

  • If an error occurs, it must be obvious to the user that something has gone wrong, and what they should do about it.

  • Any data must be persisted - re-deploying or re-starting the server must not lose any data.

Short-cuts we can take

  • Let's not worry about log-in for now. We can just have a button/drop-down in the corner of the screen to switch between manager and volunteer roles.

Suggested implementation plan

  1. Talk through what functionality should live where.

  2. Sketch out some wire-frames to map out the user experience.

  3. Model the data in database tables.

  4. Choose some user stories to focus on first, and:

    a. Write backend features which you can test out with curl/postman.

    b. Add frontend features to visualise the data from the backend and interact with it.

    c. Deploy everything.

  5. Iterate.

We are here πŸ”—

We are here

Business problem

It’s important for CYF to keep track of which students have attended which sessions and their behaviour during the class, for various reasons:

  • Teaching: understanding of who was present for which material, so we can take that into account when assessing progress and planning catch-up activities, and seeing who needs special attention

  • Finance: accurate payout of expenses for travel, etc.

  • Pastoral: seeing when a student has missed multiple sessions, so we can investigate whether there’s a problem we could be helping them with

Volunteers currently take a manual register and then copy that to a spreadsheet by hand. This is not very reliable and it doesn’t give us as much information as we want.

Proposed functionality

Trainees clock into classes themselves. Attendance is logged to a class and a date (with start time), and this data is available as a public API from which the volunteers can pull the data they need. There is already a substantial amount of automated tracking by API for all the other milestones.

Volunteers can flag specific participation problems, and this information is also attached to the trainee object on the API.

Required Information

  • Class name

  • Class start time and date

  • Trainee ID

  • Trainee clock in timestamp (so punctuality can be computed)

  • Mentor flags: LEFT EARLY, CAMERA OFF, LOW PARTICIPATION, ABSENT

Users and roles

As a trainee I want to sign in to class on time and show that I am here

As a volunteer I want to update trainees’ self reports and add nuance around participation

As a cohort we want a quick report on our participation

Remember: Do the simplest thing that could possibly work.

Likely challenges

  • Trainees might forget to clock in – how will you handle this?

  • A public API cannot expose trainee names directly – how will you handle this?

Stretch goals

*As a volunteer, I want to sign in to class and show that I am here*

Add sign in for volunteers and create a separate participation report so that volunteer participation is also made visible

Data Processing/Reporting

  • Written summary - Produce a short summary of participation

    • Slack integration: Post a summary after a class in a specific private channel for stakeholders.
  • Aggregated Summary - Have a summary for one or several cohorts with detailed information for module leads

    • Aggregated Visualisations - Present graphs of data to be able to see progress over a given time period

What Rubbish πŸ”—

What Rubbish

[THIS VERY CHALLENGING FRONT END PROJECT COULD INVOLVE SOME PYTHON AND A LOT OF LEARNING]

Business problem

At CodeYourFuture we are many of us travellers. But everywhere we go, recycling works differently. We are highly conscientious people so this is exhausting. Sometimes it feels like we are collectively accumulating a PhD in recycling rules around the world. How can we know what to recycle and what is general waste?

What is the simplest thing that could possibly work?

Proposed functionality

Computer Vision and Classification

  • Camera view - User points camera at trash item

  • Object recognition

    • OpenCV for basic shape and color recognition

    • MobileNetV2 model for complex items

  • Waste categorisation - Classify items as recyclable, compostable, or landfill

  • Application built as a PWA

Users and roles

As a conscientious environmentalist, I want to quickly sort my rubbish wherever I am

As a CYF host I want my offices to be cleaned up after classes

As a CYF member I want to clean up after class

Stretch goals

  • QE: Integrate Lighthouse testing into the deployment workflow

  • Cloud: Define GitHub actions and set budgets for Lighthouse scores

  • Data: enhance advice with the Waste Services API

Things to consider:

There’s an API-focused briefing for the same business problem here: Final Project: How Does It Work Here