Developing, Code and Context for Hobbies: Brewing

[Skip this part if you just want to read the article and not why I’m writing it]

The podcast This Developer’s Life is one I’ve enjoyed for some time now.  It’s a great NPR-styled show that looks to investigate various facets of the developer’s interaction with the world.  At the end of the most recent show on Faith (which I would suggest is about courage and not faith in a historical or religious sense) Scott Hanselman mentioned that suggestions for the show were welcome.  On Twitter I suggested the topic of hobbies being impacted by the the developer’s mindset and mentioned that it really impacted my brewing and cooking.  Since Twitter is public, Barry Forrest asked me to articulate my thoughts on this – and so I shall.

[OK, Start Here!]

Software development is very much about order, understanding, and taking complex ideas and breaking them down to their simplest parts.  It’s also about being lazy where you can [See also: Perl].  So ideally you’ll take a complex idea, break it down into its component parts and then write code that executes that complex code in the least amount of lines with zero bugs.  Ideally.  Reality is that it can take a lot of code and there are usually at least a few bugs.

The thing that was so hard for me to begin wrestling with as a software developer was the complex to simple conversion process.  The breaking things down to their bare components, and then breaking those components down to their raw concepts.   This is done so that you can go from a sentence or paragraph describing a feature or idea in written language to a working piece of software that does the very thing that was described (and hopefully more).

I have written or helped write dozens of applications and thousands of features in the 15 years of my career.  All of that was practice in craftsmanship, but as I grew as a developer I noticed that it was changing me.  It was changing my thought processes so that when I looked at any of my hobbies (music, photography, cooking, and more recently brewing) they were a rich set of components that I knew as a collection of steps.  Like classes that were called in order to write a played guitar piece, a coded photograph, a compiled dish, or an abstracted ale. I’m going to simplify this article by hammering out my thoughts on brewing as I think both Barry and Rob (involved in the Twitter discussion) brew.

The following ideas below may be out of order, they may have some assumed nuances, and they might need some clarifications.  Throw me a message in the comments and I’ll do my best to fix or clarify things.

Knowing Your Problem/Goal/Recipe

Brewing beer is not just making a beverage.  You’re not just trying to make something that can be consumed.  You’re trying to craft either a clone recipe, another brewer’s recipe, or your own creation.  You may be trying to improvise to learn ingredients, or you may be trying to hone in on an ideal you’re imagining, but haven’t brewed yet.  As a software developer I aim to have a user story that clearly states the outcome I’m after.  You don’t start coding until you know your goal.

You should not start brewing until you have a recipe (which is equivalent to a user story).  It might be an experimental recipe [this is one of mine], but even still you have a goal.  Your recipe helps set constraints and it helps you begin to set expectations.

Knowing Your Tools

Visual Studio, Eclipse, or Chrome Web Inspector are examples of tools that developers may lean on to help create better code, better programs, and have a good technique for debugging or understanding existing code.  As a brewer you have a brewing setup that involves a kettle, heat and any number of other vessels for getting the sugars from barley (or other grains), hops, and water into a state that the yeast can eat.  There are different techniques to brewing, but no matter what you’re doing – you need to understand the process and the tools involved.

I spent a lot of time investigating the processes available to me as a brewer before I started brewing.  My brother – who taught me how to brew – showed me the brew in a bag, extract kit, and all-grain/sparge methods in 2 days so that I could see how simple it can be, and how complex it can be.  I began reading heavily about what control I could have with the different techniques.  How hard would it be to make mistakes and corrections with each one?  What were the expenses with the different tools?

I started with brew in a bag because the tools required were fewer, the results were more controllable than an extract kit, and I could begin learning and experimenting through experience.  It didn’t take long for me to jump to an all grain/sparge setup, but when I did that I had to re-learn the tools at my disposal.  How did the vessels retain temperature?  How easily could I transfer liquids between the kettle, cooler (mash tun), and the fermentation buckets?

