Back to Basics

This year, my goal is to become a better developer than I was last year. Now, that’s no different than my goal in previous years, and if you’re a developer it should be pretty high on your list of goals as well. However, this year I’m approaching the goal in a measurable, tangible way.

I’m sending my self to code school.

I’ve been building websites since 1996. I cut my teeth on rudimentary HTML on a free Tripod-hosted website that some kindred spirit from the Yahoo! Chat: Programming chatroom helped me create. From the moment I learned that every site had exposed source code that I could view, dissect and emulate, I was hooked.

In the 17 years that have passed since I crafted my first HTML tag, the web has evolved and grown in amazing and magical ways. I have learned and grown with it, but certainly not in the same order of magnitude. In fact, I don’t even think the work I’m producing adequately demonstrates SEVENTEEN YEARS of education. This is largely my fault.

For the better part of these 17 years I have snubbed formal education and conventional learning. I haven’t attended a programming class of any kind or even so much as cracked open more than one or two programming books. Everything I’ve learned has been out of curiosity or necessity from project to project. In the folly of my youth I scoffed at the notion that I could learn something of value about our fast-paced industry by reading an already out-of-date book or enrolling in a behind-the-times college program.

What a fool I was.

Now, this isn’t to say I’ve ignored collective wisdom. Certainly not! I would not know any of what I have learned without the help of minds that are both brighter and more generous than my own. I owe a great debt to those who documented their work and put out blog posts, tutorials and other instructional materials. It is in their footsteps that I hope to follow.

This year I hope to undo all the damage I created by not taking my discipline seriously.

Developer Boot Camp

For the next four months I’ll be attending a self-directed semester of education. I’ve solicited book recommendations that every good developer is expected to have read, and I’ll be completing sample projects that I believe are important to learning the principles these books will teach. By the time the semester is over, I will be a demonstrably better developer than I am today.

Thankfully, I’ve already gotten a bit of a head-start. In June of 2013 I launched WPSessions, which has brought to me the personal instruction and expertise of more than 17 WordPress experts so far. I’ll continue to lean on that throughout all of 2014 as well, but the sessions there will only help supplement the more rigorous education I’ll be documenting here.

In my next post I’ll lay out the schedule I intend to follow, the required reading I plan to complete, and the specific topics I desire to learn and master.

Join Me?

If you’re at all interested in this I urge you to follow along. The only real financial commitment will be the cost of the books – if you choose to buy them – which is far less cumbersome than a single college course, I can tell you that much. Leave a comment here, or join the mailing list below, and I’ll do my best to help hold you accountable.


Recommended Reading for Developers – Building a Better Bookshelf

This year I want to become a measurably better developer. One way I hope to improve in that regard is by reading the best books that have been written on the topic of programming and development.

Now, I would consider myself a web developer – I’ve been building websites for the better part of 17 years – but I don’t consider myself a very good one. You see, in all this time I haven’t read more than maybe a single book on the topic. Everything I’ve learned has been from the web, and has been learned quite haphazardly at that.

Please help me fix this.

Leave a comment below with your best recommendation for required reading for a competent developer. Book, blog or otherwise.

The book doesn’t need to be specific to web development. In fact, I would love to read any book that leads me down the path of being a better thinker, doer, and problem solver. I’d love to learn about design patterns and how to efficiently solve problems in ways that have been demonstrated to work. The languages I work with most regularly are PHP and JavaScript, and I predominantly build websites using WordPress, but if your recommendation will teach me principles that extol the pillars of better development practices, regardless of language, I’m for it!

Here are some suggestions I’ve already received:

So, tell me, what book (or blog) are you shocked I haven’t already read at some point in the last 17 years?

Developing for Success

This post originally appeared on shortly after this event took place in 2011. I’ve resurrected it to include as part of my own blog.

WordCamp Chicago 2011 I presented on “Developing for Success -or- Any Fool Can Do This”. The talk encompassed how I took a leap of faith and launched StartBox and all of the challenges that come with that. Slides and resources are below.

