Fog Creek’s Ad Hoc Remote Work Policy, or, Working From Grandma’s House

September 12th, 2013 by Rich Armstrong

Not grandma.
Not grandma.


Once every few months someone walks into my office and says, “Hey, I’ve got this (reunion|wedding|grandparent). I’d like to figure out how to spend some more time with my family. Can I work remotely from my grandma’s house for a few days?”

I always said yes, and got pretty uneven results. When someone wasn’t productive, it was usually due to unforeseen circumstances that seemed obvious after the fact. So we started a list of things you’ll need for a short stint of working remotely. This list is a “policy” inasmuch as it represents all the things you need to do in order to be “covered” while working remotely for a short stint. If something foreseeable comes up that’s not on this list, then it’s our problem, not yours.

Two important things that this is list is NOT applicable to:

  • Working from home waiting for the cable guy or a mattress delivery. That all happens under your usual flexible work arrangement.
  • Going somewhere you’ve never gone before, like a cabin in Iceland or an apartment in Paris, where you don’t know what the infrastructure will be like. We’ll call this “working from Borneo”. We’re not against Borneo, mind you. It’s just not what we’re talking about here.

One thing this list is kinda applicable to:

  • Permanent remote work. After writing this all down, we realized that almost everything we’d recommend to the short stint people applies to people working remotely. We’re still learning from them, so might have more to say later.


  • A computer to work on. Duh.
  • “Approval” from your team lead. We’re not big on bureaucracy here, but this is just common courtesy.  Most of what you’ll have to do is covered below in “known availability”, but you should start with talking to your team lead.
  • An internet connection capable of easily handling a Google Hangout. Since we’ve opened up to remote workers, Hangouts have taken the place of conversations in the hallway and standups in someone’s office. Downstream is usually not the issue. Most basic internet plans are at least 5 mbps down, which is no problem. Being able to participate in a video conference usually means more that 1 mbps up. A lot of cheap internet service only offers 1 mbps up. How do you know if Google Hangouts will work where you’re going? Do a test Google Hangout with a person at the place you are going to be! (If there’s no one on the other end to do this with, the place you’re going is either vacation or Borneo (see above).)
  • Access to the resources you need to work. Make sure you can:
      • log in to your laptop as a local administrator without connecting to the Fog Creek network. This is especially true for Mac users, as Macs do not cache your credentials
      • connect to the VPN from your new location. Not all Internet connections, or routers, are created equal and not all will allow you to get on the standard VPN
      • RDP into your HQ machine, if you don’t have everything you need on your laptop

    If you’re unsure about any of this, talk to the sysadmins before you discover you can’t work remotely.

  • A headset. The built-in speakers and microphone on your laptop/monitor suck. The added friction of talking to someone without a headset makes your team members not want to invite you to a Hangout, which means you miss communication that you would normally have received.
  • A dedicated room with a door that closes. At Fog Creek, devs have offices with doors that close. People who aren’t devs are surrounded by coworkers who’ve learned to keep from inadvertently distracting each other. Your aunt has not learned this, so it’s probably a good idea to sequester yourself as much as is feasible. You need a place that is as distraction-free as your normal work environment, and maybe a little more.
  • No child care responsibilities during working hours. You can’t take care of kids and work at the same time.
  • Known availability and overlap with your team. Set standard hours and make sure people know them. If you’re not going to be working the hours you normally work, overcommunicate this to your team by posting in chat (ex: “Going to the gym for an hour”). Nothing is more frustrating to team productivity than chat messages like “Has anyone seen X?” “When is X getting online?” “Can someone else take this bug? X isn’t responding.” Try not to pop in and out. Work sustained sessions with only a few significant interruptions (e.g., lunch, dog walking, gym, light-saber fight with your nephew).
  • A dedicated phone that fits into your position’s workflow, where applicable. If you are an employee who spends a reasonable amount of time on the phone, it should be relatively easy for people to get you on the phone and for you to call them. This might require you to contact the sysadmins for phone forwarding. We haven’t done a lot of this yet, so we’re not awesome at it. Maybe you can use your experiences here to make the next person awesome?


Suggestions for Short Stint Remote