If I knew the keyboard shortcuts to maximize my efficiency in various development tools, I sure as heck worked out the same sorts of efficiencies in my brewing.  What configuration of my brewing equipment gave me faster transfers, better temperature control, and maximum extraction efficiency?  I had to learn my tools.  Consistency in results built trust in my tools.  My tools produced better beers because I knew them.

Knowing Your Process

In building my recipes I take into consideration that I’m going to need to have water at various temperatures at different times.  I’m going to need various grains (or sugars), one or more ounces of hops, and yeast.  I’m going to add them at different times.  I need to know when they are to be added, mixed, resting or whatever the step is.  In programming I’ve found that doing the exact same steps in the exact same order with the exact same tools will give me the exact same results. OK, I’ll admit that isn’t always the case, but it’s within a margin of error.  Home brewing is about honing in on those same results with the same process.

Testing the Outcome of Each Step

When brewing, and in coding, tests are there to inform you as to what’s going on in your code (or your brew).  If you test for starches in the water you’ll know you don’t have the sugars you need for the wort.  If you test for pre-boil gravity you’ll know you don’t have enough (or too much, or just right) sugars in the wort.  If you test everything as you move through your brewing process you’ll be able to learn your equipment better, fix (some) mistakes, and hone in the desired outcome.

Teaching the User

Software usability matters.  It matters in APIs, it matters in user interfaces, and it matters in the steps we present users.  Users have been taught how to access and interact with software for decades now.  Beer has been more accessible for much longer, however, many beer drinkers don’t have exposure to a diversity of beers and don’t understand many of the styles.  Walking users through features of software should not be required, but documentation should exist.  Describing appearance (color, head, carbonation level), flavors (malty, hoppy, bitter), aromas (grassy, piney, fruity, carmely), and textures (mouthfeel/viscosity) can really enhance the experience of the drinker of your beer.  Talking or writing about what makes this beer special by style, history, brewing process or ingredient list gives consumers access to parts of the beer that they may not have previous exposure to.

On more than one occasion I’ve helped talk people through IPAs and they’ve developed a taste for them.  I remember not liking the first 5 or so IPAs I had until I had an O’Dell Myrcenary.  It was like switching from Windows to OS X.  It felt weird until it felt right.  I’m still learning to love lagers and Linux.

Software development taught to me think about the steps, the context, the history, the user’s needs and all (or many) of the ways a problem can be broken down and solved.  It taught me about clean code.  Brewing has become a parallel process that has steps, context, history and user needs. I’ve seen how recipes can be created with complexity and nearly identical beers produced with fewer ingredients or steps [all grain vs. extract, or adding in DME to help get your gravity higher without a bigger mash tun].

There’s a lot I’m still learning about the craft of software development, and there’s a lot I’m still learning about the craft of brewing – but they’re the same.  Next time let’s talk about barbecue!

Too-ness and More-ness

There are things I don’t tell my children.  I tell them to other people’s children, but not my own.  At first you’re probably thinking of either something slightly evil or disciplinary.  You’d be mistaken.  What I don’t tell my own kids about are stunts I did as a kid.  The reason?  They’ll want to do it, too.  If your child does it, I’m not responsible for their actions, you are.  If I tell my children they will do it, possibly injure themselves and then I’ll be responsible for fixing my children.

It gets worse.

The problem with too-ness is that once they master the stunt then there’s something more impressive that needs to be figured out.  If jumping your bike over or off of a large item is cool, why not jump on or over a car?  If climbing in a door jamb is fun, why not also climb up a very dangerous elevator shaft?  Children are creative, often more than adults, when it comes to doing more dangerous things.  I take precaution in what I tell my children so that they will be safe, too, and probably more safe.

Tips for Job Interviews

