Slide 1

Slide 1 text

By me (10/27/2016) Mentor Availability by Module

Slide 2

Slide 2 text

Stakeholder Needs ● Biggest need: Increase the flexibility of mentor availability ● Other, derivative needs: ○ Search for mentors by what general subject areas they teach on a more granular level than course/programs ○ Keep frontend of this data relatively consistent. ■ Shouldn’t change how students pick mentors ■ Shouldn’t change how we search for available mentors on the admin side

Slide 3

Slide 3 text

How did this work before?

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

Mentors could only teach programs ● For example, for a mentor to be eligible to teach any of the Web Developer Track, they needed to know JavaScript, HTML, CSS, Angular, Ruby, AND RAILS well ● Problems the old way creates: ○ Lot harder to hire mentors who teach all of these subjects ○ Forces existing mentors who want to teach for our flagship program to learn material outside of their expertise ○ The effect: unnecessary hiring and training overhead, and decreases availabilty

Slide 6

Slide 6 text

How do we want this to work?

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

Tha Code

Slide 9

Slide 9 text

Before

Slide 10

Slide 10 text

Problems with the old code ● Lots of it written in 2013 when Bloc had different needs/smaller codebase ● MANY responsibilities tied up in a single class (MentorProfile) that was supposed to be a model ● Unclear flow of responsibilities ○ MentorProfile playing ping pong with other classes ● LOTS of redundant operations ● Super complicated tests

Slide 11

Slide 11 text

After

Slide 12

Slide 12 text

Pain points this approach solves ● Clearer flow of data and operations performed on it ● Code grouped by responsibility ● Smaller classes means more easily tested ● Reduce bloat of an already-complicated model

Slide 13

Slide 13 text

Other tasks ● Created two new models ○ ProgramModule ○ MentoredProgramModule

Slide 14

Slide 14 text

~let’s get personal~

Slide 15

Slide 15 text

How did I approach this problem ● I read a lot of code ● Follow the data ● Diagram everything ● Create the necessary data for the solution, then slowly build up the functionality ● Rails console is my friend

Slide 16

Slide 16 text

Roadblocks and hardships ● Re-writing tests is hard, especially when your factories assume coupled behavior ● Sometimes you miss the details ○ Assume too much about a seemingly unrelated system ○ e.g capacity vs free slots ● Time estimation ha ha ha ¯\_(ツ)_/¯

Slide 17

Slide 17 text

What would I do again ● I would follow basically the same procedure for getting to know the code ○ Read ○ Diagram ○ Follow the data to understand how the system affects it ○ Plan arch ○ Build the models/create sample data ○ Manipulate the data in a piecemeal way until we end up with the results we want

Slide 18

Slide 18 text

What I would do differently ● Communicate with others on my team more ○ Pair ○ Speak up sooner rather than later ● Come up with a more concrete plan if you’re not hitting timelines ● Plan for tests ● Make sure I indulge the details of related systems sooner rather than later

Slide 19

Slide 19 text

~fin~