When you’re used to working in the office and you leave it, you’re like a snail without a shell. Consider these suggestions a temporary exoskeleton. These suggestions are not because we don’t trust you. We trust you. To get a desired effect, we often accentuate parts of our behavior that don’t come naturally. We might be introverts at a networking event, forcing ourselves to start conversations with strangers. We might be on camera, forcing ourselves to oversmile like idiots. Most of these tips are to encourage unnatural but beneficial behaviors.

  • Don’t be coy. Awareness is largely covered in “known availability” above, so this bullet point covers your mental state. You might be tempted to downplay your absence from HQ. Puritan work ethic runs pretty deep with some.  Fact is you can ship like an animal from places like Hawaii or Cape Cod (where this document was started). But you might be embarrassed to talk about it, or you might be put on the defensive by someone saying “Great beach weather.” Ignore it and ship code. Clamming up or playing down helps no one. It’s the opposite of what we want; it’s the main reason we have a policy. If you’ve met the requirements above, you’re covered. You are not slacking. You are working. You should not be shy about letting people know where you are and what you’re doing because of what they might think.
  • Put a note on your monitor saying where you are and for how long, in case people wander by looking for you.
  • Have boundaries. The people you’re going to be around might not understand that, yes, you will actually be working. Don’t worry. Your in-laws/parents will be impressed by your work ethic!
  • Over-communicate and/or over-deliver. At HQ, you have a few ways of staying involved and available (face time, informal chats, lunch) that are not available to you remotely. You still have stuff like chat, commit messages, code reviews, cases, Trello boards, etc. If you’re a Creeker, chances are good you’re a low-key person who doesn’t crow about their achievements. You might want to flip that bit for this stint. That can be hard, but it’s important to keep involved. The best way to do this is….
  • Have a deliverable. This frees you from having to assert your productivity via chattiness.

That’s it! We put this stuff out there so that you can effectively take advantage of the flexibility offered by your work arrangement and continue to be productive as part of your team. If you learn something while setting up your environment, or while working remotely, that you wish you’d known earlier, please let me know. The list you see above is a work in progress.

Fog Creek’s Help Desk Gets a New Look

August 27th, 2013 by Max Kramer

Howdy, FogBugz and Kiln users! For the past five or so years, we’ve posted documentation, helped answer questions, fielded feature requests, and collected mad rep with you on the FogBugz and Kiln Stack Exchanges.


While the two sites have been incredibly useful — both for supporting our products and as dogfooding grounds for Stack Exchange — it’s come time to say goodnight to these faithful sites and move on to something new.

Why, you might ask? We’ve been brainstorming ideas for a more effective support site for some time now, but things came to a head when the Stack servers running our [extremely old] sites were slated for decommissioning at the end of the summer. Once we learned this we immediately started crawling the two sites for useful content, and saved a full HTML archive of all posts (>15k, at last count) for reference down the line.

Armed with years-worth of valuable questions, answers, and general knowledge from both users and Fog Creek staff alike, we set out to create the Fog Creek support site of the future. We painstakingly imported valuable content, deleted some sad Spam posts related to male body-part enhancement, and began a general cleanup of our documentation (which we’ll continue in the coming months).

Without further ado, please meet the brand spankin’ new Fog Creek Help Desk!


You can search the entire knowledge base here, or browse FogBugz or Kiln articles and categories individually. As we make the transition, things might be a little rough around the edges; we’ve done our best to make sure that valuable content from the Stack sites has been ported over and updated accordingly, but don’t hesitate to drop us a line if you find that something is missing or outdated. Our goal with this site is to make *your* lives easier, and we want to know if it’s not getting the job done.

Check out the about page for more information on the new site, and let us know what you think!

What’s New in Kiln? The Intern Edition

August 12th, 2013 by Kevin Gessner

Kiln’s summer interns have been hard at work adding a bunch of great new features. Here’s a few of the cool things they’ve done so far.  All of these features are available in Kiln On Demand right now — sign up for a free trial to try them out!

Adding & Removing Bookmarks & Branches

Kiln has long supported moving Mercurial bookmarks and Git branches, but creating or deleting bookmarks required the command line. Now, just like tags, you can create bookmarks and branches directly in Kiln:

blog_add (1)

Once a changeset has been tagged with a bookmark or branch, it can be moved like any other bookmark on the main repository page. Have an extra bookmark or branch?  They can now be deleted from both the individual changeset pages as well as the repository DAG views.


Choose Your Own Encoding

