Archive for the 'work smarter' Category

Productivity Tools For Web Development (A Monday Series: Part 2)

September 25, 2007

[Note: busy day yesterday! Apologies that this part of my Monday series is being posted on Tuesday. Can anyone say, “post scheduling”? Amen!]

Monday #2: A good* replication process – Oh, man. This is one of my favorites.

When I first started developing for the web, I hated deploying new versions of our web applications. Why? Well, because when I first started, I deployed using the following process:

  1. Copy the newly compiled executable to the clipboard
  2. Open Windows Explorer and navigate to the first web server’s production app directory
  3. Rename the current production version
  4. Paste the executable from my clipboard into the production app directory
  5. Repeat for each web server (less than 10, but not by much)
  6. Weep softly, wondering why I’m still doing something so glaringly inefficient

Best case, doing all that usually took around 2-3 minutes if the network was responding quickly. And pray that there wasn’t a bug that somehow escaped testing, because if there is, the whole process has to be reversed for each server.

Finally, I decided that this was no good. Remember our dear, old friend, the batch file? With a couple of easy steps, a batch file can make all of our wildest dreams come true (assuming that our wildest dreams entail file replication. Be still, my beating heart!)

You’ll need:

  1. A directory into which you can put files you want to replicate – I use C:\replication, but you can create it anywhere you want and call it anything you like
  2. A batch (.BAT) file – There’s a few ways to do this. I have 2 that I use.

    replicate.bat: This allows me to specify a directory as a command line argument. Assuming that your web servers are all configured identically, this will copy the files in your replication directory to the same location on each web server.

    set directory=%1

    for %%f in (1,2,3) do copy /-Y C:\replication \\yourWebServer%%f\d\%directory%

    Example usage from the command prompt: replicate myDirectory\yourShoppingCartApp

    replicate_app.bat: This one copies to the same directory every time, which is what I want when I’m deploying apps.

    for %%f in (1,2,3) do copy /-Y C:\replication \\yourWebServer%%f\productionApps

    Example usage from the command prompt: replicate_app

Once those are set up, just compile or copy your executable to your replication directory. Open a command prompt and run your batch file of choice to deploy your file(s) to all servers in one shot. Total elapsed time: 10 seconds or less.

To save a backup of the current production app, I rename it and put it in the replication directory right next to the new version I want to deploy. Then when I run the replication, the backup is copied to each server along with the new version. You know – just in case. . .

I know there are various utilities that’ll achieve similar effects, but I don’t know of a good free one. And then of course there’s Windows File Replication Service, but that’s sort of low on my list at the moment.

Got a better way to do it? Let me know in a comment.

*”Good” in relative terms. 🙂


Productivity Tools For Web Development (A Monday Series: Part 1)

September 17, 2007

I decided that I need something to fill in gaps between posting longer articles, so it’s time for a series. I’ll post a new part each Monday until I run out of ideas, start a different series, or die. LIFO rules apply here. So let’s get this show on the road…

About 3 months ago, I started on a journey. The destination? Better productivity and organization. Along the way, I’ve read thousands of productivity articles, a few books, and tried hundreds of different apps, shortcuts, and systems.

What follow are the tools I’ve adopted to make web development more productive. However, many of these are applicable to any flavor of development and some will apply to any sort of computer work at all.

Monday #1: Firefox bookmarks – Not just any ol’ bookmark, each Firefox bookmark is customizable with a keyword that lets you enter it into the location bar instead of the URL. So, for example, if I want a shortcut to my shopping cart page named ‘sc’, I first create the bookmark the way I would any other bookmark. Then, I right-click on the bookmark in either the toolbar or the Bookmarks menu and click on Properties. I enter a keyword (‘sc’ for example) in the Keyword field and click ‘Ok’. Now I can type ‘sc’ + Enter to navigate right to the shopping cart page.

Firefox Bookmark properties

On our website, we use different URLs for testing than we do for production, so from the example above, I might set up a bookmark for the shopping cart test URL and give it a keyword of ‘tsc’. I’ve set up bookmarks for all the URLs I frequently hit for testing and it’s saved me a bunch of mousing around.

Got a better way to do it? Let me know in a comment.

And stay tuned for a long post this week! I’ve got a post or two marinating that I think you’ll find tasty.

