Secure, But Not Encrypted

I’ve been going to the doctor a lot lately (knee problem, boring story), and I had to sign a consent-to-being-emailed form. On this form, which I regrettably forgot to nab a copy of to post here, it was explained to me, the patient, that the practice’s use of email is “secure, but not encrypted.” They labored to assure me that their computers are protected by passwords, but that no content is going to be encrypted.

I, of course, am a software developer and understand what this means: namely, that the information is not secure. Further, I’m not even sure what they’re trying to reassure me about, understanding what I do about computers and security. I’m safe against the other doctors in the practice learning my medical history? Or perhaps the assistants and administrative employees? Those people almost certainly could get access if they wanted it, and I don’t care, because it is their job to know enough to help me.

Sending information unencrypted over email is just letting anyone have it. Sending it through an encrypted protocol is giving it away only to the practice’s email provider, the receiver’s email provider, and (obviously) the NSA. Since you’re a doctor’s office, I have no reason to believe you have spent a single minute thinking about your technological infrastructure, and thus no reason to trust your email provider. I use gmail, and I have good reason not to trust Google. So you’re sending my medical information to at least two parties I don’t trust.

I don’t care about this at all. My perspective on security is that all security is security theatre and if someone wants to break into my house or my email or anything else badly enough, they will succeed. But I know this. I don’t care because I am (somewhat) informed. I know that assuming my data is secure is simply incorrect, so I assume that the entire world can see it instead, and make choices accordingly.

I do, however, care pretty deeply that to an uninformed reader of that consent form, who understands the everyday meaning of the word “secure” and has more or less zero understanding of encryption, or email transport, or anything else related to computer security, it sounds like the practice is taking meaningful precautions. I don’t know if it would stand up in court — I believe there are laws saying that when one party is drastically misleading the other party who is direly uninformed on the material, that isn’t valid — but it still pisses me off. I don’t even think the practice knows they’re misleading their patients. They probably don’t know anything about computer security either. But it’s just all so wrong and sad.

Posted in pedantry, security, software | 1 Comment

How To Write A Resume* Worth Reading

I have recently taken on a bunch of hiring at work. In particular, I am now spending a substantial amount of my time at work reading resumes. These are for new grads and intern candidates for software development positions. I have some thoughts on how to write your resume, and since most new grads are not fortunate enough to have access to people who will be reading their resumes, I thought I would write up these thoughts.

Preamble

I know that writing your resume is hard. There’s a number of competing goals, and it’s difficult to balance them. In addition, many computer science students do not receive adequate training in technical writing, and their only resource is often a harried student resources administrator who would like very much for your resume to be wonderful, but can’t write it for you without most of your information, in the week you have left to apply for jobs.

It’s still important to do a good job. I personally do not grade resumes very harshly, for many reasons. Most of what I am looking for is something like 4 bullet points out of a possible 10, since it’s next to impossible for a new grad or intern candidate to have accomplished anything meaningful. Not everyone is going to be as lenient as me, though, and the less of your resume I have to ignore, the happier I’m going to be, which, unfortunately, will affect my objectivity no matter how hard I try not to let it. If I am the person who reviews your resume, and it lists something like a Bachelor’s degree, the word “Python” somewhere, and a project or two that you seem to have completed (even class projects count in many cases!), I’m not going to turn you down because the rest of your resume is bad, but that doesn’t mean you should try to get away with it!

What a Resume Should Do

The ultimate goal of your resume is to land an interview at the company you send it to. It is not to impress your mother, or make yourself sound good, or “get you a job.” The duty of the resume ends when the person you send it to agrees to give you a phone call. This informs some decisions about what to put on your resume; namely, some amount of “acronym soup”1 is tolerated, and it is actually reasonable to plop down a long list of dubiously useful buzzwords to get someone to notice you or to get past HR. If you knew for a fact that a software hiring manager was going to be the first person to see your resume, you would not list information as desperately as you must when that might not be the case: I have found myself with a skills section that says absurd things like “SQL, MySQL” just because I do not know if I will have to have “SQL” as a separate buzzword. You have to make some odd decisions to play it safe because a resume is not, fundamentally, a representation of the talents you’ll ultimately bring to a company, it is a plea for someone to call you back.

So “land an interview” is not an actionable goal. What sort of subgoals does your resume need to accomplish to fuel the greater effort? The major things to do are:

  • Present enough conventionally mandated boilerplate to not have your resume thrown out
  • Present some relevant achievements
  • Explain what relevant skills you have (indirectly)
  • Explain what your interests are (indirectly)
  • Make you stand out in some way

And the complements to the two indirect ones, of course: leave out anything irrelevant, even if it is an achievement or skill of some sort, don’t mention important skills that you don’t have (either in positive or negative: it should go without saying not to lie here, but also don’t list something like “Worked with a front-end engineer because I don’t know JavaScript”), and don’t make your resume seem like you’re interested in a field or job that is not, in fact, something you want to do.

 Rapid Fire Don’ts

Here are a number of things not to do when sending out a resume for a software development position. Most of these are actually relevant to any resume, but I can’t pretend I know how resumes are evaluated in other industries, and some of these are fairly specific.

  • Do not list skills that I don’t care about, such as:
    • Microsoft Office suite tools
    • Notepad (seriously, I’ve seen this)
    • Any text editor, actually
    • Any productivity software whatsoever, with the exception of tools directly related to the software development process (that would mean you can list git, but you can’t list Trello: Trello is external to the development itself, while git or another VCS is deeply ingrained in how developers work).
    • Things that are wildly outside the ken, such as martial arts, or acting, etc
  • Do not list achievements that are irrelevant to development work, such as:
    • Being an Eagle Scout/Gold Award recipient
    • Employee of the Month at your high school job
    • …your high school job, at all, in general
    • Anything about your minor/second major beyond the fact that you obtained it. This can be bent if you, say, wrote software in the course of research in that field, but in general I don’t care that you took a few Math electives or play the trumpet or whatever.
  • Do not provide your course list. It is not very different from anyone else’s course list, and beyond that, I actually don’t care what courses you’ve taken. If there’s anything extraordinary and unusual, you can find somewhere to squeeze it in.
  • Do not list redundant qualifications. I see a number of resumes where a GPA of 3.8+ is provided, and “Dean’s List” is also somewhere on the resume. I do not need both pieces of information.
  • Do not attempt to quantify your own skills. Tell me in what contexts you’ve used them and what you’ve done by leveraging your skillset, but emphatically do not tell me you are an “expert in Python” or a “JavaScript guru.” I know a lot more about Python than basically any fresh grad2, and if I do interview you I’m going to make you prove you’re an expert, at which point it will come out that you are either a) lying on your resume or b) simply delusional about your own abilities, neither of which reflect well on you.
  • Do not list any skills or technologies that you are not willing to talk about in an interview. If you haven’t used Visual Source Safe in 5 years and you don’t remember how it works, that means it’s time to take it off.
  • Do not misspell technologies you claim to be versed in. It does not speak well for you that you’ve spent 4 years studying it and still think it’s spelled “JAVA.” It’s not. It’s “Java.” Please stop doing this one, people. It hurts me every time.
  • Do not have huge proofreading errors in general. I don’t care about a typo here and there or “it’s” in place of “its,” or whatever, but eventually these things add up and I just start to assume you’re not going to be able to communicate well in the workplace.
  • Do not list frameworks, operating systems, libaries, databases, or anything else that is not a programming language under programming languages. Do not list HTML or XML or CSS under programming languages, even if you shorten it to just “languages.” Seeming like you don’t know the difference between a programming language, a markup languages, and a library is not a good look.
  • And this is perhaps actually the most important one: Do not give me a resume that’s over a page long!

