Software developer, racing fan
724 stories

See the Botanic Garden’s model train station display

2 Comments and 3 Shares

From November 2018 through New Year's Day, the US Botanic Garden featured a unique display of model train stations, all built from stems, twigs, leaves, and other plant parts. Just in case the transit nerd in your life missed it, here's a rundown of the most interesting models.

Washington's Union Station was prominent:

DC. Image by the author.

Here's New York's Grand Central in its entirety, along with a suburban counterpart, Cannondale's Metro-North station:

New York. Image by the author.

Cincinnati Union Station, one of America's art deco classics:

Cincinnati. Image by the author.

Detroit's Michigan Central Station, soon to be rehabbed:

Detroit. Image by the author.

Salt Lake City's Union Pacific Depot:

Salt Lake City. Image by the author.

Los Angeles' Union Station:

Los Angeles. Image by the author.

It wasn't just big city stations on display. Smaller, less known stations also got models. Here's the Santa Fe Depot in Shawnee, Oklahoma:

Shawnee. Image by the author.

Smaller stations from around DC were also included, like the Point of Rocks, Maryland B&O Depot:

Point of Rocks. Image by the author.

And Ellicott City:

Ellicott City. Image by the author.

The diverse exhibit also included this model of New York old Penn Station's interior, carved out of a tree:

Penn Station. Image by the author.

And although train stations were the theme this year, every holiday season the Botanic Garden displays its collection of National Mall landmarks, including the US Capitol here:

US Capitol. Image by the author.

You'll have a chance to see the DC buildings again, since the Botanic Garden displays those each December. As for the more distant train stations: A garden employee tells me the model makers will collect their creations, and some will be exhibited at other locations around the country.

Check out the full list of train stations featured this year.

Top image: New York's Grand Central Terminal, made out of twigs and other plant parts. Image by the author.

Comment on this article

