The Long and Short of it
I was diagnosed with SCD October 2nd, 2019.
This post isn't any kind of plea. I'm not looking for any kind of special treatment going forward or even forgiveness for my past behavior (though I probably do owe an apology or two). My hope is that it serves as a convenient place to point people in the future. It would also be nice if someone else new to SCD stumbles across this and it makes them feel better knowing they're not alone.
What is Social Communication Disorder?
It's also sometimes referred to as Social (Pragmatic) Communication Disorder and Pragmatic language impairment. It's coded as DSM-5 315.39 (F80.89).
You can find different explanations all over, but I like the way it's stated in its Wikipedia entry (at least at the time of this writing):
Individuals with social communication disorder have particular trouble understanding the meaning of what others are saying, and they are challenged in using language appropriately to get their needs met and interact with others.
Interacting with others is indeed a challenge. My daughters frequently remind me that I have trouble peopling. While many share this challenge for various reasons, I am apparently physically wired for it... SCD is a neurodevelopmental disorder (my brain wired itself a little off kilter very early in life).
Why was I tested?
Six months prior to the diagnosis (April), I saw a therapist for the purpose of a kind of checkup. I wanted to ensure I was doing a decent job raising my younger daughter (the older having already grown and moved out). Just asking friends and family wouldn't have been enough (or trusted - bias!), I wanted a professional's opinion. Toward the end of the very first session, the therapist asked me if I had Asperger's Syndrome.
Asperger's Syndrome? I said I assume not since I have never heard of it. She thought it a strong possibility so sent me home with a link to an online test: Aspie-Quiz. That test showed what she called "interesting results", but nothing ultimately came of it. Our time together was rather short - she assured me she thought I was doing great by my daughter and didn't know how else she could help. With Asperger's and Autism not being her thing, all she could do was wish me luck and shuffle me along.
After noodling this new idea for a while, I took a more extensive online test: The Ritvo Autism Asperger Diagnostic Scale-Revised (RAADS-R). That link is specifically to my test result. It shows scores well above the thresholds for being suspected as having ASD. Well that was it for me, now I had to know.
Where was I tested?
At first I couldn't find anyone local who could do adult ASD evaluations. As luck would have it, a friend at my daughter's karate dojo works in the field and knew someone who might be able to help. She pointed me to The Center for Professional Psychology down in Fort Smith. I hadn't even considered broadening my search there. Dr. Jackson is the psychologist there who helped me and I couldn't be more pleased. She is extremely easy to talk with and really seemed to understand not only me, but everything to do with Autism and Asperger's. I truly felt I was in good hands.
The evaluation happened over three visits. First was a one hour screening that allowed her to hear my story and determine whether or not Asperger's/Autism was even a possibility. I liked the idea that she wasn't going to waste either of our time if it wasn't. The second visit was the full 4 hour evaluation (IQ test and 4 different psych tests). The final visit was three weeks later when I got the results.
The evaluation showed that I am not neurotypical, but also that I do not exhibit severe enough symptoms to support a diagnosis of Autism.
Back when Asperger's was still a diagnosis, I would have landed there, but now Asperger's has been split such that the patient is either severe enough to just be called autistic, or the patient is diagnosed with the less severe condition of Social Communication Disorder.
TMI - more detail from the psychological evaluation
Here are a few notes pulled from the clinical summary.
This condition involves poor social skills, including problems initiating and maintaining relationships appropriate to his achieved chronological age. It also includes difficulty understanding the perspective of others.
All of these issues have led and will likely continue to lead to functional impairment in his primary relationships. Social Communication Disorder is a developmental disorder that affects the patient on a chronic and lifelong basis...
He processes life from an almost exclusively logical framework and struggles with perspective taking of others who tend to be more emotionally driven.
Finally, personality testing and interview information identified an overall level of low emotionality with no clinical emotional symptoms. Thus, he has a higher threshold for experiencing emotion than most others and a general tendency towards anhedonia or a lack of enjoyment in activities as others might enjoy. While this limits discomfort, it can also limit positive emotional expression and it may routinely be misunderstood by others.
All of these issues have led and will likely continue to lead to functional impairment in communication in maintaining interpersonal relationships.
This was pulled from the section detailing specific test results (MMPI-II-RF in this case).
He tends to have less positive experiences than is typical as well as tends to be pessimistic, self-critical, and prone to guilt. Moreover, regarding interpersonal functioning, his response profile indicates that he is likely to avoid social situations, be introverted, have difficulty forming close relationships, and be emotionally restricted. He is likely to be uncomfortable and socially inhibited.
Where do I go from here?
That's a great question.
On one hand, I have survived this long. There's a reasonable expectation that I'll plod along just fine the rest of the way too even if I change nothing.
However, Dr. Jackson did leave me with some great recommendations. Things like continued therapy (including a reference), supplements, volunteering, and something called adult based pragmatic speech therapy. I like the idea of all of these. They might make for some great adventures and stories too.
I think I'll sit on it for a minute. Spontaneous is not generally a word used to describe my actions. I'll keep you posted.
Unlimited vacation is a bad idea
I used to love the idea, but after having it a few years, I've changed my mind. Even though I had unlimited vacation, I don't think I took nearly enough time off.
Not taking enough time off is what inspired the title of this post. Of course you can't take "All" of something that is unlimited. Yet, I would frequently feel short changed on vacation. I don't think it was anything intentional on my employer's part and I don't think it was entirely my fault. I lay the majority of the blame on the notion itself.
Why didn't I take more time off?
Asking for time off is still awkward. It feels like I'm putting everyone else out because someone will have to take over my duties while I'm away. Even if there are very few duties, there is still the fact that the output expected from me will have to be delayed. Maybe that's fine. But there's that part of me that is sure that even though everyone is saying and acting like it's fine, there's a little disappointment or even frustration below the surface.
And then there's the fact that in reality "unlimited" does have a limit. It's not like your employer would let you take the entire summer off every year or just take week after week indefinitely. At some point, they will decide your salary could be better spent elsewhere unless you start taking less time off. I don't like that the limit is unspecified, yet we all know it's there. Even worse is that the limit is subjective and will fluctuate depending on the manager and employee.
I never hit that limit. I have a feeling I never even got close to the limit, much less being asked to take less time off. Yet, I was never asked to take more time off either.
What I really meant
Unlimited admin time and sick days more accurately describes what I actually desired when I used to talk about unlimited vacation.
I like the thought that I can run errands as needed without having to cram them into lunch or keep detailed track of vacation hours every time I step out. I also like the freedom to skip out a little early from time to time, especially on Fridays. I do understand that even these freedoms could be abused and tolerance will still be subjective. But if the environment is open about expectations and the use of this kind of "admin" time, then everyone will be doing it and I wouldn't ever feel like I'm taking advantage. That and running errands or leaving early a couple days a week will rarely impact feature delivery.
Even though I rarely need sick days, I also like the thought that they aren't tallied in any way. When you're sick, just take the time off without consideration of any kind of yearly quota. If you're the type who frequently fakes being sick, I feel like everyone can usually tell and we're back to the subjective tolerance of your current boss. If you're truly sick though, even if you're the type who is sick a lot, then it's not like you're out enjoying your time off. No need to add to you misery by knowing that you're eating away your precious vacation time.
A better way
A friend told me the vacation policy of the Netherlands - government mandated minimum of 6 weeks per year. The interesting part is that if for any reason the employee cannot take all 6 weeks, the employer must pay the employee an equivalent amount in the form of a year-end bonus. This sounds very cool and really close to what I would consider ideal.
In my ideal world, vacation would be a range where the bottom number is a forced minimum and the top number is strongly encouraged.
Perhaps we could marry this ideal world with Netherlands' approach. Anything below the top number would be paid out. But again, the bottom number would be forced.
Now obviously I'm missing a lot of scenarios that would need to be considered. My first thought would be small businesses. Secondly, who is forcing the minimum? The government? Or would it just be the policy of forward thinking companies. Maybe it would be the thing all the cool companies start doing - just like unlimited vacation is the cool thing now.
I don't know the perfect solution. All I know is that unlimited vacation hasn't worked out so well for me.
A couple weeks ago I wrapped up my last contract. I mentioned it in Drowning in New Technologies. Again, awesome, awesome contract – I learned a ton and got to work with some really cool people.
The last time I had a break between contracts I started playing with electronics. I've thought about picking that adventure back up, but am hesitant because of a couple roadblocks I had started to run into before. First was cost – tinkering with electronics isn't crazy expensive or anything, but if you wanted to replace every plug in your house with a smart plug for example, it adds up quick. The true low cost solutions are really only present in bulk – massive bulk. The other road block was simply my hesitation to truly devote to something so big. You see, I tend to over-do everything I get into. If I was going to get serious about it, that meant starting a journey of mastering all aspects of electronics – everything from the basic electronics knowledge needed to get a circuit working to learning all I could about physics. Knowing how to do something doesn't cut it for me. I have to know exactly why every piece of the puzzle works. People spend years and sometimes entire careers mastering this. I'm not sure I'm excited enough to devote myself that completely to it. Maybe being a hobbyist is the key here; not working out how to profit from it.
I think I'll stick to software and stick to the aspect of it I know best - enterprise web development. For a while yet, that means continuing to consult. I still hope to create a product of my own though and consulting might be the key to that as well. You see, I've worked out a cobbled together way of managing my gigs, billable hours, invoices, and whatnot. It's a mixture of folder structure, documents, an Outlook calendar for keeping time, Excel templates for the invoices, and a lot of copying/pasting followed by printing to PDF.
I'm pretty sure there are solutions out there for this, but creating my own will do two important things for me. First it will potentially turn some profit if it turns into something others find useful as well. Second it will give me the codebase of a real world application that I can use for both pointing potential consulting clients to and as an example when trying to explain a concept to another developer. It is sometimes rough when someone wants to see some of what I've done or they want to see an example of whatever pattern I'm prattling on about, but everything I've done is internal and proprietary. I'm good at coding on the fly and coming up with sample applications, but nothing speaks truer than code running in production.
So that is my immediate plan. I've upgraded to Windows 8, Visual Studio 2012, and ReSharper 7.0. I've also purchased ASP.NET MVC 4 in Action to make sure I haven't missed anything over the last year. Once I've gone through that, I'll get started on my first product. My intention is code it publicly (GitHub of course) and blog along the way about why I've done this or that in the codebase.
That is, unless I change my mind 12 seconds after clicking publish on this post, or unless another gig comes along much sooner than I expect it to. Wouldn't be so bad if I could manage to write some code in the evenings and weekends. Stupid Warcraft! Yes, I still play - have long since given up raiding, but I do indeed have a level 90 Druid already and have a young panda monk decked out in heirloom gear anxiously awaiting my attention.
Wish me luck!
Since April (around the time of my last blog post!), I've been on a gig with a company out of Indianapolis. It's your classic big corp, big ball of mud, type of application. Nothing new to me since I've spent my entire career in corporate America and I'm pretty sure I've created a few balls of mud myself.
The cool thing about this gig, however, is the team. After some turn-over and apparently a breaking point that caused them to get much more picky about hiring decisions, the team I joined seems to be a team of rock stars. Most have figured out they can come to me with questions on just about anything code related and here's the cool thing - answering their questions is always easy. I mean, they just get things insanely fast - every single one of them! Now, I've worked with some freaky smart developers before (last team I worked with at Tyson for example), but rarely do you see a team of dozens where all of them are freaky smart. There is always a handful of laggards (no, I don't think you are one of them).
Additionally, I've gotten to learn a few new things on this gig.
I haven't become a SOLR or Lucene expert or anything, but I've had to do a couple things with SolrNet. Seems to be all that I've read about over the years. Can't say I'm enjoying this from a developer's perspective though. You see, they have all the environments setup for it, but when developing locally, the internal SOLR abstractions hit DEV instead of local. This means if you're working on UI that uses the search indexes, it sucks because your local changes obviously aren't going to show up in the indexes from the DEV database. It also means I must be connected to VPN to touch UI using SOLR.
I'm not entirely sure how I feel about AutoMapper yet. I've heard nothing but praise about it for years now, but this is the first time I've been on a project where it is actually being used. Maybe it's the way they're using it, or maybe I just haven't seen the light yet, but at this point I'm not digging it.
Sure, it does make your controller actions much smaller. It also takes care of DRY if you're mapping between two objects in many places. But mostly I find myself constantly having to hunt down the mapping logic to figure out exactly what is being copied between the objects, or, more frequently, to find out why something is not mapping correctly. I'm sure I'll come around, but right now it seems like a mix of voodoo and magic. Most importantly, there is no "go to definition", search results is the only way to find the mapping.
This one was fun. I played briefly with Topshelf in the past as a spike - never made it to production if memory serves. This time though, we're using it to take care of the Windows service that handles all of the project's scheduled background work. The API is crazy easy and lightweight. Can't think of anything negative to say about this at all.
Holy crap this thing is cool. NSerivceBus has been on my radar for a long time - as well as Mass Transit. We had a bit of trouble with MS DTC and permissions and whatnot, but it has otherwise been nothing but goodness. I love the feeling of isolation and extremely small units of work you get when dealing with service bus architecture - each message is its own unit of work and tends to be a small one.
I think that pretty much covers it. Well, there are a couple of others (like their internal email handler/service/thingy), but I'm afraid a recruiter might see and start offering me gigs utilizing them. Kind of like the fact that you won't find assembly, C, C++, or BASIC on my resume. I don't want people knowing I know that stuff!
As I was getting into my next consulting gig, I found myself copying yet again all of those utility extension methods and classes I tend to pull along with me into every project I work on. Enough is enough, I thought! That and it was a great excuse to finally play with NuGet.
You see, I've been avoiding creating a personal library all this time because I didn't like the idea of having an odd dependency that I included in projects. It would have a foreign or personal sounding namespace, versioning and updating it would be a pain, and developers that came along behind me on the project would have this weird black box of random code. I wouldn't want to run into something like that on a project I joined.
Then I figured out that I could create a NuGet package that was content only. Not sure why I hadn't already put that together, but my original thought was that I would have to create a package that delivered a binary which would be referenced by the target project. Easy versioning and updating taken care of, but I'd still be left with the black box of random code. With a content only package, the actual source code from my "personal code library" actually ends up in and lives in the target project.
The final kicker was my noticing source code transformations. By using the $rootnamespace$ token, the NuGet package installer would transform the namespace declarations into whatever the target project was using. No weird or personal namespaces! Pretty much takes care of every problem I had with creating my library.
I set up a basic class library project and unit testing project. Not that I've done a lot of testing mind you, most of the code in the library has been in my possession for a very long time, but I plan to add tests as I modify and grow the core library.
The interesting part to me was automating the deployment into NuGet. Next to the solution file, you'll see my standard deploy.bat and deploy.proj files (if you've worked with me, you probably recognize these!). In here is where I use MSBuild to grab the current build version, copy all the source to a temp folder, replace my namespace with the $rootnamespace$ token, create the NuGet package, and finally upload the package to nuget.org. Very easy and very cool.
With the addition of a hotkey in Visual Studio (see here for details - I do it similar: no context menu, just a hotkey), updating my personal code in a target project is as simple as updating my library, running deploy, and then updating the package at the target. Crazy easy!
The NuGet Package
The package is called RobTennyson.Common. Installing it is as simple as running this in the Package Manager Console:
PM> Install-Package RobTennyson.Common
I don't know that I'd suggest using it since it's my junk pile and filled with my opinion on how things should be done. It's also likely to change a lot and often. But you're welcome to it if you'd like. You're also welcome to snoop around in it and tell me why I'm nuts for doing this or that (like my .Each and .F extension methods!).