On Attention, Focus and Autism in the Tech Workplace
--
I would like to talk about people with autism working in modern tech companies. I hope that a useful discussion can be started and have it trickle down to your local workspace.
Myself, I prefer not to reveal which side of the yes/no my actual diagnosis fell. Doing so might lead the reader to make overly specific assumptions about people with autism. Autism is a fuzzy thing which can have many elements, people having or lacking those elements at random. I obviously drew a much better hand than others. I do not have the desire for structured days or general rigidity, I am fairly social and empathetic, replying on others’ body language even more than neurotypical people. Obviously I got lucky to be handed a bunch of performance-enhancing traits that keep me out of financial trouble. Other people around the spectrum have it much worse — they have enhancements and never get to employ them for something they like and that can sustain them. Let’s change that — if you are up to it.
I have been working on strategies. In the hope that others benefit from them, here they are.
Some ways how I communicate my needs:
Attention patterns are like vehicle types
Everybody’s attention when doing mental work is like a vehicle. Some vehicles are slow, others are fast. Some vehicles are agile, others are slumbering. Some vehicles can run circles and pop into various places at a high pace. Some vehicles carry a lot of payload at a slower speed, or lighter payloads at a faster speed. Some vehicles can carry different loads at the same time (at a loss of total capacity), some vehicles can only carry one kind of load at a time.
My own concentration is more like a freight train. And I mean a good old-fashioned 2017 American freight train lacking all those safety features that the German trains introduced 1898–1930. Large. Heavy. 20 tons of axle load, not the wimpy German 16 tons. The kind that drops a bunch of 737 fuselages into a river if you screw up.
My concentration moves slower and it can carry more. When its motion is undisturbed it can carry much benefit for everybody. Make it stop frequently, efficiency goes down with a larger exponent than normal. Derail it, there will be nothing happening for the rest of the day while cleanup goes on. And I am serious about that, it is the day. And I had times when the next day was still collecting pieces instead of moving (although that was mostly during times when I was in an environment that I should not have allowed in the first place).
Policies made exclusively by people who use little Pizza delivery scooters as vehicles, no matter how great they are at feeding their own town and how much everybody appreciates their work, need to be reviewed with other vehicles in mind. How many freight trains do you have on your policy board?
Workplaces are like monitors with burn-in
My work environment is like an old tube monitor (or one of those trashy 2015 4k 40” Philips panels) in that it suffers badly from burn-in when run without a screenssaver. I can concentrate and do good work (maybe not great work) in busy coffee shops, airports, under jet runways and countless other distracting environments — for a while. But that expires. Single small annoyances multiply over time. An open office environment is not different. Zero problems at first. But then the screen burn-in happens. Specific people. Specific paths that people walk on frequently (anybody got some glue traps?). The sound-reflective surfaces around the whole group[1]. Me blasting myself with Finnish and Dutch heavy metal and knowing that even through my high-end closed-back headphones my coworkers can hear it. Long-term I need to optimize my work seating. If Corporate Misc(tm) resets my efforts on a regular basis that is a problem.
“Attention Sponges”
I need Attention Sponges. Next to the actual thing that I am working on. The work fluctuates in its ability to hold on to the attention. Naturally and unavoidably cycling, and also due to brokenness (such as slow compile-run turnaround, which I wrote about here: https://hackernoon.com/software-development-at-1-hz-5530bb58fc0e).
I need something running that the wandering attention hooks onto lightly until the attention lift is over. A good example is a TV series running that I watched many times before and still get tiny new details from — let’s say Babylon 5. It is important that the Attention Sponge is not interactive, because then it might eat up the actual work path. If I did not prepare an attention sponge in advance then an attention lift can quickly get into a randomly picked thing — let’s say browsing Ebay for guitars. While there is no problem switching back to work from B5 when the work env is ready for the next productive burst, Ebay is interactive. I might not switch back from a randomly hooked thing. Aside, I have too many guitars already (not to mention mixing consoles). This can create problems in the workplace as I am ‘watching TV instead of working’. It also looks like I don’t want to be approached. Better place me with my back to a wall, let me put on the very, very closed headphones and leave me alone. Assuming your objective is that I write code that day. Pick.
Coordination, specs and “leave single assumptions in a single code places”
Obviously I do coordinate with people. The strategy here is that I use bursts of coordination and then bursts of sitting down and write one working line of code after another. Going out of sync with the requirements? Please. I have been programming for a long time. I have never seen complete requirements before coding starts. Unless they were BS in the first place. Which happens frequently. Anybody presents me with “complete” requirements upfront, I am unable to trust them. Sorry. Nothing personal. I know you might believe that your specs are complete and correct, you still won’t be able to convince me. Please understand that I am thankful, deeply thankful, for you having tried to do a complete job, meaning you did a much better job than normal, and be assured that it will be of great help bringing the project forward. Your work is greatly appreciated. My own duty here still is to keep flexible. Nothing personal.
Instead of constantly ripping the actual code writing activity apart by distracting myself and 1+ other people I use an approach that I name “keep every single assumption in a single code place”, which I do with compile-time computing, a concept that I write about elsewhere. Instead of ruining the flow you keep the code safe to change every time you fill in a blank. Then you adjust on the next real sync phase. Every blank I filled in is still in one place in the code. I learn the true value for the blank, it is a few-line change, with no risk of other parts of the code being out of sync then. Not just for the week. For the next 30 years that this codebase might live.
Calvinball
I can play Calvinball in the workplace. Even for extended periods. I cannot do it at the same time as writing code. Pick.
Other things I noticed:
- in hindsight I did quite a bit of mansplaining. To men, too (I never got why people have so many problems grasping how virtual and physical memory pages transition through a real computer, dangit). The fact that I do it to men, too, doesn’t make it any better to the individual right in the moment when I appear to only try to be helpful and they might feel obligated to listen. I apologize, I encourage live feedback, and I can assure people that you can shut me up with me feeling good, not bad, about it.
- I generally cannot absorb information at other people’s pace. Some details I need to pause on when others do not. Other details come to me much quicker. My attention potentially goes to places where it will not return from. It can cause me physical pain when other people forcefully grab my attention and then do not make efficient use of it (my doctors even have a physical explanation). I can medicate it, but let’s be honest, why not let me learn the way that works for me? The other people learn a different way and we all end up with a great mix of skills and approaches.
- I suffer badly when I am unproductive due to not being able to concentrate. Buying guitar #42 on Ebay is not fun. Not the buying, not the owning, not the lack of achievement on Friday evening. I get cranky, too. I want to program. I want to see some code running on a Friday evening that didn’t run the last Friday. I don’t even play those damn guitars. I enjoy coding, not playing guitar.
- I don’t need or want a single-person office. I performed best in a 3-people room, where the 2 others actually worked on the same code and had the same code interests. And where we hacked the “locked” A/C control, and built our own ducts to distribute the air, and were left in that place for a long time. Thank you Matt and Jessie.
Footnotes (more will be added later):
[1] The reality of open workspaces:
- mothership says “you have to be open in your remote office”. Local office has limited budget. Result: sound-reflective surfaces everywhere. Concrete, steel, stone, glass. Not even ceiling tiles (for the tech look), so that all the buzzing from the utilities in (now under) the ceiling is audible. For best effect, integrate the “phone booths” right there, facing the hall, and only give them curtains. This doesn’t work for me.
- people coordinating in open spaces… No, they don’t. One person comes in, mumbles a quick thing about what they want. Other person copy-and-pastes a bazillion cs/ links from the desktop to the laptop, then both leave to not disturb others. Others are still randomized. The two coordinators will often not find a place out of earshot, reverberating back into the glass palace. This doesn’t work for me.
- the H-WHACK system will be terrible. Icy drafts cruising around centered away from the walls, hitting people and not the temperature readers. Pockets of stale hot air. Your landlord will do shit for you because they told you it won’t work before you converted the space. Your building coordination people will refuse to even turn up at “hacker hours” since it’s after their work time. The climate usually changes drastically over the day as sunshine, clouds and darkness transition, not to mention some places do what they say is turning off the entire system. It also changes drastically with the seasons. Your company start moving people around based on their work hours and temperature preferences (based on what that area has for temperature this season). Repeat every season change. Now people are placed at random, not in functional groups. This doesn’t work for me. Does it work for you?
Assuming a working open space (rare) I estimate that about 30% programmers actively like the open spaces, 40% will just do whatever corporate says, never evaluating whether it is good or bad for them, and 30% suffer enough to notice. That is for a functional space. If you make the mistakes above you shift this to be worse. Who is calculating the budget against those percentages? Does anybody even have better numbers than me pulling them out of thin air? Never seen them outside blank “this is data-driven (and you don’t get to see the data)” presentation throw-ins.
[2] I wrote about programming tool turnaround time here:
This writeup hit a nerve, making HackerNews front page. A lot of people have their attention hacked apart by too frequent too long pausesthat are technical (not human or corporate) in nature: https://hackernoon.com/software-development-at-1-hz-5530bb58fc0e