I’ve helped execute a few job interviews for work this last week and I wanted to pass along a few tips for my readers here who for some reason may not have heard these tips:

  1. Only be yourself if that’s good advice.  If you’re really a jerk, don’t be yourself.  Everyone else: don’t be fake.
  2. If the end of each of the answers you have to any number of questions concludes with something like, “…and that’s why I think I’m perfect for this job,” then you’re more than likely not perfect for the job.  That is of course unless they ask you over and over why you’re perfect for the job.  If they are asking that one question over and over you probably have found a job that is not perfect.
  3. If someone asks you to tell them about yourself, tell them briefly about yourself.  Do not tell them almost about yourself, about what your department does, your sex life, or anything else that is either far too explicit or not actually about yourself.
  4. If someone asks you when was the last time you were dishonest at work the correct answer is always one of two things: 1) I am always honest or 2) When I didn’t tell them I was coming to interview for another position.
  5. If you are asked about your career aspirations give something concrete.  We don’t care if you want to be the first person to discover a unicorn’s remains in the mid-layers of the earth’s crust, but we do care that you have a solid, clear answer.  Dancing around the answer to the question because you’re not sure is way worse than saying you’re not sure.
  6. Use Google to determine even more about the company you’re applying at.  In our case knowing roughly what our company produces (besides a tremendous amount of awesome) will get your far with almost all the leadership.  If there’s a product you can touch, find it to touch if at all possible.  If it’s software, install it.  If it is anything you can look at or experience in a safe, legal way – get it and look at it and experience it!
  7. Be ready to give feedback about the product or products you interacted with.  Be nice, though.  A lot of blood sweat and tears goes into different products so ripping into them is worse than just canceling the interview 🙂
  8. Know the key, broader principles that you operate by so that you can address issues you’re less specific with as specifically and effectively as possible.  Example: I know that there are a tremendous number of programming languages that are available today but I’m competent in a few of them and the principles behind good, clean software development apply to all of them.  If I get asked about C# (which I’ve only tinkered with) I can at least tell the person I’m familiar with Java and would be willing to learn C# if the job required it.
  9. Be punctual – don’t be late, but don’t be 30 minutes early
  10. Come prepared with questions for the interviewers.  They’re going to interview you, but return the favor.  Think of a past job that stank because you didn’t have a great relationship with a manager, or you hated a certain process.  Avoid repeat situations by asking questions about specific details that you either are very familiar with or are able to speak to knowledgeably.  This is probably better than a 2 page resume (with too much information on it) for revealing your competency.

What are your tips, readers?

Penn Jillette Wants Me to Talk To You

Penn Jillette wants me to share the gospel with you.  He is an atheist, but he reminded me that you, even if you are not a Christian, still have a soul, and that should matter to me.  It does.  I know that you’re probably tired of hearing religious people cram religion down your throat.  I’m sorry that other Christians, or myself, may have gotten it wrong and tried to present anything but what matters most toward you.  So, in an attempt to clear things up here’s the gospel in simple terms and with some simple definitions to help clarify things.

The Gospel

The gospel is simple.  So simple a child could understand and believe it:  Jesus Christ died on the cross, was buried, rose the third day (read it in the Bible – I Corinthians 15:3-4).  In doing so He satisfied God’s requirement of justice for sin.  Sin that you and I have committed and that separates us from God (read it in the Bible – Romans 3:23-24).  In doing so God extended His love and grace to the whole world!

What is Grace?