So, Then, Do You Have Any Positive Advice?

Of course! There’s a number of easy things to do to make your resume better. I’m gonna go through them in the order from above.

Present enough conventionally mandated boilerplate to not have your resume thrown out

So I need your name, phone number, and education information. I would prefer that this take up approximately 3 lines of text, because it is some of the least relevant information. Yes, even for a new grad, your education information doesn’t matter much to me: you have a BS in Computer Science from some school, that’s great, but I don’t care about your course listing or your honors program or basically anything else except: I went here from dates X to Y and got my diploma. Many places will insist that you include your GPA, which, again, I don’t personally care about but which it is sensible to include anyway.

Aside: I don’t care about your GPA partially because it’s just not a measure of anything except diligence and partially because my own GPA was merely alright, due to hating school passionately. I seem to be doing okay, though, so I have personal experience of why it’s not particularly relevant.

Beyond that, the rest of what’s conventionally required is actually there for you to use to sell yourself, and so I can’t in good conscience call it boilerplate.

Present some relevant achievements

I want to know every interesting project you’ve done. Any side projects (even pretty small side projects are worth including: if you wrote a Blackjack bot, that’s plenty substantial enough to mention), and any major class projects. A good barometer for whether or not a class project is worth including is, “did everyone else in my class also write this program?” If the answer is yes, it’s not interesting. If the answer is no, mention it.

I also want to know anything cool you’ve done in the software development universe that isn’t a project. Did you go to PyCon? Did you get the Grace Hopper award? Did you do an independent research project with a professor? Those are all awesome and I want to hear about them. Include these.

Finally, I of course would expect to see any relevant work experience here. If you had a prior internship or part time job or something, list it and mention what you accomplished there.

Explain what relevant skills you have (indirectly)

Now, there is a place on your resume for a blunt listing of skills. I’ll cover that a little later on, when I mention some things about formatting. But in general, just seeing something listed on your resume is not a strong signal that you actually have any particular expertise in it. This is unfortunate but true: I have interviewed people who have things listed on their resume that they cannot talk about coherently. Thus I cannot trust a list of technologies without any further evidence of competence.

So, on any projects you list (personal, school, or work), figure out a way to work in the technologies you leveraged to build them. For example:

  • Built a web app in Django to collate TPS reports, including an interactive frontend using jQuery for AJAX requests

That tells me an awful lot more than two disconnected pieces of information, one of which lists Django, jQuery, and AJAX, and other of which merely states “Built a web app to collate TPS reports, including an interactive frontend.” In the first one, I know that you’ve built a project using those technologies. In the disconnected example, I might assume that all your web projects were in Ruby, and Django is only listed because you ran through the tutorial one weekend.

Use this as a general pattern for demonstrating your experience with anything you want to call attention to! You could say, for example,

  • Constructed requirements document for a greenfield TPS reports engine, delineated tasks into User Stories, and got our team set up to work in an Agile way.

Note: I don’t give a shit about anything demonstrated in that last one (except that you gathered requirements, that’s quite relevant), and most of it isn’t something a new grad or intern will have any exposure to, but the point is it’s a fairly flexible template. Most bullet points in your resume should look like:

  • ${created something} ${in a way that demonstrates some knowledge} for ${reason that explains or at least hints at its value} ${and maybe some followup explanation}.

Maybe what you created was improved performance. In that case, you could say:

  • Parallelized TPS report process using Hadoop, decreasing running time by 42%, which allowed our business analysts to have access to their data up to a full business day sooner.

Explain what your interests are (indirectly)

If you’re applying for a web development job, call attention to any web development work you’ve done. If I’m reviewing resumes for a web dev position and I see a lot of bullet points about Android and NLP, I’m going to assume you don’t want to work here. Maybe you actually really like web dev, and it’s a historical accident that most of your work has been in other areas. That’s totally fine! As a new grad, “most of your work” is 0 of your expected lifetime output to many significant figures, and if you just think web apps are awesome, find a way to show me. “Built a toy site in Django to see what the excitement was about” is a huge selling point that you might enjoy the work you’re ostensibly applying for.

Another great way of doing this is a link to a portfolio or your github/bitbucket account. These things are wildly not required for you to get a callback, but if you have them, they’re a great way to demonstrate what you work on when you’re free to choose. This is probably the best way to signal that you have interest in what the company is doing outside of having prior experience in that field.

I assume this goes without saying, but don’t tell me about your non-professional interests. Maybe we’ll get along great and go play ball on the weekend or see concerts together or whatever. But I don’t care, and including such things is bound to hurt you: either I think your interests are bullshit and I subconsciously give you a demerit (I swear, I try very hard not to do anything like this, but it is unreasonably difficult for humans to maintain true objectivity, and you should not risk it), or I think your interests are awesome and I give you a thumbs up, which is a) discriminatory in the hiring process and b) liable to set off alarms that I need to be more objective, and is just as likely to cause me to wildly overcompensate as it is to end up in your favour.

Don’t mention personal things on your resume. It’s a terrible, terrible idea.

Make you stand out in some way

This one is really hard. Most new grads are substantially the same. There are some obvious ways to do this: prior internships or work history, open source contributions, a personal github, and various other harder-to-achieve things like winning well known awards for CS students or having a strong portfolio. It is advisable to do any or all of these things, because the world is a cold and harsh place, but it is not for me to categorically dismiss all those who don’t.

Perhaps the easiest way to make your resume stand out is to not clog it up with bullshit that doesn’t matter. If you went through your resume according to my list of Don’ts, you’re probably looking at somewhere around half a page of content. If you have more than that, congratulations on your upcoming offer from Google; you can stop reading now.

It is a truth universally acknowledged that a resume must be no more than one page, and not much less than one page. But, it is a truth that I, at least, avow, that much of the text on the average resume is of negative value, and should be removed.