File encodings are a fact of life for modern programmers. In a perfect world, everyone would use the same encoding. However, we don’t live in that perfect world, and in practice, your repository might contain text files in numerous encodings. In the past, Kiln didn’t recognize that encodings other than UTF-8 even existed, and would show a less-than-helpful “This is a binary file” message for text files in encodings like UTF-16, Shift JIS, and Latin-1.

That’s all changed! When viewing a file, you can now select which encoding you want Kiln to use to render the text.  (If there are errors in that encoding, you can still see the results, errors and all — just click the “Decode” button.)

Don’t see the encoding you use? Contact Fog Creek Support and we’ll see if we can add it!

Draggable Branch Repositories

To help your team collaborate, Kiln lets you mark your repositories as “central” and “branch” repositories, distinguishing your important trunk or release code from dev’s workspaces. You’ve always been able to drag and drop central repositories to rearrange the project page, and the branches would follow along.  You could promote a branch repository into a central one, but couldn’t demote a central repository to be a branch. So we said, “Hey, why don’t we let people do all of those at once?”

That’s right, now you can go onto any project’s page and drag-and-drop away. Reorder central repositories, reorder branch repositories, make branch repositories central, and make central repositories branches. You can do it all with a simple click and drag of the mouse. Feel free to reorganize your project as you see fit!

Want to work on awesome projects like these? We’ll begin accepting applications for our Summer 2014 internship next month!

Get Started with Your Own Solari Board

August 8th, 2013 by Will Thompson

Some time ago we introduced our Big Board as part of our “How Fog Creek does Customer Service” series. We explained how the Big Board is useful to us because of the high density of information, but we also left you with an open ended question: “Want your own big board?” The Solari board, one of the widgets on our Big Board, is so important to our workflow that we felt that everyone else should be able to use it with anything: so we open sourced it on GitHub.

IRL Solari boards are manufactured by the firm of Solari di Udine in Italy. You’ll find them all over the world in train stations. They’re not just a great example of mechanical displays. The sound they make is functional. When the board updates, the clattering of the flipping letters alerts everyone in the waiting room to the fact that new information is coming in. It’s a beautiful solution for public displays of information. To capture this feature, we have our Solari board play a clattering sound recorded from the real Solari board in Union Station in New Haven, Connecticut.

This javascript widget is a UI metaphor. When a new tech call comes in, the board makes the clattering sound, and everyone is gently alerted to the fact that a new call has been scheduled. This might sound bothersome, but it actually helps a lot. If you look up and see that the new call is assigned to someone else, but the email address is someone you’re working with, you can quickly swipe the case. We use the “Track” column to display the extension of the assigned rep on the tech call. It looks like a real train track number, and we all know each other’s extensions.

The source code comes with an example Python script that gathers a set of cases from a FogBugz installation via the FogBugzPy Python wrapper and the FogBugz XML API.

And should your webpage ever lose connection to the POST endpoint (where the Solari board retrieves its data), the fail whale is sure to let everyone know.



Now get out there and condense that data into a nice, aesthetically pleasing, train-inspired Solari board!


The Solari board was originally created by Rich Armstrong as a way to display tech calls, then rewritten and refined by Rob Sobers

FogBugz and Raygun Integration

August 7th, 2013 by Adam Wishneusky

If you’re reading this, there is a good chance you track your bugs in FogBugz. Maintaining a bug database is important if you want to produce high quality software, but are you also collecting automatic crash reports from your application? FogBugz has a super-simple built-in API called BugzScout to help you do it, but it’s purposefully quite basic. If shiny graphs are more your style, take a look at Raygun, which just launched FogBugz integration!

Raygun supports most popular languages and frameworks, including Ruby/Rails, .NET, Java, Node.js, PHP, Python, JavaScript, Xamarin, and many more. When you receive a crash report in Raygun, you can cross-link it with your FogBugz case to make sure it gets fixed. For more details, head over to Raygun’s blog.

Wait, you’re not tracking your bugs? Sign up for a free trial of FogBugz today!

What’s New in Kiln Harmony? Spiffy Project Management!

July 29th, 2013 by Hao Lian

The project page has been a mainstay of Kiln ever since its first release. It’s been the place where at a quick glance you can view and manage all the repositories in your project. And it’s been a beacon for Kiln, symbolizing our manifesto to enhance collaboration and organization among programmers. When we planned all the new features for Kiln Harmony—seamless translation between Mercurial and Git version control systems, parsing in F#, SSH support, and more—we went home and slept soundly, knowing we had the razzle-dazzle down. But the project management user interface, long neglected, had rusted over the years. It nagged at us; a shadow in our dream world. So we woke up and went to the elbow grease store. Then we went to the spit and polish store. Then we went to a restaurant, because we were hungry. And now here are some of the changes we made to get to this final result:

The New Kiln Project Management User Interface


The permissions popup.
A drag-and-drop permissions system shows at one glance what permissions each user has. The raw power of FogBugz and Kiln’s permissions system, made accessible.

Context menu

The context popup.
A revamped context menu highlights all the tasks you can do straight from the project page: branch, clone, and archive a repository.

Conflict detection

The reload notification.
The project page can reload itself when someone else makes a change, preventing conflicts and strengthening friendships. Essentially the project page is now a modern JavaScript one-page application written with Knockout. The old project page was a loosely-linked collection of popups and web pages, and one of our goals was to give everything a unified look and feel.

Drag and drop

A repo being dragged and dropped.
Reordering repositories is as simple as a drag and drop thanks to jQuery UI.

Click to edit

Changing a project description.
Rename your project or edit its description in one click.


The aliases list.
Aliases can breathe freely now, liberated from their repository’s box. Add as many aliases as you want; they’ll all show up.

With all these features, you could even say that Kiln Harmony makes project management fun! But you shouldn’t, because you sound like a robot when you do.

Picture of a cat robot.
A cat robot.

Hao Lian is a software developer for Kiln. Did you know about the Shift-Space keyboard shortcut?

Introducing the FogBugz Service for Zapier

July 15th, 2013 by Sonny Kim

Zapier is a service that lets you automate tasks between different online services. Although FogBugz already integrates really well with Kiln and email, it doesn’t integrate with most of the other online services out there. For example, there’s no simple way to automatically create cases in FogBugz when there are tweets mentioning our products, or to automate card creation in Trello when new cases are created in FogBugz. But now that we added the FogBugz Service to Zapier, you can easily trigger actions between FogBugz and any of the 200+ services that Zapier supports.

One way we can use the FogBugz Service on Zapier is by creating a *zap* between Twitter and FogBugz. A *zap* consists of two things: a trigger and an action. The simple idea behind Zapier is that one service triggers an action by another service. For this particular *zap*, a tweet that mentions one of our products on Twitter will trigger a case to be created automatically in FogBugz so that we can assign the tweet to someone on the support team to respond. This *zap* can also help maintain a history of tweets within our FogBugz instance.

Automatically turn the tweets you care about into FogBugz cases!

Another use case is to integrate FogBugz and Trello. A formal FogBugz-Trello integration has been highly desired for some time now, but since there are many different ways in which development teams can use FogBugz in conjunction with Trello, just implementing a rigid case-to-card and project-to-board relationship doesn’t work for most teams. But with Zapier, you’re free to create your own relationships between the entities in your custom FogBugz-to-Trello workflow. Here are some pre-baked *zap*s between FogBugz and Trello:

A custom integration with FogBugz used to require getting your hands dirty while digging into another service’s API. Well, not anymore. With the FogBugz Service on Zapier, you won’t be bothered to learn the intricacies of another service’s API. So go check it out and start zapping it up!

Meet The Fog Creek Summer Interns!

June 20th, 2013 by Elizabeth Hall

At Fog Creek Software our internship program is the backbone of company growth. Currently, ten of our sixteen full-time developers were past interns.  Each intern receives a mentor and works on real features, with the goal to ship — frequently multiple times before they go back to school.  We want them to be able to go home and say, “Look, Ma / friend / roommate / Fido, I made that!”

Our current class certainly worked hard to get here. We received over 600 applications, did close to 200 phone interviews, conducted 27 in-person interviews, and ended up with this fantastic group of ten developer interns and one part-time support intern. In addition to being incredibly smart (some shipped code by the end of their first week), team Iguana* has proven to be an outgoing, fun bunch! The internship class is split into two groups this year: one group is working on Kiln, and the other on Trello.

The thing that I personally love about our program is that, yes, getting through the door involves a highly competitive process but, once our interns are here, all that goes away. They aren’t competing for a limited number of job offers. We want our interns to work together, become friends, and have fun doing it. Our collaborative and supportive culture at Fog Creek helps a lot, but we also throw in some events to make sure they don’t over do it.  Throughout the summer, our interns will go fishing, rediscover pizza and the West Village on Scott’s Pizza Tour, see a summer blockbuster, attend Once the Musical, take a trapeze class, go to the New York State Aquarium, enjoy the party deck at a Mets game, head to Coney Island, sing some karaoke, play in a game night with the HackNY fellows, and even spend a day hitting some balls (golf, baseball, ping pong, etc.) out on Randall’s Island.