Grace is the unlimited, unmerited blessing of God due to the totally adequate work of Jesus Christ on the cross.  Lets break that down because that sentence is like a t-bone steak, and it needs some dissecting to get to the good stuff.  Grace is unlimited: that means that even Adolph Hitler, had he believed the gospel before death could be saved.  It means I don’t have to worry about out-sinning God.  It means that I don’t have to worry about losing my salvation.  It means I can rest in God’s grace.  It means having knowledge of eternal peace with God.  Grace is unmerited: it means that I can’t earn it, I can only believe the gospel and receive it.  It is like a birthday present from a total stranger that is a check for a million dollars.  I didn’t earn it, it is a gift!  Since I didn’t earn it, I don’t have to work to keep it – its a gift.  Blessings of God is a bit tougher to describe because it has to do with relationship with God.  Blessings is not just stuff, it is the reception of God Himself into our lives (God isn’t against stuff, its just that He doesn’t only operate on the earth – Ephesians 1:3 tells us we’ve been blessed with every heavenly or spiritual blessing – read it in the Bible).  The totally adequate work of Christ on the Cross: this means that Christ’s death on our behalf was satisfactory to God so that when God looked at Christ and those who believe the gospel and are therefore identified with Christ he was satisfied and could have awesomely intimate relationship with them.  This is why Ephesians 1:4 can tell us that we’re holy & blameless (read it in the Bible).  Christians are not perfect on the earth, but before God they have been declared holy and blameless as He is holy and blameless.

God wants a relationship with you.  Belief is a simple act, but you know it comes with consequences.  Once you have responded to the gospel – in either belief or unbelief – you know that that decision will come with ramifications.  I encourage you to ponder the gospel message.  Eternity is a long time to be wrong.  I have personally spent hours and hours of my life studying to make sure I’m not putting my trust in absolutely insane, highly improbable truths.  Instead I have found the Bible, God’s book of love, to be True and the source of truth.  Hell is not described as a great place to be, it is described as a place with weeping and gnashing of teeth.  It is described as a lake of fire.  I don’t want to pass up this opportunity to ask you to read the verses quoted and ask yourself where you will spend eternity.

Think About It

I don’t agree with Penn’s reflection on God, that He doesn’t exist.  But I ask you to consider this: I’m not trying to con you, I don’t want a notch in my Bible cover, I don’t expect to get “Jesus Points” [instead of brownie points or merit badges], but I really care about you.  If you’re reading this it means something to me, you mean something to me.  Ask questions in the comments, email me (, or IM me (if you need that information I’ll email it to you) and we’ll discuss this.  I’m not looking for fights, so if you think you’re going to find that here, you’re at the wrong URL, but I am being genuine because I want you to be there with me in heaven in awe as God reveals more of Himself to us for eternity (read it in the Bible).

Consider putting your trust in Christ to make you right with God rather than trying on your own.  To do so just pray and be really honest with God about your failure to meet His standards of perfection, trust Him for His work through Christ on the cross, and rest in the assurance that you’re adopted into His family.  Then consider finding other Christians who can help you learn about the Bible – I’ll be the first volunteer.

WordPress 2.7 Wows Me

I had installed WordPress 2.7 as a beta last month.  When the final release came out WordPress notified me, but instead of like previous versions, it just let me click a link and it handled the upgrade on the server with very little fuss.  It was like buying a 2008 Honda knowing that when the 2009 Hondas came out you could push a button and for free your Honda would upgrade to the latest.  Before several steps were required, now, I just click a button.  Wow.

The new interface for administration is very clean and polished and easy to use.  Wow.

The ease of editing posts has been taken up just a notch, which is quite nice.  Wow.

I can install plugins from within the plugin interface without having to download and unzip zip files, it just works.  WOW!

Thanks to Matt and the rest of the team at Automattic for a fantastic release that is well worth the upgrade.

How To Write a Christmas Wishlist

If you’re like me then you get Christmas wishlist requests from various relatives.  Some of the folks want them to find inspiration, some of them want them to ignore, and others want them so that they can get you something you’d like.  Either way here are some simple tips on compiling the list:

  1. Figure out gifts at different price ranges.  With the economy being somewhat sketchy lots of folks are cutting back, by giving people several options in different price ranges you’ll be able to let people use the list.
  2. Take a walk through your house and see if anything you already have reminds you of something you’d like.  Do you have a DVD collection?  Do you have some things in your kitchen that are old but could be replaced?  Do you have some clothes that you really like but would love in different colors?
  3. Take a walk through your nearest big box store.  WalMart or Target could have hundreds of items for sale in all of the price ranges on your shopping list, run through one of the stores and make a list
  4. Find the items on your list on Amazon and if the list is in Word or HTML format provide links to the items there. often offers other suggestions when you look at products, keep a lookout for those items.  You can also create a wishlist on – make a note of the link and send it out if it will help those needing the list
  5. Check, mark, underline, bold and or italicize things that are most wanted.  I can think of 100 things I might like for a wishlist, but there are only a hand full of things that I would really, really like.  Make it known so that the persons involved don’t feel lost in a see of too many choices.
  6. Make sure that there aren’t too many choices.  If you’ve only got 5 things in each category you’re more likely to get those things and help people make an informed choice.

Cleanliness is Next to Godliness

I finished installing the sound dampening accessories on our new dishwasher tonight. I had waited on the off chance of leaks from the new installation. No leaks meant silencers were to be installed. This washer is quiet now. The air gap which prevents backflow contamination is now louder when it’s draining than the washer is when it’s running.

I am going to say this: if you have a washer without a backflow prevention mechanism such as an air gap: get one. I can think of no other cheap installation that could be better for your home repair money. I could have possibly saved my old dishwasher from replacement had I known about the air gap. Installation took all of 20 minutes because I’m slow and wanted to triple check the connections.

So far I’m thrilled.

Also, I fixed a broken closet door tonight. Tip: don’t cut corners with “repairs”. The previous owner of this house did and I’m having to make up for it in dishwashers and wood and time :). Not that I mind. After hours in front of a computer screen physical labor is refreshing.