So here’s what you do: Take all those bullet points about the projects you’ve done and go into a little more detail. Make them sound cooler. Try not to stretch things too much — I’d much rather a sparse resume than one where it sounds like you have no confidence and have to reach really hard to make anything sound good — but just elaborate a little.

Then, do some reformatting. Make your section titles bigger, or use a bigger font. Make your name on its own line and bigger than necessary. Include some extra line breaks. Now your resume is much more pleasant to read, and is also the magic size.

Try to avoid the temptation to make your resume stand out by getting fancy with the design. If you are really a strong designer, then you might get away with it, but it’s mostly just a distraction. If you’re applying for a design job (or even a front-end developer job, potentially), it might be appropriate to add some flair, but for a normal SWE job it’s not a good idea: you probably won’t do a good job, and the person reading it will at best not care even if you do.

Some Structural Tips

Many people present their skills poorly. I’ve seen a number of ways of formatting your skills presentation, and there’s several ways of doing it that are appropriate depending on your goals. My own resume has a very short skills section, mostly as a result of the places I apply to. I generally apply to small startups, where I have a reasonable assumption that a technical person is going to be the first person to see my resume, so I mostly just list some things to get them out of the way and leave space for talking about what I’ve actually done with the rest of the page. If you’re applying to larger companies where you’re worried about a semi-automated HR screen, you should list many more skills (as above, it might make sense to list several flavours of SQL just in case someone has a checkbox that says “T-SQL” that won’t get checked if you don’t have that string on your resume). And there are other considerations, too: perhaps you would like to fill some more room on the page because you listened to my advice and now have blank space you feel compelled to fill. In that case, choose a more elaborate format for listing your skills!

The general ways of breaking down your skills section are

  • By category: Languages, Databases, Web Technologies, Tools, maybe a catchall, etc. Whatever grouping makes sense for your background.
  • By skill level: Proficient, Comfortable, Exposed To, something like that. Proficient is a reasonable word to use here for the languages or technologies you’re best at; it’s a sort of code word that means “proficient compared to the other categories,” whereas using a word like “Expert” is, as mentioned above, a bad idea. You’re a new grad, you’re not an expert in anything. And if you were an expert in something, you wouldn’t have a whole section for it, because you’re damn sure not an expert in multiple things.

You can mix and match, you can use a crazy table, whatever. But those are the standard ways of doing it, and you don’t want to deviate too much. For example, you could have something like the following:

  • Languages: Java (proficient), Scheme (comfortable), Python (beginner)

or on the other side:

  • Proficient: Java, Ruby | Django, MySQL | HTML, CSS

or, say you want to mix and match across categories to save some space or preserve context. Maybe you do something like:

  • Web Technologies: Python (with Django and Twisted), PHP (CodeIgniter), JavaScript (jQuery, backbone.js)

But, for the love of god, don’t delineate a category and then include examples in it that don’t belong!

 

If you are listing personal projects and you are able to link to their source, you should. This is a great place to include links to your github, because it means I don’t have to sort through your repos list and try to figure out which ones are worth looking at, and it allows you to link it without making it intrusive or having to find room for it somewhere else.

An aside about github: if your github is all trivial exercises and forks of popular projects that you haven’t actually contributed to, consider leaving it out. If there’s nothing of meat in there it doesn’t help you at all, and if there’s only 1 or 2 projects nestled amongst a background of noise, try to link directly to what is worth looking at. Using github as a place to manage a bunch of things that aren’t really for interviewers to see but that you want to keep track of is great, but if that’s how you’re using it then don’t try to show it off.

Wrapping Up

Hopefully this advice will help you craft a resume that gets looked at. It should help you make your resume punchier and more to the point, and avoid some novice foibles. I can’t guarantee you’ll get callbacks from this, but it will at least lower your false negative rate.


 

*Résumé. Whatever.

1. “Acronym soup” is a term to refer to long lists of acronyms detailing technologies that you have experience with; think “XML HTML SQL SVN ANT….”

2. I am not an “expert in Python” and I would never claim to be, much less on my resume. This isn’t intended as bragging; it’s intended to drive home how poor people are at evaluating their own skill level.

Posted in hiring | Leave a comment

Uses and Abuses Of Python’s Excessive Dynamism

I have not written much about programming lately, but enough has built up in my personal goofiness repo that I thought I’d talk about it. I am a Python programmer by day, and occasionally I learn things about the language that click together and I realize how badly I can abuse the runtime, which I then do as aggressively as I can manage. Here are some of my favourite examples.

You can find all the code samples here on my github.

Aspect Oriented Programming via Late Binding Abuse And Metaclasses

Python metaclasses are a complicated beast that I will not explain in great detail here. This Stack Overflow answer is a good place to start on how they work in general.

Here I present a metaclass for making all class functions log their calls):

def logging_func(f):
    @wraps(f)
    def _logs(self, *args, **kwargs):
        alist = ', '.join(str(a) for a in args)
        kwlist = ', '.join('%s=%s' % (k, v) for k, v in kwargs.items())
        print '%s(%s)' % (f.__name__, ', '.join([alist, kwlist]))
        return f(self, *args, **kwargs)
    return _logs
    

class LoggingMeta(type):
    def __new__(cls, name, bases, attrs):
        for k, v in attrs.items():
            if type(v) in (types.MethodType, types.FunctionType, types.LambdaType):
                attrs[k] = logging_func(v)
        return super(LoggingMeta, cls).__new__(cls, name, bases, attrs)

logging_func is just a decorator that takes a function, and returns a new function that prints the arguments of the call before returning the result of the original function.

LoggingMeta is a metaclass (you can tell by how it inherits from type!) that modifies any class of which it is the metaclass by wrapping all functions with the above logging_func. If this were production code, you’d want to be more discerning about which methods to wrap (probably leave out __init__, etc), but if this were production code you wouldn’t want to be doing this at all, so there’s that.

So that covers the metaclasses part of the heading. Next up we abuse late binding:

class SecretLogging(object):
    __metaclass__ = LoggingMeta

object = SecretLogging

In python, all the builtins are normal names that are simply bound by default. This means you can bind builtin names such as object and str to any object of your choice. This does not apply to keywords such as if and in. Here we bind object to be a new class, which is an empty new-style class with the metaclass defined above. Now all new-style classes defined henceforth (in any scope where this rebinding of object has occurred) will secretly log all their function calls.

class Foo(object):

    def something(self, g, a=None, b=None, *args, **k):
        return {'a': a, 'b': b}

Now, unbeknownst to me, the naive definer of the Foo class, all my methods are secretly wrapped up to log their calls!

Declarative Function Currying