Read the whole story
12 days ago
The same artist is on display at the Lauritzen Gardens in Omaha, Nebraska, at least during the summer months. (it's an outdoor display)
Earth, Sol system, Western spiral arm
11 days ago
Share this story
1 public comment
12 days ago
This was a great trip out on the 25th
Washington, DC

Creative Motivation and Agility

1 Share
In 2009, the non-fiction book “Drive” written by Dan Pink was published. The book summarized research demonstrating that creative workers are not motivated so much by financial incentives or other such explicit motivations, but by intrinsic factors.

The three primary intrinsic factors identified are:

  • Autonomy - The urge to direct our own lives 
  • Mastery - The desire to get better at something that matters 
  • Purpose - The yearning to do what we do in service of something larger than ourselves 

We want motivated teams. We want to be on motivated teams. We want to be motivated ourselves, but a studio’s culture and process can often prohibit it.

This is where the agile values and Scrum practices come into play: 

  • Autonomy - The purpose of self-organization is to give the people closest to the work autonomy in taking greater ownership, as the become ready for it, over more and more of their work. At first it might be how they plan and track their Sprint. Later, it’s how the team membership is managed and the practices they use to create an increment of the game. 
  • Mastery - By giving the team the freedom decide “how” they implement a Sprint, they are given permission to explore better ways of working. For example, when our level artists were given the freedom to explore new ways of creating levels, they eventually found methods that reduced level creation time in half. Note: the challenge to doing this wasn’t with them, but with the lead artists who had a problem letting their people do things “their own way”. For some reason they fought to have the less efficient level creation practices restored. 
  • Purpose - By forming teams that are aligned around a feature area of the game, rather than a discipline silo, developers are far better connected to the purpose of their work. It’s easier to understand if what you are doing helps improve the game when your Sprint goal is to demonstrate an enhanced feature or mechanic than to simply accomplish all the assigned tasks in a tracking tool that contributes to something you’ll see in the game a month or so later. 
This all sounds great, but it’s very hard to implement in a culture that doesn’t place a lot of value on intrinsically motivated developers. The signs of this are:

  • Developers are largely seen as “fungible”. E.g all animators are equally weighted on a spreadsheet or tracking tool, where skill and mastery could for little. 
  • The idea that more developers can be added to a team to make the team more effective. 
  • Management exists to define how developers do their work and to find and address the problems that arise. 
  • The purpose of what is being done exists in the design document and if developers want to know the purpose of what they are doing, they simply need to “read the doc”.
  • Etc. Etc. 
Another hard part is that motivation can’t be forced on developers. They have to find it within. The role of leadership is to help create the conditions for intrinsic motivation to flourish. I’ve worked with some developers that have been so beat up and burnt out by bad leadership that they refuse to extend themselves again. They don’t want to be disappointed again (what to do in these cases is the subject of another article TBD).

Game development leaders should always be asking themselves: “how can I help improve upon these intrinsic motivators?” A core part of this practice is improving the feedback loops so that increases in autonomy, mastery and purpose are quickly reinforced and that mistakes are not punished but initiate a conversation to highlight what valuable thing we learned from the experience.

The ultimate joy, as a leader, comes from this cycle being taken over by the team. I’ll leave you with one warning: When your teams start outperforming your expectations, you might get promoted away from them.
Read the whole story
13 days ago
Share this story


4 Comments and 11 Shares
The good news is that if the number of work and friend relationships you have exceeds your willingness to do the bare minimum to keep up with everyone's life events and stuff, one way or another that problem eventually solves itself.
Read the whole story
14 days ago
Share this story
4 public comments
14 days ago
This might be the most relatable xkcd ever.
Moses Lake, WA
14 days ago
I feel personally attacked by this comic.
14 days ago
The good news is that if the number of work and friend relationships you have exceeds your willingness to do the bare minimum to keep up with everyone's life events and stuff, one way or another that problem eventually solves itself.
14 days ago
The good news is that if the number of work and friend relationships you have exceeds your willingness to do the bare minimum to keep up with everyone's life events and stuff, one way or another that problem eventually solves itself.

Towards a theory of software development expertise


Towards a theory of software development expertise Baltes et al., ESEC/FSE’18

This is the last paper we’ll be looking at this year, so I’ve chosen something a little more reflective to leave you with (The Morning Paper will return on Monday 7th January, 2019). The question Baltes and Diehl tackle is this: “How do you get better as a software developer?” What does expert performance look like?

We present a first conceptual theory of software development expertise that is grounded in data from a mixed-methods survey with 335 software developers and in literature on expertise and expert performance…. [the theory] describes central properties of software development expertise and important factors influencing its formation.

In essence, ask a bunch of practitioners what they think, use a disciplined coding scheme to interpret the answers (a “grounded theory”), and then layer in what we know about expertise and expert performance in general. The end result is a “conceptual theory” that shows the various contributors to expert performance and the relationships between them. “Software Development” in the current work is synonymous with “programming.”

To make the paper come alive you need to engage with it a little: Does the theory developed by the authors make sense to you? What’s missing? How would you weight the various factors? How could you apply this on a personal level in 2019? How could this be applied in your team or organisation to raise the collective level of expertise next year?

Software developers can use our results to see which properties are distinctive for experts in their field, and which behaviors may lead to becoming a better software developer…. Employers can learn what typical reasons for demotivation among their employees are, and how they can build a work environment supporting the self-improvement of their staff.

A grounded theory

The first phase involved sending a questionnaire to users active on both GitHub and StackOverflow between Jan 2014 and October 2015. The questionnaire was sent to 1,000 individuals, and received 122 responses.


The grounded theory (GT) coding exercise was then used to generate a theory from the qualitative data:

… the process of coding assigns “summative, salient, essence-capturing” words or phrases to portions of the unstructured data. Those codes are iteratively and continuously compared, aggregrated, and structured into higher levels of abstractions, the categories and the concepts. This iterative process is called constant comparison.

(Aside: it strikes me that the body of work on grounded theory development might be very interesting to study from the perspective of domain-driven design and the building of a ubiquitous language.)

After much distillation, the model comes out looking like this:

The grounded theory describes software development expertise as a combination of a certain quantity and quality of knowledge and experience, both general and for a particular language. The work context, behavior, character traits, and skills influence the formation of expertise, which can be observed when experts write well-structured, readable, and maintainable source code.

You’ll know an expert programmer by the quality of the code that they write. Experts have good communication skills, both sharing their own knowledge and soliciting input from others. They are self-aware, understanding the kinds of mistakes they can make, and reflective. They are also fast (but not at the expense of quality).

Experience should be measured not just on its quantity (i.e., number of years in the role), but on its quality. For example, working on a variety of different code bases, shipping significant amounts of code to production, and working on shared code bases. The knowledge of an expert is T-shaped with depth in the programming language and domain at hand, and a broad knowledge of algorithms, data structures, and programming paradigms.

A preliminary conceptual theory

The next phase was to take the grounded theory and embed it within the existing literature on expertise and expert performance, for which the main resource used was ‘The Cambridge Handbook of Expertise and Expert Performance’.

This handbook is the first, and to the best of our knowledge most comprehensive, book summarizing scientific knowledge on expertise and expert performance.

The result of this process is a preliminary conceptual theory that looks like this:

Acquiring expertise is not exclusively a cognitive matter, personality and motivation influence behaviours that may or may not lead to improvements of expertise. The work context, including team members, managers, and customers, can also influence the behaviour of a developer, and this can also vary according to the type of task being undertaken.

Reaching true experts levels requires deliberate practice combined with monitoring, feedback, and self-reflection.

Deliberate practice

Having more experience with a task does not automatically lead to better performance. Research has shown that once an acceptable level of performance has been attained, additional “common” experience has only a negligible effect, in many domains the performance even decreases over time. The length of experience has been found to be only a weak correlate of job performance after the first two years.

Deliberate practice is required to become an expert: prolonged efforts to improve performance while continuously increasing the difficulty and centrality of development tasks.

…studies have shown that deliberate practice is necessary but not sufficient to achieve high levels of expert performance— individual differences also play an important role.

Monitoring, feedback, and self-reflection

Deliberate practice requires a way of monitoring performance, which could be e.g. from a teacher, coach, mentor, or peer: “the more channels of accurate and helpful feedback we have access to, the better we are likely to perform.“. Monitoring and self-reflection also influence motivation and consequently behaviour.

The full conceptual theory

For the third and final phase the authors sampled two additional programmer populations, active Java developers, and very experienced developers, with the goal of further elaborating and refining the categories and relationships in the theory.

The final resulting model looks like this:


The most frequently cited tasks that an expert should be good at were designing software architecture, writing source code, and analysing and understanding requirements. Within the software architecture task, understanding modularisation and decomposition were frequently mentioned.

In terms of personality traits, experts should be open minded and curious, be team players, and pay attention to detail. Patience and self-reflection were also cited. In terms of general skills, “problem solving” came top of the list under which analytical thinking, logical thinking, and abstraction/decomposition all feature. Another important skill is being to assess trade-offs.

Mentors should be guiding, patient, and open-minded. Participants were most motivated by mentors that posed challenging tasks.

To facilitate continuous development of their employee’s software development skills, (employees suggested that) employers should:

  1. Encourage learning (e.g. training courses, conference attendance, and access to a good analog or digital library)
  2. Encourage experimentation (e.g. through side projects and by building a work environment that is open to new ideas and technologies)
  3. Improve information exchange between development teams, departments, and even companies. E.g. lunch and learn sessions, rotation between teams, pairing, mentoring, and code reviews.
  4. Grant freedom (primarily in the form of less time pressure) to allow developers to invest in learning new technologies or skills.

In contrast, non-challenging or routine tasks result in demotivation. Other causes of performance decline over time are lack of a clear vision or direction, absence of reward for quality work, stress in the work environment, and bad management or team structure.

Your turn

How will you ensure that in 2019 you grow your expertise, and not simply add another year of (the same or similar) ‘experience’ ?

See you in January! Thanks, Adrian.

Read the whole story
17 days ago
Share this story

Welcome to Our Modern Hospital Where If You Want to Know a Price You Can Go Fuck Yourself

5 Comments and 17 Shares

Welcome to America General Hospital! Seems you have an oozing head injury there. Let’s check your insurance. Okay, quick “heads up” — ha! — that your plan may not cover everything today. What’s that? You want a reasonable price quote, upfront, for our services? Sorry, let me explain a hospital to you: we give you medical care, then we charge whatever the hell we want for it.

If you don’t like that, go fuck yourself and die.

Honestly, there’s no telling what you’ll pay today. Maybe $700. Maybe $70,000. It’s a fun surprise! Maybe you’ll go to the ER for five minutes, get no treatment, then we’ll charge you $5,000 for an ice pack and a bandage. Then your insurance company will be like, “This is nuts. We’re not paying this.” Who knows how hard you’ll get screwed? You will, in three months.

Fun story: This one time we charged two parents $18,000 for some baby formula. LOL! We pull that shit all the time. Don’t like it? Don’t bring a baby, asshole.

Oh, I get it: you’re used to knowing a clear price for products and services. The difference is that medicine is complicated and scary — unlike, say, flying hundreds of people in a steel tube across an ocean, or selling them a six-ounce hand-held computer that plays movies and talks to satellites. Anyway, no need to think this through rationally while you’re vulnerable, right? Your head is really gushing, ma’am.

Sure we could start posting prices and discussing our costs, but then it turns into a public debate about transparency, and people get all huffy and self-righteous about $15 pills of Tylenol, $93 to turn on a single goddamned light, or $5,000 worth of sanitary gloves. We’d rather just mail you a bill later for $97,000, full of obscure medical codes you can’t understand. Oh, you like understanding things? Here, maybe this will help:

Hit your head, and talk to a doctor for one minute? $2,500, you idiot.

Want your pesky appendix out? That’ll probably be $33,611. Or it could be $180,000. Shrug. Don’t know. Don’t care.

Need an hour in the ER? How does $15,000-$50,000, sound? Hint: we don’t give a piss how it sounds you stupid fucking helpless human wallet.

Our medical system strikes you as “insane?” Well, you can’t do much about that now. Except of course to go fuck yourself. Yes, ma’am, as a matter of fact, we do have a special room where you can go fuck yourself. Yes, it does cost money to use the room, and no I cannot tell you how much. Want a hint? It’s between $1 and $35,000 per minute. Will you be reserving the go fuck yourself room?

Oh, you think you think we’re cruel and illogical? Well, no one forced you to come here. It’s your decision, you head-injured meatball. Feel free to go out into the parking lot and just die. I suggest you do that out in section F. Try to lean your corpse against a light pole. Our dead body disposal fee is $3.75 and is not covered by your shitty, confusing, out-of-network medical plan.

So, will you be dying in our parking lot today, you pathetic, impotent, walking insurance code? Okay, great! Your husband will get a bill for that soon, and if he doesn’t like it, he can fuck himself too.

Read the whole story
40 days ago
41 days ago
Share this story
5 public comments
40 days ago
I am never ever going back
40 days ago
Thankfully, dental procedures are the opposite, in my experience. I usually get provided my out of pocket expenses when I'm being told about the work that should be done.

If only medical could catch up to what's done on the dental side...
41 days ago
number one reason i might move away from the US.
New York
40 days ago
My wife is having a procedure done that isn't covered by insurance. She was referred to a place that was going to charge $1,600. She shopped around and found a different place that will do it for $4-500. She had to go back to her referring physician to have a second referral for the procedure sent to the other location. On top of that, my wife and her referring physician are coworkers, so it is not as though her doctor was trying to screw her over. Doctors just aren't aware of the costs for procedures or the differences in cost between facilities. That there can be a 3x cost difference between providers, even in the same region, for the exact same procedure is ridiculous.
40 days ago
thanks for sharing that. I feel like we all have some version of these stories at this point. a dentist that gives you a bunch of care you don't really need. Or an insurance company rep that says something is covered but then it isn't, and there just doesn't seem to be any real recourse unless you feel like litigating. The other thing that surprised me is that it seems a lot of americans don't realize it doesn't have to be like this, plenty (arguably most?) other countries don't have these issues.
41 days ago
The only thing that is wrong about this piece is that a lot of the time people don't have a choice and are taken against thier will, unconscious or not, and they still get the bill.
41 days ago
Yet again, McSweeney's hits it on the head. (no pun intended)
Louisville, Kentucky
41 days ago
That'll be $150 or $15,000. Don't know. Don't care.

Enthusiasts vs. Pragmatists: two types of programmers and how they fail


Do you love programming for its own sake, or do you do for the outcomes it allows? Depending on which describes you best you will face different problems in your career as a software developer.

Enthusiasts code out of love. If you’re an enthusiast you’d write software just for fun, but one day you discovered your hobby could also be your career, and now you get paid to do what you love.

Pragmatists may enjoy coding, but they do it for the outcomes. If you’re a pragmatist, you write software because it’s a good career, or for what it enables you to do and build.

There’s nothing inherently good or bad about either, and this is just a simplification. But understanding your own starting point can help you understand and avoid some of the problems you might encounter in your career.

In this post I will cover:

  1. Why many companies prefer to hire enthusiasts.
  2. The career problems facing enthusiasts, and how they can solve them.
  3. The career problems facing pragmatists, and how they can solve them.

Why companies prefer hiring enthusiasts

Before we move on to specific career problems you might face, it’s worth looking at the bigger picture: the hiring and work environment.

Many companies prefer to hire enthusiast programmers: from the way they screen candidates to the way they advertise jobs, they try to hire people who care about the technology for its own sake. From an employer’s point of view, enthusiasts have a number of advantages:

  1. In a rapidly changing environment, they’re more likely to keep up with the latest technologies. Even better, they’re more likely to do so in their free time, which means the company can spend less on training.
  2. Since they’d write software for free, it’s easier to pay enthusiasts less money.
  3. It’s also easier to get enthusiasts to work long hours.
  4. Finally, since enthusiasts care more about the technical challenge than the goals of the product, they’re less likely to choose their work based on ethical or moral judgments.

But while many companies prefer enthusiasts, this isn’t always in the best interest of either side, as we’ll see next.

The career problems facing enthusiasts

So let’s say you’re an enthusiast. Here are some of the career problems you might face; not everyone will have all these problems, but it’s worth paying attention to see if you’re suffering from one or more of them.

1. Exploitation

As I alluded to above, companies like enthusiasts because they’re worse negotiators.

If you love what you do you’ll accept less money, you’ll work long hours, and you’ll ask less questions. This can cause you problems in the long run:

So even if you code for fun, you should still learn how to negotiate, if only out of self-defense.

2. Being less effective as an employee

Matt Dupree has an excellent writeup about why being an enthusiast can make you a worse worker; I don’t want to repeat his well-stated points here. Here are some additional ways in which enthusiasm can make you worse at your job:

  • Shiny Object Syndrome: As an enthusiast it’s easy to choose a trendy technology or technique for your work because you want to play with it, not because it’s actually necessary in your situation. The most egregious example I’ve seen in recent years is microservices, where an organizational pattern designed for products with hundreds of programmers is being applied by teams with just a handful of developers.
  • Writing code instead of solving problems: If you enjoy writing code for its own sake, it’s tempting to write more code just because it’s fun. Productivity as a programmer, however, comes from solving problems with as little work as needed.

3. Work vs. art

Finally, as an enthusiast you might face a constant sense of frustration. As an enthusiast, you want to write software for fun: solve interesting problems, write quality code, fine-tune your work until it’s beautiful.

But a work environment is all about outcomes, not about craft. And that means a constant pressure to compromise your artistic standards, a constant need to work on things that aren’t fun, and a constant need to finish things on time, rather than when you’re ready.

So unless you want to become a pragmatist, you might want to get back more time for yourself, time where you can write code however you like. You could, for example, negotiate a 3-day weekend.

The career problems facing pragmatists

Pragmatists face the opposite set of problems; again, not all pragmatists will have all of these problems, but you should keep your eye out to see if they’re affecting you.

1. It’s harder to find a job

Since many companies actively seek out enthusiasts, finding a job as a pragmatist can be somewhat harder. Here are some things you can do to work around this:

  • Actively seek out companies that talk about work/life balance.
  • When interviewing, amplify your enthusiasm for technology beyond what it actually is. After all, you will learn what you need to to get the results you want, right?
  • Demonstrate the ways in which pragmatism actually makes you a more valuable employee.

2. You need to actively keep your skills up

Since you don’t care about technology for technology’s sake, it can be easy to let your skills get out of date, especially if you work for a company that doesn’t invest in training. To avoid this:

3. Pressure to work long hours

Finally, you will often encounter pressure both from management and—indirectly—from enthusiast peers to work long hours. Just remember that working long hours is bad for you and your boss (even if they don’t realize it).

Programmer, know thyself

So are you an enthusiast or a pragmatist?

These are not exclusive categories, nor will they stay frozen with time—these days I’m more of a pragmatist, but I used to be more of an enthusiast—but there is a difference in attitudes. And that difference will lead to different choices, and different problems.

Once you know who you are, you can figure out what you want—and avoid the inevitable obstacles along the way.

It’s Friday afternoon. You just can’t write another line of code—but you’re still stuck at the office...

What if every weekend could be a 3-day weekend?

Read the whole story
41 days ago
42 days ago
Earth, Sol system, Western spiral arm
Share this story
Next Page of Stories