At the end of the above video is a grape letting off a gaseous flame. I showed the above video to an 11 year old boy and he announced, “Oh! They made it better!” In boy terms there is nothing better than first making flames from a grape in a microwave – except to be able to make the flames float up in succession. That’s just magical.

Stay Away From My Space

A friend’s friend’s mom [you have to love indirection] used MySpace to email (which isn’t technically email) to ask if the friend’s employer, a clothing store, had any new nightgowns in stock. That can only be more awkward if its your own mother. Note to world: children and their friends, no matter their age, should not be involved in that part of your life. That sort of clothing choice is only appropriate for your spouse and the strangers that work at the stores whose nametag you don’t read and whose faces you try to forget.

I’m Bringing Sexy Backup

Sorry for the Justin Timberlake reference.  I’ll confess to not actually having heard his ‘hit’ single, so if that reference makes you want to throw up in your mouth, I’m even more apologetic.  That being said, please backup your hard drive today.  If you don’t have an external hard drive that gets backed up to on a regular basis, please stop what you’re doing, even at the risk of getting fired, and get one.  Get the external hard drive, copy your files from your internal hard drive onto the external hard drive.  Do it now.  Do it today, or if you must put it off, do it this weekend, but don’t put it off or else you could lose critical things like those blackmail pictures you have of your [insert being/entity/person/senator reference here] in their [insert some awkward piece of clothing here] while [insert embarrassing or illegal activity here].  Or you could just lose important documents like papers for school, papers for work, papers for church, or even worse, papers for the government.

If you’re running Windows XP you can tell it to backup all of your files automatically!  Just go to Start -> Programs -> Accessories -> System Tools -> Backup.  Then follow the wizard.  Figure out if all of your valuable files are in your My Documents folders or if you want to backup the whole system and then set up a schedule.  Have it backup once a week or daily, but have it backup your computer or valuable files regularly.  Once that’s done you can rest knowing that unless your external hard drive fails you’ve at least got things preserved.

I setup a network wide backup at my house this week using an Airport Extreme USB connected external hard drive so that all computers backup onto one drive every night.  If I were more clever once a week/month I’d take a second external drive to my parents or some other ‘safe’ place and keep one there, too.  Just in case.

Sure, backing up data isn’t sexy, but its smart.  So listen to Justin Timberlake and backup at the same time, then you can be both.