Given their wide range of backgrounds and interests, we thought it would be fun to introduce to the world our summer 2013 interns!


Stuart Larsen

Howdy, I’m Stuart, a 4th year Electrical Engineer at Michigan Technological University from Ann Arbor. This summer I’m working with my mentor to create “Webhooks” for Trello. It’s an exciting project that’ll reduce some load on our servers. In my free time I enjoy running, reading, and 1337h4x0rz.


Bonnie Eisenman

Hi! I’m Bonnie, a rising senior in the Computer Science department at Princeton. I’m originally from Ocean City, MD — a tourist town. This summer I’m working with my mentor, Hamid, as well as one of the other interns, JB, on a major redesign of the Trello Android app (with tablet support!). I’m a fantasy novel junkie and this summer I’m trying to teach myself some Irish pennywhistle tunes.


Josh Cooper

Hello! I’m Josh and I’m a rising senior at the University of Pennsylvania studying math and computer science. I hail from northern New Jersey and am one of five brothers. In my spare time, I love playing Frisbee. This summer I’m working on the Kiln team to add some exciting new features.


Elijah ben Izzy

Hello, my name is Elijah and I come from Berkeley, California. I am a rising senior at Brown University studying Computer Science and Applied Math. This summer I’m working on the Trello team to add some fun new features. I enjoy running and being outdoors.


Jonathan Balsano

Hey, I’m JB, a rising senior at Columbia University. I’m originally from Huntington, NY and I love corgis! In my free time I’m usually biking, coding, or swinging at the rings in Riverside Park. This summer I’m working with Hamid and Bonnie on the Android app for Trello, adding tablet compatibility and other cool new features.


William Thompson

Hey! I’m Will, a recent graduate of Hunter College High School and an incoming freshman (prospective computer engineering major) at Brown University. I live in Brooklyn, NYC and although I may not be super athletic myself, I like to build robots to play sports for me. I’m working with the Fog Creek support team to open source some GUI apps we use here to help us handle calls and requests.


William Zimrin

Hello, I’m William.  I’m a rising senior at Brown University and am studying math and computer science.  Originally, I am from Baltimore.  When I don’t need to do something important, I usually split my time between books and computer games.  This summer, I’m working on a variety of Kiln-related projects.


Matthew Tse

Hello everyone!  I’m Matt, a rising senior at Duke University studying Computer Science.  This summer I’m working on the Trello Power-Ups system to give you guys Card Aging and a much asked for Calendar View.  In my free time I really enjoy reading, playing the cello, and finding/cooking new exciting foods.


Samuel Milito

I’m Sam, a rising senior at Rensselaer Polytechnic Institute, majoring in computer science and applied math. I’m from Buffalo, NY, and when I’m not working, I like to spend my time reading and playing video games or Magic. Over the next couple of months I’ll be working on various Kiln features.


Jonathan Pevarnek