What? Mouseless browsing in Firefox without an add-on?!?

September 10, 2007

Please shoot me. As long as I have been using Firefox, I only today tripped across this Lifehacker post from November of 2005: Hack Attack: Mouse-less Firefox Whoa.

One of my most bemoaned activities in life was browsing the internet because I always thought it had to be so damned inefficient. Yeah, I could get to the address bar (CTRL + L), use a keyword for any bookmarks (right-click a bookmark, enter a keyword into the Keyword field, type the keyword into the location bar + Enter), or launch a Google search in a new tab from the toolbar (modify about:config together with CTRL + K), but I still had to use the mouse to click links. Yuck!

I normally don’t do short posts, but I’m banking on the fact that some of you may not have seen it either. Very cool stuff!

Trust me: don’t fire that bad developer just yet* (part 1)

August 28, 2007

You know this person. For the sake of this post, let’s assume it’s a guy. And this particular guy is obviously the worst developer on your team.

He’s been at your company for a month or two. He doesn’t understand your code base. He doesn’t understand best practice paradigms (yes, I know they’re open for debate, but assume I’m talking about your best practice paradigms). He doesn’t listen when you offer feedback. His communication skills are, as a good friend of mine might say, sub-optimal. He requires more attention than developers that are twice as capable.

But please don’t fire him yet.

Ok, some of you can (and should) fire that guy out of a cannon, but don’t even think about it until you’ve given him a chance. Let me be clear: “a chance” consists of the following elements.

  1. Clear direction: He needs exactly 1 boss. Not 1.5 bosses. Not 1 direct supervisor and 1 director that sometimes hands him other assignments. 1 (ONE) boss – no more no less. If every assignment isn’t funneled directly through that 1 boss, additional lines of communication have to be established. And that doesn’t work. Ever.

    Office Space is funny because it resonates truth with anyone who’s ever been in a situation where he has multiple supervisors and none of them fully know what’s going on. Believe it.

  2. Well-defined expectations: This is tightly coupled with direction. Our hypothetical developer has to know what’s he’s supposed to be doing and what result is expected. When do you expect him to be done? And what does “done” consist of? Experienced developers tend to make the assumption that everyone knows good code from bad. So do you want his assignments “done” or “done well”? If he doesn’t know the difference, is that his fault or yours?
  3. Consistency: If you can’t offer him a consistent work environment, don’t expect him to be successful. People need schedules. People need a degree of certainty. People need to know that scheduled meetings will happen at the scheduled time for the scheduled length. They need to know that project decisions are made the same way every time. (Side note: if your organization doesn’t make decisions the same way every time, you’ve got other problems. In that case, it’s your job to insulate your developers as much as possible and create a consistency bubble around your team)
  4. One code review (at the bare minimum): If he hasn’t had at least one code review and the opportunity to respond to the review feedback, don’t fire him! I don’t care what your mentoring process is (you do have a mentoring process, don’t you?), there’s no substitute for getting constructive feedback from a group of your peers. I’ve seen poorly performing developers make a 180 after a good code review or two.

In part 2, I’ll talk about what you’re leaving on the table when you fire someone too hastily.

*No, this isn’t about me. I hope. 😉

The problem with Compensation

August 10, 2007

(Disclaimer: I have not always followed what I have written below, as my co-workers would attest. I’ve learned and changed over time. People do that sometimes ::smile::)

Tech blogger Ellis Benus just posted a link to a post about programmer compensation entitled, predictably, Compensation. While an entertaining, obviously impassioned read, the overall sentiment is not one that I can agree with. And since that sentiment seems to be so common in IT, I thought I’d address some of its elements.

First, there’s this:

Most of [the software managers] are your average Econ 101 bean counting weenies. I can hear them now, “We can only afford to give three to five percent raises each year, because if we paid everybody what they deserved, then we would be spending too much. And what is it that these programmers do anyways?”

If most software managers are, in fact, “your average Econ 101 bean counting weenies”, how are they supposed to know what a programmer “deserves”? In my experience, the overwhelming majority of people simply do not understand what goes into software development and I think most developers (including the author obviously) would agree. However, if that’s true, how could they EVER pay someone what they deserve? What would they base it on? (See next paragraph for the answer!)