(click here to watch on

You Can Do This!

Starting and running a business is easier than you think, but there are a lot of overwhelming challenges that can really break you down if you don’t have a plan or perseverance. My goal in the presentation was to inspire others to realize they already have the tools and resources they need to get started today and succeed.

An important caveat is that you must define success for yourself. If you chase after someone else’s definition of success (or your perceived version of what they think success means) you will always fall short. Another important reminder is that you cannot define success by specific attainable goals. Those are goals, they are not a living definition of success.

How I Define Success

Personally, I define success as: Spending most of my time doing something I enjoy, while generating more revenue than debt, in positive and meaningful ways.

If I’m missing any one of those three components I’m not succeeding because I’m either spending most time doing something I don’t like, generating more debt than revenue, or doing negative or meaningless work. Bleh!

My Presentation Slides

My presentation slides are available at SlideShare.


Leverage the resources that are available to you, there are plenty:

Ditching your DVDs for a Better Home Theater Experience

Recently a number of people have been asking me about what I did with my collection of 240+ DVDs. I still have them, but they’re packed away in storage. Last year I set out on a quest to digitally rip every movie we owned so that we could easily watch them on any of our devices in any room of our home.

I’ve already blogged about the streaming part of my setup, we steam movies using Drobo FS and Media Tomb (note that if you buy a newer Drobo, like a Drobo 5N, you can instead use a much slicker app named Plex).

As for the ripping and cataloging of our discs, my good friend Terry White laid the foundation by documenting his entire DVD to MP4 conversion process. The punchline, quite simply, is to use Handbrake for OSX and select the “Universal” preset.

That’s pretty much it. Rip via Handbrake, store on any device of your choosing. If you put them on a network-attached storage unit (NAS) you gain the benefit of having them always accessible anywhere on your home network. If you use a device like Drobo you gain the additional benefit of automatic redundant backups (so if a drive fails you’re not completely hosed).

What about file size?

Across our movies, the average file size is 1.5GB. This means that our entire DVD collection clocks in at ~375GB. Not bad.

Hope this helps!

Maybe we’re too caught up on efficiency. We spend …

Maybe we’re too caught up on efficiency. We spend our lives fine-tuning our ability to make money – which is a good thing – but then we use that money to avoid doing some of the only things in a human life that can provide actual fulfillment. We pay someone else to raise and teach our children. We pay someone to build our home, and then someone else to heat them. We pay others to manufacture our Christmas trees. On the one hand, we passionately believe that work is a good thing, and important. But we’ve fallen prey to a philosophy that holds work as a means to an end, not an end in itself. We’ve forgotten that good work – hard work – is in itself fulfilling. Build something. Chop some wood. See if I am wrong.

Configuring a Local Apache/PHP/MySQL Dev Environment in OS X

Update: If you’re just getting started now, I strongly recommend looking into Vagrant instead of rolling your own environment like I describe. I still use the exact environment I detail below, but am leaning towards Vagrant soon. If you’re a WordPress developer, specifically check out Varying Vagrant Vagrants (VVV) by 10up.



These are my personal notes that I use every time I reformat or get a new computer. I’ve curated these instructions over the course of 4 years, so they are littered with links to relevant source material and have been stripped down to the exact actionable steps I need to take to get up and running. As such, this post is mostly for my own benefit, and I will regularly update it as my process changes (usually with each new OS X release).

These instructions have been updated to specifically support OS X Mavericks (10.9), but will work with Mountain Lion (10.8), Lion (10.7), Snow Leopard (10.6), and Leopard (10.5). Running 10.4 or lower? You should probably upgrade 🙂

I might write some follow-up posts about using this setup to create a killer local WordPress Multisite installation, and also porting your dev environment contents to live in DropBox. If so, I’ll link them up here.

Why not just use MAMP?

If you’re wondering, I like to set up my local environment, instead of using MAMP, because I prefer to have it always available. I never liked having a separate application running just so I could access my local dev setup. Also, it has always bothered me that MAMP bundled its own copies of PHP, Apache and MySQL when the only missing component that doesn’t come pre-loaded with OS X is MySQL.

Help, I’m stuck!

It’s worth mentioning here that I’m not a very smart guy, which is why I’ve kept these detailed notes for the last 4 years. These instructions work for me, but they might not work for you. If you get stuck with an issue, I suggest googling around and sharing what you discover here in the comments. It will likely be much faster than asking me for help, and will benefit everyone who reads this (me included)!

A Quick Word about my Terminal Commands

In many of the terminal instructions I use my custom bash shortcut “sub” to open a given file in Sublime Text 2 via command line. You can substitute “sub” for your text editor of choice (e.g. “vi” for Vim, or “mate” for TextMate, or “subl” for the standard Sublime shortcut).

Install MySQL

Follow these steps, in order:

  1. Download DMG installer from
  2. Install MySQL
  3. Install MySQL auto-start
  4. Install MySQL pref pane
  5. Then, configure MySQL:
  6. In Terminal: sub ~/.profile
    1. Add this line to the file: export PATH="/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:$PATH"
    2. Save and close the file.
  7. In Terminal: source ~/.profile
  8. Finally, configure MySQL socket (because OS X is looking in the wrong directory):

Configure PHP

These steps are really only to keep you sane while testing uploads and such in your projects:

  1. In Terminal: sudo cp /etc/php.ini.default /etc/php.ini
  2. In Terminal: sub /etc/php.ini
  3. Update upload_max_filesize to something like 64MB (L891 in OS 10.8)
  4. Update post_max_size to something like 64MB (L740 in OS 10.8)
  5. Save and close

Configure Apache

Update httpd.conf to enable PHP5 and Virtual Hosts:

  1. In Terminal: sub /etc/apache2/httpd.conf
  2. Uncomment the include for PHP5 (L117 in OS 10.8, L111 in older releases)
  3. Uncomment the include Virtual Hosts (L477 in OS 10.8, L623 in older releases)
  4. Save and close the file.
  5. If you’re running OS X 10.7 or earlier, you’ll also need to enable “Web Sharing” in System Preferences > Sharing.

Setup Virtual Hosts (

Update: If you’d rather have “*.dev” dynamically mapped to “~/Sites/www/*”, check out this great article on Apache zero-config development. Then, follow this article on using DNSmasq to redirect all .dev traffic locally.

For the example below, you’ll want to replace “” with your own custom URL, and “username” with your own OS X username.

  1. In Terminal: sub /private/etc/hosts
  2. Add the following line to the file:
  3. Save and close the file.
  4. In Terminal: sub /private/etc/apache2/users/username.conf
  5. Add the following lines to the file:
    1. <Directory "/Users/username/Sites/">
          Options FollowSymLinks Indexes MultiViews
          AllowOverride All
          Order allow,deny
          Allow from all
      <VirtualHost *:80>
         DocumentRoot "/Users/username/Sites/"
  6. Save and close the file.
  7. Finally, flush the DNS cache & Restart Apache (you’ll want to do this any time you edit your hosts file and virtual hosts setup):
    1. In Terminal: dscacheutil -flushcache
    2. In Terminal: sudo apachectl restart

In my setup I’ve registered to point to my ~/Sites/ folder, rzen.wp to point to ~/Sites/wordpress/, and rzen.php to point to ~/Sites/phpMyAdmin. This means I’ve created a separate pointer for each domain in my hosts file, and a separate <VirtualHost> container for each in my apache .conf file.


Apache Error Notes

Later, if apache ever goes south and starts spitting 403 Forbidden, or some other error, check the error log. You can open it from inside Terminal: sub /var/log/apache2/error_log

If the problem is “Symbolic link not allowed or link target not accessible”, confirm that your symlinked folder, it’s parent directory, et al, have sufficient permissions for owner and group (

Upgrading OS X?

Be aware that with every upgrade OS X is likely to overwrite your edits to Apache’s httpd.conf file. Specifically, you’ll probably need to edit /etc/apache2/httpd.conf once again and uncomment the lines for including PHP (L118) and enabling Virtual Hosts (L478).

This has at least been true both for upgrading to OS X Mountain Lion (10.8) and OS X Mavericks (10.9), and probably true in upgrading to releases before those.

The Optional (but recommended) Bits

Install Sequel Pro

This app is amazing, and it works brilliantly for manipulating both local and remote databases. And it’s free!
Download Sequel Pro

Install phpMyAdmin (if you hate living in the future and using Sequel Pro)

  1. Download latest version of phpMyAdmin from
  2. Unzip to ~/Sites/phpMyAdmin/
  3. Rename to
  4. On L36 change $cfg['Servers'][$i]['AllowNoPassword'] to true
  5. By default, your login will be root with no password

Install WordPress

  1. Download the latest version of WordPress from
  2. Unzip to ~/Sites/wordpress/
  3. Create a new database for your install via phpMyAdmin to use during installation
    • Database server will be localhost
    • Username will be root
    • Password will be blank
  4. Pro-Tip: Once installed, edit wp-config.php add define('FS_METHOD','direct'); somewhere before the “That’s All, stop editing here” comment. This will enable direct access to the file system when running automatic updates and make your local dev experience mui guapo.

Install Git

Visit and download + install the latest version. Done.

Install SVN

For some reason, beginning in Mountain Lion (OS X 10.8), Apple stopped packaging SVN with Mac OS. So, you’ll need to download “XCode Command Line Tools” separately by signing in as a Developer (after registering for a free account using your Apple ID) here:

Alternatively, you can download SVN directly from WanDisco: I recommend using 1.7+.

Enable SSL

If you ever have need to test a site or service locally using https://, my co-worker @jtsternberg has written up a wonderfully detailed step-by-step of his experience doing just that. You can read it here: How to set up SSL with OSX Mountain Lion’s built-in Apache

Thankfulness Changes a Person

The following are notes from a teaching I gave on Tuesday, Nov 20, 2012 to a group of some really cool college students. It’s been edited slightly to be readable and make sense here in print, but it’s still missing some of the finer bits (and discussion points) I expounded on during my teaching.

It is necessary to be thankful.

Tonight, I’m going to speak to you about how a spirit of thankfulness could literally change your entire perspective on life. I’m living proof of just how powerful an air of thankfulness is, and if you’ll listen to everything I have to say tonight I guarantee you will leave here with a fresh set of eyes.

I have five key points that I’d like us to discuss tonight, the very first is an important realization you need to make:

1. You have the power to change things…

You are an adult; a fully grown man or woman.

I know many of you don’t realize this yet. If you haven’t, it’s likely because you think you’re “just a student” or, more likely, because we live in a society that is regularly increasing the gap between what we consider to be childhood and adulthood. But, believe me when I say this, you are a fully grown adult. This isn’t something you will be someday at some discernible point in the future, I mean today, right now, you’re an adult, and you have a lot of responsibilities.

Not only that, you are also exceedingly blessed, you are incredibly loved, and you have immeasurable power.

So, the question is, how will you use this power and these resources you have been given? And, what the heck does any of this have to do with thankfulness?

A couple of weeks ago I shared an important lesson with our leadership team. We were discussing the dangerous, quicksand-like traps of gossip and even the unintentionally harmful things we broadcast to the world. The solution is a pretty simple one, I suggested that we:

2. Broadcast Only Good News…

Now, before you stop listening and write this off as terrible advice: please realize I don’t mean that you should internalize your struggles and never mourn. It is imperative that you share your burdens with others. If you ever choose to struggle in isolation, whatever the reason, you’re an idiot.

Now you’re probably thinking, “Brian, Jesus tells us in Matthew 5 that we shouldn’t call people idiots.” Well, I can call you an idiot, because I are one. Just trust me on this: share your burdens with the people you care about and you’ll soon find yourself with more friends than burdens.

Okay, so, what do I mean by “only broadcast good news?” I mean that you should stop broadcasting negative news…

  • Don’t talk about celebrity garbage (or talk about them at all, for that matter)
  • Don’t share disheartening stories or statuses via Facebook
  • Don’t spread the negativity you’ve been fed by other sources
  • Don’t waste your life sharing something that isn’t uplifting someone in some way

It’s a simple check, really. Before you share something just ask yourself, “is this uplifting to someone in some way?” if the answer is yes, share it, if not, don’t. Done deal!

Negative news can usually be boiled down to F.U.D. What’s F.U.D.? Fear, Uncertainty and Doubt — or, in other words, worry — which poisons our ability to be thankful.

Jesus warns us against how poisonous worrying can be in Matthew 7:

25 “That is why I tell you not to worry about everyday life—whether you have enough food and drink, or enough clothes to wear. Isn’t life more than food, and your body more than clothing? 26 Look at the birds. They don’t plant or harvest or store food in barns, for your heavenly Father feeds them. And aren’t you far more valuable to him than they are? 27 Can all your worries add a single moment to your life?

Besides broadcasting only good news, I also want to challenge you to:

3. Be Thankful in Every Circumstance…

I know that “just be thankful” is woefully inadequate advice. That’s why I’m not telling you to “just be thankful”. Thankfulness in a vacuum is not true thankfulness.

Lets pause and think about that one for a moment: thankfulness in a vacuum is not true thankfulness.

If we were to compartmentalize our lives, and isolate those things we are thankful for from the things we are not, how thankful can we really be?

My lovely wife reminded me last night that Thankfulness isn’t just a statement, it’s an action.

So, when you pluck out something abstract and say, “I’m thankful for school” in one breath and in another say, “I can’t wait to go on break, I hate all of this homework and my professor just isn’t cut out for teaching.” … well, I’m just not convinced you’re actually thankful.

Your sense of gratitude should move you.

It should be so powerful that it inspires you, that it propels you towards action. When you’re truly thankful for something, you’re thankful even in spite of it’s negative qualities. You’re able to say “I’m thankful for school” without hastily qualifying it with “but, I really wish I had less homework…” (Pro-tip: if you have to add “but” to a sentence that start’s with “i’m thankful”, you’re not actually thankful)

When you’re thankful in every circumstance you force yourself to be present in the moment. It serves as a reminder as to why you’re in your current situation (your purpose, goals, desires, choices, etc). Furthermore, it helps you to broadcast good news.

This next point, out of all the others, might be the most instrumental in helping you dramatically improve your life. It’s a small point that I’ve personally been practicing for a number of years, and if I trace back all the threads that have helped lead me to where I am today, I can tell you that it was this focus that completely reshaped my entire way of living.

4. Lead with Thankfulness…

Every time I talk to God I lead with something I’m thankful for, without exception. The events of the day, my present circumstance, the things that are on my mind, all of it falls second to my expression of gratitude to our Creator for blessing me beyond the limits of my own comprehension.

I’m sure this next bit will sound unbelievable – and I’m afraid you won’t be able to fully understand it until you’ve tried this yourself – but, in my experience, I’ve found that the more I’m thankful, the more I have to be thankful for.

Leading with thankfulness in prayer helps refocus the conversation. It puts me in a proper state of mind to approach our incredible, powerful, merciful, benevolent, gracious creator. It reminds me that nothing I have is entirely of my own accord (though I took initiative, everything is a blessing from God).

The book of Job, if you’ve never read it, is a poetic tale of a man named Job whom God allows to be tempted and tortured by the devil. God knows that Job is a righteous man and that he can take it. Throughout the story he’s essentially stripped of everything: family, friends, food, farms, you name it. At one point he even gets covered in boils so that the very fiber of his being is put on-edge.

Throughout the book, and this is the lesser-talked-about portion, Job complains and whines a lot. I can’t blame him, of course, I’m just putting it out there so you realized he didn’t take this punishment lying down. He certainly goes to bat for God when those closest to him begin to doubt his righteousness and even God’s sovereignty, but his conversation between those moments is punctuated with complaints and questions directed towards the Creator. Eventually God answers back and puts Job in his place

Job 38 starts with this:

Then the Lord answered Job from the whirlwind:
2 “Who is this that questions my wisdom
with such ignorant words?
3 Brace yourself like a man,
because I have some questions for you,
and you must answer them.
4 “Where were you when I laid the foundations of the earth?
Tell me, if you know so much.
5 Who determined its dimensions
and stretched out the surveying line?
6 What supports its foundations,
and who laid its cornerstone
7 as the morning stars sang together
and all the angels[a] shouted for joy?
8 “Who kept the sea inside its boundaries
as it burst from the womb,
9 and as I clothed it with clouds
and wrapped it in thick darkness?
10 For I locked it behind barred gates,
limiting its shores.
11 I said, ‘This far and no farther will you come.
Here your proud waves must stop!’

It underscores that there is nothing I could give to or do for God that wasn’t already given to or done for me. It also helps me highlight other things that I’m thankful for, and as a result my prayers tend to be punctuated with thanksgiving.

I want to challenge you tonight to open your times of prayer with a word of thanks. I don’t want you to stop there, though. Don’t only lead with thanks when you talk to God, do so when you talk to others, too. Open your conversations with whatever is on your mind that has left you feeling thankful and see how it transforms your interactions.

5. You have a lot to be thankful for…

Last week AJ presented a lot of insightful truths about grace, justice, power and influence. One of the things he said is a perfect signpost for what I have to say tonight “Even as a college student, you have more wealth and resources at your fingertips than most of the entire rest of the world.”

You’re a poor college kid, right? You don’t have a job, you can’t afford school, you’ve got more homework than you know what to do with, your parents are divorced, your friends are being pretty cold to you right now, your family is awkward or hateful or just plain difficult to be around and now you have to spend 4 whole days with them. There’s a lot of crap in your life that no one knows about, and if they knew they’d probably turn their back on you. Am I right?

Think about each of these questions for a moment:

  • How hungry are you right now? Do you know where your next meal is coming from?
  • How cold are you right now?
  • Where are you going to sleep tonight?
  • What’s going to happen when the clothes you’re wearing now get dirty?
  • If you get sick or injured, what’s going to happen to you?
  • How many people that you personally know have died in the past 48 hours?

It’s a fairly safe assumption to say that everyone in this room is not starving, we all have a warm place to sleep, we have spare clothes for when what we’re wearing gets dirty, we trust that we’ll be cared for if we get sick or injured, and we haven watched (or know) many people who have died in the last two days.

These are all incredibly real, incredibly tragic, and incredibly powerful foundations in life. If we were born into a different family, a different culture or a different region there is an exceedingly high chance that we would have answered every one of those questions differently. And yet, here we are, in privileged America concentrating on the very few negative qualities in our life instead of praising God for the innumerable positives.

As humans, we have great capacity for forgetfulness. Many of you cannot remember what you had for lunch one week ago today; I, on the other hand, cannot even remember what year it is, let alone what day it is.

This trait has made it very easy for us to forget the vast quantities of things we have to be thankful for. This is why I recommend leading with thankfulness. It’s why I recommend broadcasting only Good news. When you forget things, wouldn’t you rather forget the negative parts that don’t matter and remember the positive?

The tribes of Israel had a neat trick they used to remember things.

In Joshua 4, the Israelites have just crossed the river Jordan to be delivered into the promise land. This takes place some 40 years after they were originally supposed to enter into this space (and, if you forgot, the reason they hadn’t been able to enter into the promise land earlier is because they chose to turn away from God and go their own way). Anyhow, the chapter begins like so:

When all the people had crossed the Jordan, the Lord said to Joshua, 2 “Now choose twelve men, one from each tribe. 3 Tell them, ‘Take twelve stones from the very place where the priests are standing in the middle of the Jordan. Carry them out and pile them up at the place where you will camp tonight.’”

4 So Joshua called together the twelve men he had chosen—one from each of the tribes of Israel. 5 He told them, “Go into the middle of the Jordan, in front of the Ark of the Lord your God. Each of you must pick up one stone and carry it out on your shoulder—twelve stones in all, one for each of the twelve tribes of Israel.6 We will use these stones to build a memorial. In the future your children will ask you, ‘What do these stones mean?’ 7 Then you can tell them, ‘They remind us that the Jordan River stopped flowing when the Ark of the Lord’s Covenant went across.’ These stones will stand as a memorial among the people of Israel forever.”

21 Then Joshua said to the Israelites, “In the future your children will ask, ‘What do these stones mean?’22 Then you can tell them, ‘This is where the Israelites crossed the Jordan on dry ground.’ 23 For the Lord your God dried up the river right before your eyes, and he kept it dry until you were all across, just as he did at the Red Sea when he dried it up until we had all crossed over. 24 He did this so all the nations of the earth might know that the Lord’s hand is powerful, and so you might fear the Lord your God forever.”

6. You can’t change everything…

So far we’ve covered that you are already a fully grown adult, capable of making decisions, rife with responsibilities, and you have the power to change things. I want to be clear, however, that you cannot change everything.

Free will trumps everything. You cannot change someone else’s will no more than God can control your own. Our biggest freedom in life can also be our greatest hindrance.

I can’t tell you what to do, no one can. I can only point you in the right direction, and pray that you listen closely and drink deeply the word of God.

One of my favorite books in the Bible is Ecclesiastes. This book was authored by King Solomon, who is credited as the wisest man to ever live. In it he details his pursuit for meaning and purpose by trying the best and greatest of everything. As king, he was the richest man alive and had more wealth than anyone could ever spend in a single lifetime. He built incredible palaces, had enormous vineyards, and did and tried everything. As a result he found that everything was utterly meaningless, like a passing vapor.

This sounds pretty disheartening and depressing until you cut through everything and realize that everything derives meaning from God and that all blessings come directly from God. In fact, in Ecclesiastes 2:24 he writes,

So I decided there is nothing better than to enjoy food and drink and to find satisfaction in work. Then I realized that these pleasures are from the hand of God.

Everything becomes remarkably more meaningful and powerful once you realize that it’s a direct blessing from the creator. If you read the entire book of Ecclesiastes it also adds a very humbling perspective to life: there is nothing new under the sun, and everything that can be done/seen/bought/experienced is meaningless unless you find solace in the fact that these things are from the hand of God and they draw you nearer to Him. It’s also a healthy reminder that a simple life, centered around few distractions and requiring the most basic essentials, tends to lead to the purest and most uninterrupted joy.

Solomon, a man who owned more and experienced more than anyone, ultimately discovered that the best there was for him to experience in life was to simply enjoy food and drink and find satisfaction in work. For this, he was thankful. Because of this, he was changed.

Walking with God requires honesty and humility.
Humility breeds thankfulness.
And thankfulness changes a person.

Changes in the Wind, Part 3: Advice for Developers

Note: This is the third part of a three-part series. Part 1 discusses advice for leaders and part 2 is for designers (and everyone who works with designers). Read Part 1 (Leadership Advice) or Part 2 (Design Advice)

For the developers in the audience, I want to take a moment to offer some general advice and good practices as I round out this series about my tenure as a leader and my ongoing role as a developer. Below you’ll find four simple tips, plus a practical reminder. I’ll have more to share in the many months to come, but these are enough to get things started. Without any further ado…

1. Program like a lazy person

Build solutions only when you cannot outsource them and build in the simplest iterations possible.

I’ve personally found that much more can be accomplished when you rely heavily on the work of others. Now, I’m not suggesting you pawn all your tasks off on someone else (that’s the job of a good leader). Nor am I suggesting that you lazily take credit for the work of others (that’s called “being a jerk”). What I am saying is that any solutions you may need probably already exist elsewhere else already, and you should borrow much code from them (if not use them in their entirety).

Building things in their simplest form leaves room for fewer errors and makes for expedited builds (rapid prototyping, multiple iterations, whatever you want to call it), always allowing you to gain features only when they’re actually needed.

Equally important is documenting things as you go (referring to the URLs where you found various components) — future you is never as clever as present-day you, he definitely won’t understand or remember why you built something a specific way.

2. Always pull a fresh copy of any file

Hopefully your team is using a managed codebase with tools like SVN or GIT. If so, you already know the importance of updating your local repository before pushing any changes (and you can skip this section). If that’s not the case, and you’re working with a team of people who are updating a project via FTP, GET HELP NOW! I’m kidding, but I’m also serious… version-controlled code is a godsend, whether you work alone or on a team.

Anyway, if you’re still reading this and you aren’t on a managed codebase, here’s what you need to know: if you’ve had your local copy for more than an hour, assume that it is already out of date and you need to pull a fresh copy from the server. My previous team was unfortunately relegated to traditional FTP at the expense of overwriting each other’s work time and again. That’s the cost of not working with proper version control. Hopefully new dev practices will help you avoid this in the future, but until anything is in place it’s always safest to check with someone before you push any changes.

3. Always Be Testing (ABT)

This is the most cost-effective part of your job, and its the most budget-justifying proof that you’re worth every penny someone pays you. Every time you push a new file to the server you should run it through the testing system to make sure things are okay. If the user cannot checkout, or cannot subscribe, or do whatever it is they are supposed to do that generates revenue for your company, you are bleeding money.

You should also know that you have the authority to challenge everyone else who isn’t testing the pages you build. This includes the project requestor. But, if you are not personally testing everything you also forgo this (important) right to challenge others.

4.Don’t worry about looking incompetent

It’s only when you draw attention to how incompetent you feel that people notice and wonder. I’ve almost never thought, “man, this guy is moving slow” or “man, i don’t think he knows what he’s doing” without a coworker or contractor bringing up their own insecurities first. Trust that we trust you and that we also know things are complicated and take time 🙂 — You’re good at what you do, and that’s why you were hired. Just keep swimming!

Bonus Tip: Why “5 Minutes” doesn’t always mean five minutes

I covered this important realization on bug-fixing in an earlier post, but I felt it prudent to include again here. Be careful as you offer time estimates, and do your best to help others understand when you’re incorrect.

So, there you have it.

Some of the most practical advice I can give you from several months of being a leader and many years of being a developer. Let me know what you think and keep up the awesome!