Into the rabbit hole ==================== Ola Sendecka @asendecka Django Core team Django Girls co-founder slides - https://speakerdeck.com/asendecka/into-the-rabbit-hole - A story of Alice in Djangoland. - Using model with BooleanField is_archived and manager with .filter(is_archived=False) - But found a ModelForm didn't show the instance she wanted to look at - Use function to do magic - preserve_existing_choices - insert current value in select - Hit error page - Changed to extend ModelChoiceIterator to insert the current value - Form now displays properly, but form save gives error - So extend ModelChoiceField and override to_python() method - Then tried to change select widget to RadioSelect - but that didn't work. - Looked at __init__() method - but it's big and hairy, so didn't want to mess with it - So instead use normal ModelChoiceField, and inject her to_python() method - It worked! But it was ugly, fragile - she felt ashamed - She'd spent hours, unexpected stuff happened, not good She'd been in a rabbit hole - rabbit hole - you get so caught up in a detail, that you spend lots of time buried there, get sidetracked, change direction a lot and end up somewhere unexpected - you can follow the steps, but lots of confusion and frustration - some think rabbit holes are good - in flow mode - but every time I end up in a rabbit hole, I feel frustrated, helpless, angry, stupid - next time I would do things differently - to understand the rabbit hole I wanted to read things - I have 2 bits of advice - ziegarnik effect - the tendency to have intrusive thoughts about something started but never finished - so even though you want to move on, you keep going back, feel guilty .. - expts show that people remember unfinished puzzles much better than solved ones - sometimes we've invested too much - hard to objectively judge - sunk cost fallacy - you get emotionally invested in the project once you've put time into it - so you feel you can't stop - the time spent would be "wasted" - so you keep going - connected to personal responsibility - so affects person responsible for committing resources - so you end up doing unwise things and continuing investing when you should stop So how did Alice end up in the rabbit hole in the first place - django was doing lots of magic to make it easy - so she assumed her change would be easy - concentrated on surface level issue - symptom, not cause - continues building on previous partial solution, rather than backing out and starting again - convinced she was very close to a solution - cannot give up - too proud, wanting to prove - can be ok on side project, but not good in your job, or a big open source project What to do: - first notice that you are in a rabbit hole - don't notice when time passes - always almost done - forget to eat, drink, go to toilet ... - when you do step away, you can't stop thinking about the problem - haven't spoken with anyone for some time - feel cranky about any interruptions - how to get out - estimate time for your next task and set timer - make a todo list - rubber duck - explain your problem to someone/duck/... - write an email to someone - take a longer break - and actually stop thinking about the issue! - ask for help What are your stories about rabbit holes? How do you get out of them? - where can I ask for help on Django? - good to have colleague, even remotely. Maybe someone else on the internet - helping others online makes it more likely that others will help you