What’s the criteria for this “pay me what I deserve” scale? If it’s truly someone without a programming background determining the progammer’s worth, the only possible way they could pay him/her fairly is by trial-and-error, i.e. go through the experience of having both GOOD programmers and BAD programmers. This scale is necessarily relative in nature. After all, if you only ever had good programmers, how would you know they were good? Without sufficient experience, I don’t believe it’s possible.

And then there’s this:

A more likely scenario is that this bright young coder will finally break down and take a call from one of the bottom feeders, I mean head hunters, and he will land a job, somewhere else, making what he asked for, and taking all the things that you’ve taught him over to someone else. [. . .]

Oh no! Poor guy – he’s making what he asked for. Seriously, I get a little tired of the “poor me” approach some developers take. “The users are asking for something stupid” or “They’re making me do this”. So? You readily admit they have no idea what’s involved in your job. Does complaining about it serve a purpose? Unless your goal is to waste time and irritate folks who have constructive things to do, I don’t think it does.

We’d all do well to keep in mind that ANY relationship, work or otherwise, is made up of 50% one party and 50% the other. You each have responsibilities and options. In this scenario, the programmer exercised his right to better his situtation. The system worked as intended. End of story.


And guess what. In order to replace him, you are going to have to pay the new guy as much money as he was asking for in the first place. Plus that nice 15% fee to the head hunter. And now, because you were trying to be cheap, you have to spend even more than what you should have spent in the first place. And God knows, you’ll probably screw it up with this guy too, and thus the circle of life continues.

Maybe managers aren’t trying to be cheap. Maybe they’re trying to be fair and they’re just missing the mark. Hopefully, the manager will learn from experience, do some research, and offer better compensation in the future. When did managers stop being people? When did they become immune to making mistakes? Being afforded the opportunity to learn from mistakes? And growing as individuals? Why are people so quick to forget that managers are people, too? They have bad days. And they do dumb shit sometimes. You may not realize it, but so do you. Every day.

So managers don’t know what developers are worth? Well, neither does anyone else. If you don’t like it and don’t understand human nature well enough to deal with it, find a shop where you are satisfied or do something else for a living.

The rest of us developers will keep writing code and being nice to users. And we’ll be fine without you.

$5.95 – All you can meet

August 7, 2007

Just a reminder: 95% of the time, if you leave a meeting without a clearly-defined, actionable item, the meeting was a waste of time or you shouldn’t have been in attendance.

In our office, we do a pretty good job of avoiding unnecessary meetings. However, there is the occasional status-update meeting wherein one person talks and everyone else listens. Then the next person talks and everyone else listens. Repeat until everyone (sometimes 15+ folks) has said his/her piece. By and large, these meetings can be replaced with a well-written, itemized email.

A couple of benefits to this approach:

  1. It’s historical. You have an immediate, easy-to-archive record of everyone’s project status from a moment in time. This avoids the pitfalls of poor memory or poorly-taken notes.
  2. Everyone saves time. They save the time it takes to sit in a meeting; time taking notes; time discussing the meeting topics later because they can’t quite remember when Joe said he would be finished with the Shopping Cart module and why he’s still waiting on Suzy to finish the Purchase Order module, etc.

Ok, my trainer is giving me the eye. Back to class! (FYI, I’m in Denver training through the end of the week)

The art of the life hack

August 6, 2007

I read about life hacks all the time, but it’s taken me awhile to understand their full potential. Life hacks, quite literally, will change your life.

Let’s talk a bit about what a life hack is. A life hack is anything that can remove clutter from your life, help you be more productive, enable you to save/make money, or any combination of the above. The trick here is that it should be simple. If it’s not easy to implement, the chances of it making a sustainable impact in your life are slim. The idea is that a series of small steps lead to a better life, wherein you’re more fulfilled, successful, focused, and self-aware. Life hacks may come in the following flavors: productivity, minimalism, uncluttering, frugality, economy of effort/motion, or plain ol’ efficiency.

A few examples (some I’ve mentioned previously and some I haven’t):

  • Merlin Mann’s Inbox Zero system (productivity, economy of effort, uncluttering)
  • LifeHacker editor Adam Pash’s Texter (economy of effort, efficiency)
  • Keyword launcher Launchy(efficiency)
  • Keeping a detailed project and task list with actionable, verb-centric items (productivity, uncluttering, efficiency)
  • Using Google Calender to track, share, and receive configurable reminders about your schedule (and you can even manage it via text message- how cool is that?) (productivity, uncluttering)
  • Subscribing to RSS feeds from sites like DealHack and Bargainist to find free or dramatically discounted stuff (AT&T & Amazon paid me $10.02 to take a new BlackBerry 8300 Curve) (frugality)
  • Paying your bills online manually or automatically instead of via snail mail or phone

Some excellent places to find life hacks

As a side note, the ultimate life hack is a good partner. This could be friend, relative, co-worker, spouse or all of the above (eww). Seriously, though, my girlfriend is a motivator, organizer, and co-financial planner. Plus, we’re very much alike despite the fact that we aren’t related. (Hey, I’m from Tennessee. I have to be clear about these things).

What it’s like to live in a cave

August 4, 2007

It’s cold and damp. There’s no light, really. And when you’re in this cave and you want to know if there’s new content you want to read on the internet, you have to actually type in a URL, navigate to a particular website, and look for clues that someone’s made an update. Sounds awful, doesn’t it? Nevermind the occasional attack by previously-hibernating, currently-starving bear.

Without RSS, I was living in a cave. It didn’t feel like a cave, but after I realized the power of having content delivered to me instead of going looking for it, my perspective changed completely. And you thought bookmarks were a time-saver – ha! The bear I mentioned? Well for me, that’s analogous to all the new technology advances that I was missing because I didn’t have time to scour the ‘net. Inevitably, I’d miss something important that would eventually come back to bite me.

This explanation is so 2001, but here goes: RSS is an acronym for Really Simple Syndication. It allows you to subscribe to web sites that enable RSS feeds. When feeds are updated, the content is delivered directly to your feed-reader. So instead of 10 (or, like me, 50+) places to check for new content, you have 1. Your feed-reader can either reside on your computer (FeedReader) or it can be web-based (Google Reader, Fastladder). I prefer web-based because it allows you to read your feeds wherever there’s internet, but there are benefits to both approaches. Specifically, Google Reader is my choice for reading both on my laptop and on my BlackBerry.

Once you’ve got your reader, the next step is get some feeds. Here are some of my favorite at the moment:

So get started already. If your favorite sites don’t offer RSS, drop ’em a line and ask them to. Hopefully, you won’t have to explain it to them, but if you do, you can always make the point that the more convenient it is to read their content, the larger their audience. I’ll explain why they may be reluctant in an upcoming post. . .

My co-workers think I’m left-handed

July 30, 2007

As I was explaining the virtues of left-handed mousing to one of our web designers, he replied, “Yeah, but I’m not left-handed”.

Well, neither am I. So why do I use the mouse with my left hand? 3 reasons, really:

  1. Ergonomics – Switching to my off-hand for possible RSI-inducing tasks helps reduce their impact. My right hand and wrist don’t bear the full brunt of 10-hour days of software development.
  2. Balance – Call me a nerd (because I am), but I like the idea of being equally adept at doing things with either hand. Sometimes I brush my teeth left-handed, use a fork left-handed, and shave the cats left-handed, too. Ok, made that last one up.
  3. Economy of motion – This one was a by-product. One of the first things I noticed when I started mousing left-handed is how much more efficient it is. Here’s why: think about the distance your right arm travels as you move from the mouse to your home keys (jkl;) and back again. Unless you’re doing ten-key often (and I hope you’re not – sorry, data entry folks), that’s wasted effort. Depending on the size and configuration of your keyboard, that’s an extra 4-6 inches of motion every time you switch. If that doesn’t sound like much, think about how many times you do that during the day. If you’re like me, it’s in the hundreds. But, with resources like Smashing Magazine’s 200+ Hotkeys To Boost Your Productivity, I’m getting better all the time.

Sure, it’s hard at first. You’ll notice certain shortcuts aren’t quite as accessible as they used to be and you won’t have as much coordination as you did. That’s ok – you’ll adapt and the coordination will come. And when it does, you’ll be impressed that you got used to it as quickly as you did.

I know I was.