This one actually came up at work. I ended up deciding it was too arcane to go with, but it would have solved a real problem (despite probably adding more problems than it did solve). I was modifying some code to take a new configuration parameter. The tests all set up the configuration to the appropriate state for the given test using a context manager, so there were a lot of lines like:

with build_my_object(some_config):
    # the rest of the test

So I got to thinking it would be nice if I could say, I’d like to ensure that all these tests still work the same when my new configuration parameter is set, but I don’t want to duplicate all these functions to change just one variable. I realized I could do this with Python magic! This was being run under one of those test frameworks that runs anything named test_* as a unit test, so I would have to come up with some scheme for creating new test functions on my class from what I would think of as a test template. My idea was that I would have some sort of decorator that would tell some magic infrastructure somewhere to take this function as a template, and replace it with two or more versions of itself, named appropriately, that called the build_my_object context manager with different parameters.

Here is how to implement something like this. I again encourage you not to do things this aggressively arcane in your production code.

First, let’s look into the contract we’d like to be able to use for these templates. I ended up with the following, and I think it’s pretty appropriate for what I’m trying to do:

@method_duper
class Foo(object):
    @dupe('x', 'y')
    def duped_this_one(self, arg):
        print arg

This means we want to take the function duped_this_one and replace it with two functions, one of which is calling it with the argument ‘x’ and one of which is calling it with the argument ‘y’. The class decorator method_duper is a necessary evil (unless we want to go into metaclasses like above, but I didn’t think that level of indirection was necessary for this trick). It’s not part of the contract I want, but it makes things work.

So now we have two things we need to define to make this work: method_duper and dupe. Let’s look at dupe first:

def dupe(*dupe_args):
    def wrapper(f):
        f._dupe = True
        f._dupe_args = dupe_args
        return f
    return wrapper

This is a pretty standard decorator in pattern, but note that it does not actually return a modified function. This is using a decorator to implement a declarative pattern, not to change the behaviour of a function. All this does is set some attributes on the wrapped function so that our “magic infrastructure” can use them later to dupe our functions.

So then, the real work must be done in method_duper, and that is the case.

def method_duper(cls):
    def maker(f, *args):
        def new_f(self):
            return f(self, *args)
        return new_f

    for n in dir(cls):
        f = getattr(cls, n)
        if not callable(f) or not getattr(f, '_dupe', False):
            continue

        for i, new_args in enumerate(f._dupe_args):
            mod = maker(f, *new_args)
            name = '%s_%d' % (n, i)
            mod.func_name = name
            setattr(cls, name, mod)
        delattr(cls, n)
    return cls

This is a fairly complicated function, but a lot of it is actually just doing some massaging for issues like scope control. Let’s look at a simplified (and wrong) version to get the gist of it, and then I will briefly explain why it doesn’t work so well:

def method_duper(cls):
    for n in dir(cls):
        f = getattr(cls, n)
        if not getattr(f, '_dupe', False):
            continue
            
        for i, new_args in enumerate(f._dupe_args):
            def new_f(self):
                return f(self, *new_args)
            name = '%s_%d' % (n, i)
            new_f.func_name = name
            setattr(cls, name, new_f)
        delattr(cls, n)
    return cls

This is a little easier to swallow. This is a class decorator, as the argument indicates (and as its usage earlier on makes clear). This method takes in a class, modifies it, and returns it. It is worth noting that, because of Python’s evaluation rules, the class will have been fully executed before this method is called (you can think of class Foo as being syntactic sugar for a builtin function call to some internal magic). Thus, the class object we receive when this method executes already has its methods defined, and, in particular, our @dupe() decorators have also executed and set up their declarations.

So we go through each element in the class, and any that have the _dupe attribute set, we modify appropriately. What the inner loop here is doing is taking the function’s _dupe_args (which you’ll recall we set up with our call to @dupe()) and, for each argument list, creating a new function (named, obviously enough, new_f), naming that function in a unique way, and setting up an attribute of that name on the class.

We then go and delete the original method (it was only a template, after all!) and voila, we have our class with custom, declaratively defined duplicated methods!

If you go back to the earlier code, the major difference is that we were using a factory method (maker) to define new_f rather than doing it inline in the loop. This is to get around python’s scoping rules, and is a problem with defining closures that anyone who has ever worked in JavaScript will be well familiar with.

Defining Pre-Increment via Overly Broad Magic Methods

Why is __pos__ an overridable attribute on a class? The world will never know. But, it means you can define pre-increment operators if you decide to!

 class Increment(object):
     '''
     i = Increment()
     print i.val # 0
     ++i
     print i.val # 1
     '''
     def __init__(self, val=0):
         self.val = val
         self._inc = False
 
     def __pos__(self):
         if self._inc:
             self.val += 1
         self._inc = not self._inc
         return self
 
     def __getattr__(self, name):
         return getattr(self.val, name)

This just uses the __pos__ magic method to do gross things with internal state. Fun fact: since python doesn’t actually have a ++ operator, any number of + symbols lex independently, so you can do nonsense like:

i = ++++++++++Increment()
print i.val

which will print 5.

That’s all, folks

Hopefully you learned some things not to do in your production code today. There’s more goofiness up on my github: in particular, the lambda calculus in Python is pretty fun, but that’s much less fun to explain and mostly just an exercise in the flexibility of __call__.

Posted in software | 1 Comment

On The Slow Regard of Silent Things

I recently read Patrick Rothfuss’ The Slow Regard of Silent Things. Rothfuss is a fantasy author, who has also written some other well-received novels. I liked them well enough, although I find his pacing sometimes interminable. The worlds are interesting and the adventures are fun, but I think my favourite thing is his attention to cute little details. He makes a habit of implying that the reason words (like, real English words) are what they are is because of back stories he is telling in his book. Little things like that are a lot of fun for me.

Anyway, this is a companion book to that ongoing series. It’s a brief story — well, sort of, more like a vignette got entangled with a character study — of a minor character from the other books. It’s a fun little read, and an uncomfortably real, and at times painful, portrait of a person suffering from very serious OCD. Probably. If it were set in the real world, it would be unarguable, but it’s possible that all her wild perceptions about the state of things are valid, because it’s magical, so who knows. It’s easy to read it as OCD, though.

This book sometimes reads very much like Danielewski, especially in the style of Only Revolutions. I have nothing against that, but it was sometimes jarring for me to read a paragraph that reminded me so much of the other book.

Rothfuss advises in the foreword not to read the book if you haven’t read his other books, but I don’t think that’s relevant. You learn so little about Auri in his other books, and so little about anything except her in this one, that it wouldn’t be an issue either way.

I might update this post with a quote or two later, but I do not have the book with me at present.

Posted in books | Leave a comment

On The Fountainhead