Hello, I’m Jonathan.  I am a senior at the University of Michigan studying computer science engineering.  I am originally from Grosse Ile, Michigan, a small island in south-east Michigan.  The extra time I do have, I devote to reading, biking, and a community service organization called Circle K.  This summer, I am working with Aaron Dufour to add support for incoming emails to Trello (


Joe Einertson

Hi, I’m Joe. I’m a rising senior at the University of Minnesota Morris studying computer science and statistics. I grew up in Minneapolis and just got back from 6 months living in Oslo, Norway! This summer I’m working on adding Power-Ups to Trello (calendar view and pirate mode, oh my). In my free time I enjoy photography and playing piano.


We’ll be accepting applications for our Summer 2014 program beginning September, 2013. Keep an eye on our careers page for more information!

*Each year the intern class is named after the next letter in the alphabet. This year is “I”. Do you have a fantastic “J” animal name recommendation for next year? Talk to me!


What’s new in Kiln On Demand? View a diff between any two changesets

May 17th, 2013 by Kevin Gessner

One of the first features we added to Kiln was diff viewing: click a changeset, see what was changed. In terms of raw page views, viewing diffs is one of the most popular features in Kiln.

But viewing a single diff isn’t always everything you want. Often, you’ll want to see all the changes made between two changesets that are farther apart—perhaps the difference between two tagged releases, or the sum of the changes made in a feature branch. With Kiln Harmony, now you can!

Simply load any changeset, and you’ll see the diff from the changeset’s first parent. Click the “Diff from another changeset…” link to search for another changeset (you can search by commit hash, tag, and branch names, or phrases in the commit message, or even filter by author and date—it’s the full power of Kiln’s search engine). Click the results to view the diff from that changeset!

Changeset search

You can see some examples on our demo site:

This feature is available in Kiln 3.0.33 and higher. Sign up for a free trial and try it out!

Dive into parser combinators: parsing search queries with F# and FParsec in Kiln

April 23rd, 2013 by Hao Lian

We open on: the past

The year: 2012. The problem: search. With a new release of Kiln, search is now forefront and center. You can zip around repositories or code with a simple tap of the keys, and boy is the future bright.

Powering search was our search engine. And powering it was our search-query parser, a couple hundred lines of code that parsed a query into a list of keywords and filters. For example, if you asked of Kiln

foo bar project:Eggs author:Tyler

Kiln finds all the commits, by people named “Tyler,” to a repository in projects named “Eggs” since yesterday with the words “foo” or “bar” in the commit message.

But try to search "foo bar" and you would be disappointed. The unspoken rule of the internet is that surrounding two words in quotation marks should make a search engine look for both words as one phrase instead of two separate words. So "foo bar" should match the string “boy I had a lot of foo bar pie” but not the string “foo and bar are two friends from way back when.” Pretty goofy rule, but the internet is a goofy place.

It’s 2012, and Kiln does not have phrase search. We left it on the cutting floor to make room for everything else we wanted, and we regret it. Life moves on.

And we cut to: the present

The year: 2013. Not having phrase search: more and more irritating. Having migrated our full-text indexing to elasticsearch, phrase searches are not only possible but easy. So you, being a developer on the Kiln team, don glasses and open the .cs file containing the query parser. Written in C# and presented for your consideration is a jumble of grammar rules and intermediate parse trees, a jungle of loops and state. A flock of crows take off from a nearby tree. You close the file.

“This seems like the ideal intern project,” you think to yourself. “It would be a shame to not allow someone else to rewrite this.”

Just then, Andrew Pritchard walks by your office. Andrew Pritchard was our summer 2012 intern who worked on a dazzling array of Kiln features, including phrase search. We will borrow a hypothetical version of him. Look at him, walking with the smooth confidence of a man not yet burdened by string parsing.

“Help us, Hypothetical Andrew Pritchard,” we said. “What do you know about parsing?”

H.A.P. points you at FParsec, a parser combinator library for F#. He begins erasing your whiteboard and drawing diagrams while you wonder what he is talking about.

“Hold on,” you say, slapping the multi-colored markers out of his hand. “I have many reservations about what’s happening right now but here’s the biggest one. F# is that that new functional-programming language from Microsoft right? Kiln is a giant ASP.NET MVC application that uses C#. There is no room for F#, Hypothetical Andrew Pritchard, you crazy lovable human being you.”

“No,” he replies. You two stare at each other for a while.

It turns out that .NET’s Common Language Runtime, plus increasingly better F# support in Visual Studio, lets you create an F# library inside your solution and reference it from a C# project. There are some quirks: ReSharper support for F# is ongoing, F# files have to be sorted in the solution tree in the order you want them to be compiled, and F# collection types map awkwardly from and to C#—to name three big ones. Overall though the experience is surprisingly pleasant. I say in the year 2013 you can (and should) alternate between F# and C# depending on the problems you are solving.

We created an F# project with the source code in this blog post if you would like to follow along. If you are not familiar with F#, fear not! By and large the F# syntax can be intuited; for a look-see, Wikipedia also has a buffet of code snippets. On my part I’ll use highly descriptive variable names and mention C# analogues to F# features when possible.

“FParsec is great, but we need F#. No biggie,” H.A.P says, shrugging his shoulders. “Besides, F# is functional, which means it’s ideal for a self-contained, computer-science-y project like string parsing.”

“It is fun.”

“You will like it.”

You are sort of convinced. In any case, he has covered your whiteboard in figures and symbols. He looks at you, then looks at the board. He walks over and gently pushes you out of your chair. You get up, brush yourself off, and read the notes on the whiteboard as he begins typing into your computer. Which notes are: