## The Neurodivergent Developer ### What is a developer? + -[A developer is a cafeine fueled wizard who tames chaos within a problem set by introducing structure, a bit of order, magic automation spells and often times more chaos! :coffee::mage::fire: ### What does it mean to be Neurodivergent? A Neurodivergent person has atypical brain function. The circuitry of their brain is wired differently than normal. For this talk I would like to specifically focus on people that fall into these categories: - ADHD - ASD Both often having impairment of social and executive function. The STEM fields generally tend to attact these individuals for their abstract problem solving abilities. ### What these impairments can look like at the office? #### Attention/Focus Some people may hyper fixate on a task to the point that abruptly tapping them on the shoulder could startle them causing them to jump out of their seats! Others struggle to get focused on a task at all. They may read specifications repeatedly and writing some code, look out the window, see a squirrel, get lost and start that process over and over again. Often times these types of developers have a hard time making it through meetings - fidget - spin in their chairs - pace - tap their fingers These types of behaviors can be a response to stress or excitement. #### Time Management I personally find myself really bad at time boxing. I tend to lose track of time while I code missing meetings as a side effect. If I am having a hard time focusing and I am given 3 days to solve a problem I may spend the first tow days analyzing the problem and solutions before writing any code. The last day may be the point at which I implement a solution. #### Communication It has been my experience that many of the most exceptional developers/engineers I have worked with really struggle with communication. someone might have a hard time understanding why another person just doesn't get a simple pattern, or why a peer is asking them for help as the code is right there, why not just read the code? Many of my own struggles with communication involve me pinging all over the place and inevitably falling down some rabbit hole. Forgeting what I was originally talking about #### Anxiety This is personally probably the biggest barrier I have had to overcome in my career. When I am relaxed and my mind is clear and all of my thoughts line up, everything is great. The second I get put on the spot my immediate anxiety spikes and my mind goes blank. I can't even recall what I was talking about. I then have to start work on reorienting myself :zipper_mouth_face: This type of anxiety can often manifest in the form of imposter syndrome. ## Problems When not properly managed - hyper fixation - manic work ethic - unhealthily hours - missing meetings & deadlines - feeling like an imposter - sacrifice personal identity for profession - no social life - burnout! - blur the lines ## Understanding your Nuerochemistry We have a finite amount of cognitive resources What drains your battery? For me I have found that when my body is producing dopamine I am very productive both personally and professionally. When I am running low I am the complete opposite. - chase the dopamine! - make time for your passions, schedule them on a calendar - perfecting your diet, supplements and exercise - try new things, go on new adventures! step out of comfort zone - surround yourself with good people/friends - helping others - helpers high! - caffeine - how can you trick your brain into think you are passionate about what your doing? ### Goals - set measurable goals per cycle (day/week/month/quarter/year) - write them down - work with a mentor - unknown unknowns, mentors can help you identify unknown shortcomings ### Iterate Pretty much every process we have as developers can be broken down into interactions ending in feedback loops. ### Introspection spend time at the end of the interaction cycle reflecting back on feedback: - where was I at the beginning? - where did I perceive I would be at the end? - where was I actually at the end - what could have gone better? - write these things down and\or spend some time reflecting on them - where was my attention to detail this cycle? - did i miss things that could have been caught? - did I lose sight of a goal - when receiving feedback did i spend more time talking or listening ## Finding your Efficiencies ### Time Efficiency - development is a meritocracy, much like sales - everyone knows exactly how much you contribute to a project - github - you can look at all of this data and find team members that are outliers - learn from those outliers Optimizing for the things that drain my battery: - meetings - categorize these into talking and doing meetings - limit talking meetings - streamline doing meetings - ask for meeting agenda prior to meeting - ensure meeting agenda includes actionable takeaways - interviews - spend some time before each interview preparing - scripts? - anxiety? - not organic - list of things you would like to learn instead - context switching - minimize context switching - push for shallow silos - try to be an expert at what you naturally gravitate towards - don't limit yourself to your silo, especially true on smaller teams - noise canceling headphones - can help prevent from bouncing back and forth unconsciously Other ways to optimize: - create your own meaningful process - organization - create a process for organization that works for you. - whiteboard notes - too much process can slow you down - automate your work - find ways to automate your peers work - automate your bosses work measure efficiency - quality work - volume of output. measure volume of output: - points/features velocity - features weighted over points - points can be gamed - quality pr reviews given - track in github - how many pair sessions have been completed in a given time frame measure code quality: - good tests (autonomy) - inputs, outputs and effects generated - tests are organic/living documentation (no substitude for product documentation) - coverage doesn't always equal mean your tests are good - static analysis (peer feedback can be subjective) - Cyclomatic complexity ratings (code paths/branching) - catch known bugs and vulnerabilities - identify code smells and such as copy pasta! - prevent a pr from being merged until all of the feedback has been addressed. - vs code extensions - linter (auto lint on save) - spell check (dyslexia) - github's copilot (code autocompletion) Compartmentalize: - if you are working from home, designate a spot for work and it is only for work All of these thihgs make me feel more productive and give me more time for myself.