I read The Fountainhead. I read it out of a desire to be able to more articulately hate Ayn Rand. I think that one should engage seriously in a good faith effort to understand the things one disagrees with. I read some of Twilight in this same spirit; but in that case I was justified very rapidly and felt no need to continue.

The Fountainhead is actually a very good book. Rand is a really excellent writer; her sense of pacing and plot and so on are top notch. Her prose is not a joy in itself, but the book is eminently readable and even exciting.

I don’t know to what extent readers find that this book was pushing Rand’s philosophy. Certainly at the end there is a brief explosion of forthright preaching, but mostly it’s just a story about how great Howard Roark is. And I actually don’t think there’s anything wrong with Roark. I don’t object to him being held up as a person worthy of admiration. I think that if you are Roark, that is a perfectly fine way to be, and that most of us simply are not Roark, and that is also fine. There wouldn’t be anything wrong with more people like him, even.

But Howard Roark is barely human. He is so detached from what being human involves that he might as well be an alien. I agree that self confidence and living for oneself are important goals, but Rand believes that they are the only goals. This explicitly rejects the entire idea of humans as social creatures. Without trying too hard to explain things I don’t understand well enough to reify, I would just like to say that I think a normal human striving to be like Roark is not going to succeed; they will merely lose themselves in masturbatory self-aggrandizement and cruel use of other people. What makes Roark unique is not what he has, but what he lacks: he has no need for anyone else, no social needs at all. One cannot choose to not need other people. Many try, and all fail*. People who do not feel themselves in relation to others have a name — sociopaths. But Roark has both a freedom from empathy and some sort of internal ethical code, which is not a combination often found in real life.

Anyway. It’s no fun to talk about heavy stuff. I’ve been thinking about the issues with characters a lot as I read this book. When I’ve talked about it, the best way I’ve found to put is that none of the book’s characters are multidimensional. They each have exactly one personality trait. And yet, so many things are rendered just unfathomably well. The characters’ disgraces and exaltations and hatred and sorrow are all blazingly authentic. The way Dominique hates Howard because she can’t bear to live in a world where she has to share him; the way Keating spends his life running from his own self-awareness; the way Wynand spent his life trying to destroy people in vindication of his universal disgust. These things all feel so real, they touch so deeply, and somehow they never come together to form characters who actually seem human.

I find it very confusing that Rand could have such deep insight into what makes humans tick and yet still revile it so.

*In fact, it seems to me that it is self-contradictory even to try. If one is striving not to need others, that is precisely because one feels it necessary to be outside their judgement; that is, the striving itself is a need to have other perceptions to ignore.

Posted in books | Leave a comment

Ego Death of the Workaholic, or Identity Politics in Global Norcal

So this has been sitting in my drafts folder for months due to a couple factors. Mostly because I’m scared – if anyone reads it I’m scared what they’ll think, and I’m also scared that no one will read it. Also I think it’s still pretty poorly composed. But since it appears I am never getting back to it, and because it would be such a waste not to use that title, here you go.


The tech industry is problematic. I don’t think that’s a controversial statement. But today I’m interested in an underexplored aspect of the problems in tech – namely, problems surrounding and arising from what I have started to call ego death.

Ego death is a psychological/philosophical term describing, as wikipedia puts it, “complete loss of subjective self-identity.” It’s usually used to describe experiences arising from extreme religious practice or heavy psychedelic drug use, but I think it’s an appropriate way to describe a certain kind of tech worker. Ego death usually means something like an absence of one’s sense of self-ness, which is sometimes felt as a moment of panic and sometimes felt as a moment of total absorption in some greater whole. There are many employees in the tech industry that allow their own identity and even agency to be subsumed by their career, or, worse, their current job.

This is found in people who do things like: work 60+ hour weeks voluntarily, are excited to be given the opportunity to be “on call,” effuse about their company’s excellence publicly, especially on social media, etc. I’m sure you know the type. If this person has any hobbies outside of work, it’s programming “for fun,” and if there’s anything beyond that, nobody knows about it anymore. Sometimes this person’s interests will include superficially diversified activities such as “drinking [with teammates],” or “playing video games [that their teammates are also interested in],” or even “attending hackathons,” but it always somehow seems to come back to the company.

And to be clear, these are not people who are driving themselves hard in order to maximize their career as it begins, which is sometimes a valid strategy. These are people that would be described as Macleod Clueless — people who are enthusiastic without meaningful ambition, and thus exploitable. These are people who would be best off working 35 hours a week and going home and playing frisbee, since it would affect their careers just about the same.

And so but there is this group of people who very much want to assimilate themselves as a cog in the machine. A shiny cog that gets mentioned on walking tours, preferably, but ultimately still a cog. A hiring manager or, worse, CEO of an underfunded, uncertain tech startup cannot imagine anything better than hiring one of these suicidal egoists. You mean I get to pay you under market wages (because you’re desperate to find a company to give yourself over to), without much equity (because you assume Company is so great that any equity is worth it), and you’ll still work 60+ hour weeks? sold!

These people, by giving themselves over so completely to being a part of their employer, are causing several problems. There is a whole world of thorny problems about what it could possibly mean about an individual to do this voluntarily, but I’m not actually interested in that — I suspect the number of people for whom this is an emotionally healthy decision approaches zero, but I’m not worried about prescribing anyone’s behaviour for their own wellbeing. I’m interested in the cultural problems the existence of these people causes within the tech industry. Most notably, only a certain kind of person can realistically suffer corporate ego death. There have to be no urgent alternative pressures on your time, there has to be no significant financial risk, and there has to be no conflicting identity worth preserving. Finally, you have to be treated well enough, or at least perceive yourself as treated well enough, to be comfortable with the subsumption. Let’s take these in order.

No Alternative Obligations

It is impossible for, say, a single parent, or the elder child of a disabled sibling, or a child caring for an ill family member to undergo this ego death. There is absolutely no way to spend the time and energy required to nurture another person and still be willing to subsume your identity within your company’s. Your employer would never care for your ill mother, and while you are doing so you cannot possibly continue thinking of yourself as an extension of the company.

Even someone with serious hobbies cannot do this – if you spend 3 evenings a week with your old college buddies jamming in a practice space, that is enough forced external interaction that it’s not going to work out for you to undergo ego death. If you do, you won’t be able to have normal interactions with them, and the band will fall apart. Or say you spend a lot of time drawing — no one wants to read a comic book about how great your company is, so you have to make your art in a different mindset than you make your living. Or maybe you play on a rec baseball team – your colleagues don’t care about your season’s record, and your baseball teammates don’t care about your company’s NPS, so you cannot become completely absorbed in either.

No Significant Financial Risk

This one is a little trickier. I use the word “risk” deliberately here. There can be very real financial downsides (such as taking a dramatically under-market rate to work at a startup), but there cannot be real, existential risk. If you are working at a job that puts you at real risk, the kind of risk where you could end up homeless, or your children could end up without school supplies, or you can’t make good on your student loans, you are necessarily going to spend an awful lot of mental energy trying to improve your station. You have to be in a situation where any financial downsides are not actual risks in order to become one with your employer.

This can mean different things to different people – perhaps you’re sharing a bedroom with a coworker, but you have a security net if things go bad. Maybe you have a network that you are very confident could get you another job within the month if you lost your job or the company went under. Maybe you’re lucky and the company you’re working for is actually paying you fair wages, and so your opportunity cost is in career/skills advancement rather than in dollars this year. But in any case, if there were any serious risk involved, it would be cognitively impossible to truly devote yourself to your company.*

No Conflicting Identity Worth Preserving

Now this one is almost a tautology. You won’t subsume your identity to a company’s if you have an identity that is more valuable to you than what you would gain by said assimilation. In the last two points, the blocker to ego death was, basically, cognitive dissonance. In this one it’s simple disinterest. If I am an interesting person, with my own identity forged from my values, my background, my interests, etc, then why would I need to adopt someone else’s, or, weirder still, an organization’s? I wouldn’t. I would continue being my self, and include that a facet of myself is my career or my success at a particular job.

My identity has to be either very flimsy or already pretty easily aligned with corporate identity in order to go through this ego death. The former would be people who simply don’t have much definition in their life, nothing going on to build their identity around, as covered above – people who are ultimately uninteresting. The latter would be people who come into their careers already believing that being the best possible employee is a valid identity, or people who align themselves very strongly with a particular aspect of the job they’re doing – if you have bought into all the timeless “nerd” stereotypes, then perhaps “programmer” is an identity you wish to claim as your own, and it’s easy to let “programmer@Company” stand in for “Alexander Corwin, professional programmer.” I imagine this can go for other careers about which people get passionate, but I am not qualified to speak to that.

Perceived Good Treatment

If you feel you are treated poorly by your employer, you are not going to become an extension of them.** You cannot wholeheartedly endorse and represent an employer who you privately feel bad about. I mentioned above that a hiring manager is going to be very interested in underpaying and exploiting these sorts of identity-less waifs, so how could they possibly ever feel they are treated well?

It turns out that there are many people who aren’t in it for the money. They seriously believe that the money isn’t really that important. They want to feel special, and respected, and like they’re in a fun, collegial group with peers. A person decides, “I identify as a programmer.” Then they went to feel connected to “programmer culture,” which, it turns out, has been cynically defined as drinking a lot of soda, loving programming more than anything else, wariness of “business people,” working unconventional hours, &c. So if you tell someone who is or wants to be a part of this “culture,” that you’ll pay them $20,000 less than they’re worth, but it’s okay if they come in at 11:30 and can drink free Jolt cola to the tune of $500 a year, they interpret that as special treatment. Being made to feel like you’re “one of the group” is the real perk here, not the money or the hours or the career advancement.

So. What sort of person fits this profile: No meaningful external obligations, no serious financial risk, no conflicting self-identity, and a deep belief that Jolt cola is preferably to money in the bank?

The answer, of course, is: overwhelmingly, young white men, especially those who were bullied for being “nerds” when they were younger. Of course, some other people have the exceptional privilege it takes to be in this group, and a few of those are even deficient enough in self-respect to undergo ego death. So we have some true believer types outside of the group of young white men, and we get people who are happy to let their entire cultural background go at the chance to fit in with the group.

Consequences

I think I’ve spilled enough ink making my point about the homogeneity of the group capable of corporate ego death. I mentioned a couple of times before that people who fit this profile make hiring managers’ eyes light up with dollar signs. I think it should be clear why: They will work more, and work harder, for less money. Further, they will go about shilling for your company – telling their friends to sign up, retweeting your blog posts, boasting about your TechCrunch writeup – and thus net you free brand recognition and save costs on recruitment sourcing!

So let me get to the reason for spelling all this out. The existence of this group of suicidal egoists incentivizes companies to hire from it. There is no rational*** business reason to hire outside of it when you don’t have to. This means that startup teams end up being small groups of young, white, male programmers who identify themselves with their roles too deeply. These people then go on to do their best to hire others like them. This in itself is a serious problem, but the worst part of it is what happens when someone who doesn’t fit the profile sneaks in.

The entire development team has built itself up around this shared ego subsumption, and now we get someone who isn’t down for that. How do you think the group is going to react? This isn’t a group of professionals who are doing good work 40 hours a week, interfacing with same; this is a club where membership is defined not merely by employment at Company, but by religious devotion to Company. So a person who comes in and works 40 hours a week, no matter how well they perform, is going to be ostracized and isolated, subtly or not. This person will be left out of important meetings (maybe the meeting is held at 6pm, or at a bar, and your new employee who has real obligations isn’t able to make it, or maybe your new employee’s absence is justified because they’re not going to be working on this new big initiative anyway, since they’re not devoted enough, or whatever). Over time, the exclusion is going to make it very clear that this new, non-zealous employee is persona non grata, and if they are allowed to stay here, they will be marginalized and not allowed to work on the best projects, not allowed to grow into new and better things, and their input will not be valued as highly as those of the True Believers.

And here I’m totally skipping the obvious: if this new person is, say, female, or black, or otherwise visibly different, there are going to be unpoliced biases at play on top of all that. If your employees are talking and say, “well, Steve doesn’t need to be in this meeting; he’s not really a team player,” someone might actually point out that Steve’s last job used this new technology extensively. If, however, we have the same conversation about Sally, there’s a whole extra level of anti-female bias to contend with on top of the already exclusionary club dynamic of the group, and the odds of anyone standing up for her plummet.

So What Do We Do About It?

I don’t know what we can do about it on a large scale. Many groups of people have opportunities to remedy this, but few of them are economically rational, at least in the short term. If hiring managers across the valley formed a secret cabal to deliberately increase diversity and stop treating their employees like children, that would do wonders, but one or two of them is just a drop in the bucket. If VCs stopped funding companies by people who have networks full of young, white, male True Believers, that might help. If programmers all stood up and said, “Fuck you, I’m an adult. Give me the salary I deserve and keep your fucking free lunches,” that would make some serious waves. But for each programmer who does this individually, all you do is dramatically narrow the range of companies you’re willing to work for.

One thing you can do is, if you find yourself suffering ego death, or trying to camouflage yourself amongst those who have, is just be the voice who stands up for including people outside the club. If the first person who joins and remains their own person has a positive experience working with your team, then they’ll start to provide a counterbalance. They will stay on, and the next person like this that you hire will have a kindred soul, and slowly the tides will shift until it’s normal to be a whole person who also works at Company. I think this is probably the best most of us can do, at least for now.

* I feel obligated to point out that this isn’t totally true. In a way analogous to how people end up totally devoted to abusive partners, you can end up totally devoted to an abusive company – one who promises that promotion in six months, but then keeps giving you a bad performance review, etc. However, I’m not focusing on this sort of dynamic here.

** c.f. above note

*** [short-term]

Posted in social justice, software | 1 Comment

Infinite Jest

Today we are continuing an ancient tradition that almost certainly zero of my current readers are aware of.

I recently finished Infinite Jest (It took me about 2 months — holy shit). It was awesome and interesting and whatever. This is not the time for analysis or criticism. This is the time for great quotes.

I’d tell you all you want and more, if the sounds I made could be what you hear.

The insect on the shelf was back. It didn’t seem to do anything. It just came out of the hole in the girder onto the edge of the steel shelf and sat there. After a while it would disappear back into the hole in the girder, and he was pretty sure it didn’t do anything in there either. He felt similar to the insect inside the girder his shelf was connected to, but was not sure just how he was similar.

He had not sat down and outright bold-faced lied to her, it had been more of an impression he’d conveyed and nurtured and allowed to gather its own life and force. The insect was now entirely visible.

Well how about you either give me electro-convulsive therapy again, or give me my belt back. Because I can’t stand feeling like this another second, and the seconds keep coming on and on.

Everyone should get at least one good look at the eyes of a man who finds himself rising toward what he wants to pull down to himself.

This is also how not to fear sleep or dreams. Never tell anyone where you are. Please learn the pragmatics of expressing fear: sometimes words that seem to express really invoke.

It was when her hands started to tremble during this part of the cooking procedure that she’d first known she liked this more than anyone can like anything and still live.

‘So then at forty-six years of age I came here to learn to live by cliches,’ is what Day says to Charlotte Treat right after Randy Lenz asked what time it was, again, at 0825. ‘To turn my will and life over to the care of cliches. One day at a time. Easy does it. First things first. Courage is fear that has said its prayers. Ask for help. Thy will not mine be done. It works if you work it. Grow or go. Keep coming back.’

It’s like he’s frozen on this anxiety, unable to move on to more advanced anxieties. He can’t see any way past this.

‘I am deformed with beauty.’

    (This is why, maybe, one Subject is never enough, why hand after hand must descend to pull him back from the endless fall. For were there for him just one, now, special and only, the One would be not he or she but what was between them, the obliterating trinity of You and I into We. Orin felt that once and has never recovered, and will never again.)

And about contempt, it is about a kind of hatred, too, along with the hope and need. Because he needs them, needs her, because he needs her he fears her and so hates her a little, hates all of them, a hatred that comes out disguised as a contempt he disguises in the tender attention with which he does the thing with her buttons, touches the blouse as if it too were part of her, and him. As if it could feel. They have stripped each other neatly. Her mouth is glued to his; she is his breath, his eyes shut against the sight of hers. they are stripped in the mirror and she, in a kind of virtuoso jitterbug that is 100% New World, uses O.’s uneven shoulders as support to leap and circle his neck with her legs, and she arches her back and is supported, her weight, but just one hand at the small of her back as he bears her to bed as would a waiter a tray.

— here pretend i typed in pages 695-698 entire

It now lately sometimes seemed like a kind of black miracle to me that people could actually care deeply about a subject or pursuit, and could go on caring this way for years on end. Could dedicate their entire lives to it. It seemed admirable and at the same time pathetic. We are all dying to give our lives away to something, maybe. God or Satan, politics or grammar, topology or philately — the object seemed incidental to this will to give oneself away, utterly. To games or needles, to some othe rperson. Something pathetic aboutl it. A flight-from in the form of a plunging-into. Flight from exactly what? These rooms blandly filled with excrement and meat? To what purpose?

Fackelmann claimed to have started a Log just to keep track of Kite’s attempted pickup lines — surefire lines like e.g. ‘You’re the second most beautiful women I’ve ever seen, the first most beautiful woman I’ve ever seen being form British Prime Minister Margaret Thatcher,’ and ‘If you came home with me I’m unusually confident that I could achieve an erection,’ and said that if Kite wasn’t still cherry at twenty-three and a half it was proof of some divine-type grace.

And to be sure there are many more — most every page is full of fun and interesting prose. These are just the ones I wrote down on the days I had a pen and the energy to mark pages.

Posted in books | Leave a comment

See Alexander Overwhelmed By Pumpkin Spice (PSL Challenge Day 8)

Hello, dear readers. I was on vacation last week to see my family and meet my new nephew (who is v cute, in a larval sort of way). As you know, I make a point not to subject myself to PSLs while on vacation, so I did not. I hope you enjoyed Emily’s defense of the PSL in the interim.

Today I returned to work to find a surprise “present” waiting for me, courtesy of my coworkers:

photo(1)

Thanks, coworkers. I mean it. Really.

Anyway, thus inspired, I went off this morning to grab myself a latte. It’s been a while since I had one, and I am once again assaulted by its acridity. It’s funny how the drink feels so smooth and creamy (I suppose that’s kind of what a latte is?) and yet has a violent, offensive taste once the liquid drains down your gullet and all that remains is the aftertaste. Truly foul stuff.

I was starting to feel that perhaps my job was almost done – the last PSL or two have been painless endeavours, very nearly pleasant. But no; my tolerance has receded and I am starting almost anew. Pity me, I implore you. Pity me.

A point worth making here is that it is not, in any reasonable sense of the word, fall in San Francisco. It has been in the 80s since I returned, and perhaps crisper weather, more suited to denim jackets than rolled up hems, would provide the environmental context necessary for the proper enjoyment of these things. But alas, we must play the cards we are dealt, and one can only have smoothies for lunch when one is not labouring to bring fine reporting content to one’s readers.

Posted in PSL Challenge | Tagged , | Leave a comment

My PSL by Emily Johnson

Hi, I’m Emily, and I am an unashamed consumer. I am a slave to commodity fetishism. And I have recognized that fact but I’ve never moved past it. I don’t even know if I want to move past it. Of course I will be moving continents and I’m sure living in some undetermined area of Western North Africa for two years may have some effect on my position in relation to capitalism, but that remains to be seen. *Googles “Are there Starbucks in Morocco.”* It appears there are at least two. But that’s beside the point.

In a weird way, I kind of wanted to dislike the PSL. Maybe just to fit in. Maybe I too wanted a sip of the pumpkin spice flavored Haterade. Maybe I’d start to critique this beloved fall favorite and in doing so recognize the error of my Starbucks-loving ways. Today (read: last night), after not seeing the inside of a Starbucks for at least a week, I drove from a particularly chatty therapy session to the nearest (maybe?) Starbucks that was also conveniently located en route to my next planned fetishistic endeavor: dinner at Piada. I’m going to take a moment to explain Piada, because you all deserve an explanation. Piada is a lot like Chipotle, but instead of filling burritos with rice, beans, meats, cheese, and sometimes veggies and guacamole, here at Piada they fill burritos with Pasta. Their slogan is “Italian Street Food.” I’ve never been to Italy. But I’ve met a few Italians and have a good friend who studied abroad there, none of whom I feel like contacting about the validity of Piada’s claim. Piada would almost certainly be more truthfully categorized as an “Italian Dumpster Dive” joint. Whatever, I’m getting the Kale detox side dish.

I didn’t really want to order a Pumpkin Spice Latte. These days I usually get a Grande iced coffee sweetened with whole milk. If you know me at all, you know that I’ve made huge strides in my life by gaining control over my control-freak-ness when it comes to food. In the past I rarely ordered food from any restaurant (even fast food) without adding about 5 extra instructions. For example, before my pal Caleb showed me the light about Grande iced coffees, I used to order a Grande Caramel Macchiato on ice with whole milk, an extra shot of espresso, half the regular amount of syrup, whipped cream, and if I was in the mood either caramel drizzle or Starbucks signature sea salt topping to finish it off. This was want I wanted. This was what was going to make me happy after I spent the $5+ and pissed off everyone behind the counter at various Starbucks locations around campus.

This is a blog post about Pumpkin Spice Lattes. This particular Pumpkin Spice Latte is a ‘Tall’, which (in Ohio) cost me $3.85. Except it didn’t cost me anything because I was given a $15 Starbucks card for my birthday which I finally loaded onto my personalized Starbucks gold card today. What is a Starbucks gold card you ask? It’s marketing scheme with my name on it. Anyway, this Pumpkin Spice Latte. I usually get all my Starbucks drinks iced. If I’m going to have a hot cup of coffee (preferably with sugar and half & half) I can make it my damned self. If I’m going to pay the big bucks, I want something that I cannot outdo or even replicate at home. And if you’ve ever tried making your own iced coffee in under 10 minutes then I’m sure you can sympathize. It’s fucking gross. So I let the people at Starbucks (who apparently receive pretty decent benefits) do the dirty work for me.

But this Pumpkin Spice Latte. I ordered it hot. “Is whipped cream OK?” I can think of very few instances when whipped cream would not be okay. Perhaps on my baked potato, or on a salad. Otherwise, yes, it is okay. I then proceeded to inquire about that “stuff they sprinkle on top.” I learned that it is not cinnamon (or at least not only cinnamon). It is “pumpkin spice.” How could I refuse? I asked for Whole Milk. That’s a very important part of ordering successfully at Starbucks. I sympathize with the fictional character Ron Swanson who hates liars and skim milk. Skim milk, he says, is just water lying about being milk.

So, as I said, I was feeling cynical. My collegiate best friend and heterosexual soulmate SF had days earlier been so repulsed by her hot Pumpkin Spice Latte that she couldn’t even bear the last few gulps. Please keep in mind she and I once concocted an elaborate plan that involved preserving cans of the original recipe Four Loko in ‘Loko Time Capsules’ to be opened on one fateful night. That’s right. The girl who so loved Four Loko, which I think we can all agree tastes like various chemicals (albeit delicious God-sent chemicals), could not finish her PSL.

I pulled into an empty parking space and rolled my windows down to feel the crispness of the 8PM fall air, to set the mood, if you will. I opened the lid. This drink is so… cute? Maybe it’s the pink cardboard hand buffer.

unnamed

I sipped it.

Ah, there it is.

This PSL is the French Vanilla cappuccino my mom used to get from any given gas station in the late 1990s, somehow way too hot at the top but chilled once you reach the bottom. I took another sip. I felt the slight but striking burn in my throat that this blog’s master pointed out in an earlier post. I think it’s the topping. The “pumpkin spice.” I suppose that could lead one to worry about the contents of this cup and what it is doing to their insides, but I devoured the now thinning whipped cream spice topping and got to the real meat of my beverage. I would like to make a comment (read: correction) on Alexander’s earlier characterization of the PSL’s color. This PSL, my PSL, is the exact color of nutmeg. It is a warm slice of zucchini bread with just the right amount of butter. It is hard cinnamon Christmas tree ornaments. It is Thackery Binx calling my name at the start of [when did it become everyone’s favorite] everyone’s favorite holiday film.

It is not pumpkin pie. It is not supposed to be pumpkin pie. It is not even supposed to be pumpkin pie flavored. It is overpriced. Everything is overpriced. I needed the caffeine for my hour-and-a-half drive back to Starbucksless land, but I could have gotten the caffeine from any number of places, including taking it in the much more economical pill form. So why did I go to Starbucks? Well, for one, I wanted to take a moment to think through a ritual I perform almost weekly (probably biweekly, sometimes monthly). I also kind of wanted to use this as an excuse to get something other than iced coffee from Starbucks for a change of pace. I wanted to earn another star on my gold card towards a future reward beverage. I wanted to use my gift card, because I am a consumer at heart. And I wanted to give the PSL another shot, for all you readers out there who just weren’t buying what the cynics were selling. And I’m glad that I did. The only thing I’ve come to regret throughout this whole ordeal is that I don’t know of a song wherein Drake uses the lyrics “pumpkin spice.” THINK OF THE THINGS THAT DRAKE COULD DO WITH THE WORDS “PUMPKIN SPICE.”

In conclusion, if you do want a pumpkin pie flavored coffee (particularly pumpkin pie flavored iced coffee) try McDonald’s. If you “don’t do McDonald’s” fuck you, this blog post wasn’t for you in the first place.

Posted in PSL Challenge | Tagged , , , , | Leave a comment

Return of PSL Challenge (Day 7)

I wasn’t feeling up to PSLs this week, so it took me until today to get one – I apologize.

I also don’t feel up to blogging about them. What more is there to say? I have gotten over the worst of it – today only the first sip really even registered as gross – and now I am left with an altogether quotidian experience. Only they do still cost $4.15 which is just fucking ludicrous.

I don’t know that I can say I’ve won the challenge – I don’t like the things, exactly. I definitely don’t despise them anymore either, though. I’ll keep you posted as I continue the consumption, but I don’t think there will be much more drama.

Watch out for an upcoming blog post, In Defense of the Pumpkin Spice Latte (And Starbucks In General)* by a self-described Starbucks apologist.

*I made up that title; our guest writer can name it whatever she wishes.

Posted in PSL Challenge | 2 Comments