I’ll just go ahead and proclaim myself the King of Craigslist until somebody else steps forward. I think I did more business than any single person last year. (By the way, freelance programmers, try Ben’s Gigs – shameless plug!).

This article is about how to find good help with your project.
Continue reading »

 

What to get what you want, more often? Well me first and me too. Just kidding :) I have some ideas.

There is a famous book called Seven Habits of Highly Effective People. Here is a short summary of what the book covers.

Briefly, here are the habits:

1. Be proactive
2. Begin with the end in mind
3. Put first things first
4. Seek first to understand, then to be understood
5. Think win-win
6. Synergize
7. Sharpen the saw

It’s really hard to argue with any of these. But I can augment and enhance them.

2. In today’s software and web development world, there is no “end” per se. What is important is that you have a specific way to test, in positive terms, exactly what you want to do. I see a lot of people stumble when it comes time to define exactly what they want. What they really want, no kidding aside, is to be happy. But that concept is very slippery and it can change faster than you think. Just today, someone accused me of being a common thief. But if you look at the project history, it’s easy to verify that things got done just as agreed. The only thing I didn’t deliver was happiness, which of course isn’t something I can promise to anyone. We forget that the things we do don’t guarantee happiness.

5. The power of win-win is that it gets you thinking about what the other person wants. The other person doesn’t really care about whether you win or lose, as long as they win. So by thinking win-win, it puts you in that important understanding-seeking mode while looking out for yourself at the same time.

6. I have yet to see synergy work in the wild. Have you? Send your stories and comments below!

 

I talk to a lot of prospective clients and can divide them into two groups:

1) those who want to transact business
2) those who want something else

It’s easy to tell. The people who want to transact business call with a specific project objective, ask specific project-related questions, and make their decision within 5 minutes.

If you’re not able to do that, you are in the Something Else group. It means that for whatever reason, you are standing in the way of your own success. Here are some clues to self-identify with group #2. If you find yourself using words like these, it’s time for a reality check:

* simple/quick/easy/just (“This is very simple…”)
* future (“If this goes well, there will be more work in the future”)
* explain (“What I really need to do is sit down and explain this to you”)
* local (“I need someone local, someone I can see”)
* reliable/expert/top-notch/ninja/guru/coder/scripter (“I’m looking for a ____”)
* no/not (“No offshore. My project is not like the others…”)
* percent (“This project is 90% done, I just need to…”)
* skills/test/strong (“There will be a test to see how strong you are…”)

Let me explain why all of these words are bad news: they are ways of talking about yourself and the “soft” qualities you seek instead of stating plainly and simply what the job is.

One reader wrote in to say that these were simply ways of assessing attitude, skill, and competence. I don’t disagree. My assertion in this article is that if you are choose to do so in these ways, you are in trouble. You’re telling a lot about yourself and your project by what you choose to focus on. If you focus on soft qualities instead of explaining exactly what the job is, my assertion is that you do not know what you want. The people in group #1 evaluate soft qualities while talking about their concrete objectives. You can too, if you know what you want.

Think something is simple or quick? It isn’t, or you wouldn’t be asking for help. Try taking the line out of the project description and see if the essence of your goal is still intact.

Will this lead to future work? The fact that you needed to mention it means it’s a little too important in your mind. It takes the focus off the present. Try omitting future talk.

Feel like you have to explain the project to me? Your project is broken until it can be decomposed into logical steps for others without background information. Trust me, the back story is not necessary if you know what you want today.

Need someone local? Working with embedded systems might be the one exception to the on-site requirement, but otherwise I think it’s another indication that you don’t know how to get what you want. It seems easier if you can sit down with someone face to face. It might even be easier. The point is, you’re confused about what you need and that’s a red flag.

Need an “expert” who is a “reliable ninja”? That says to me that you are looking for a mind reader. That’s why the last normal programmer did not work out. Try skipping subjective qualities like this and focus on the specific, objective qualities you do need.

Spending time in your ad focusing on negatives or explaining what the project is not? There is a whole universe full of things that are not your project or not your ideal programmer. Only you can describe what your project is and who the programmer is. Try removing talk that is unrelated to your goals.

Is your project 90% done? Avoid inserting your own estimates. I have to make my own anyway. There’s no useful information there, other than expressing hope that it’s close to being done. And every time I hear this, I know the project is nowhere near done.

Got a test for me to take? This is debatable. Yes, coding is where the rubber meets the road but I think you should be able to pre-qualify candidates without the test. Pay them to spend that kind of time if you really want someone to offer what is essentially a sample of the service you will receive.

Again, none of these things are outright wrong, I have just found over thousands of project meetings that placing focus on these areas invariably indicates deep problems with the project fundamentals.

 

So I’m pursuing a goal where my business is automated 100% end to end, from marketing to billing. It’s not easy. You have to automate stuff, then you have to automate monitoring, then you have to automate responses to monitoring. You have to plug all the terminal paths, i.e., any path that leads to human intervention. You have to pick problems that don’t have too many terminal paths.

See, I like to code things for myself and clients. I hate to market, I hate to make phone calls, I hate to do invoices. I hate making specs. I hate estimating. I hate lame ideas. I pretty much hate everything except the pure kernel of goodness that is actual enduring work and would prefer that everyone just trust me when I say how great I am and move forward on that basis. But not everyone does.

So I’m wading around in cron jobs, init.d scripts, crawlers, indexers, autoresponders, and any other sort of self-service tool.

I’m being pragmatic about it, and here’s the point of the post: the first time something blocks me from good work, I stop to automate. That’s my simple strategy. I see a leak, I plug it. I am not sitting back thinking about which leak to plug first or how best to plug it. I plug it and move on. That’s why stuff like daemontools is potentially interesting to me (I’ll write about that next).

I can feel the tides turning. Once I have things automated and then automated monitors to check and restart things that fail, the path should be cleared for actual work. Monitors may not be that far away from a self-healing type of system too. When an exception is escalated to me and I fix it, I’m going to seek to fix it first by making sure it never happens again, or if I can’t do that, automate whatever I did to fix it.

 

I was working on a PHP app today. Just a plain old, nothing fancy, queries-right-in-the-code, edit-it-live-on-the-server PHP app. And you know what? I got shit done.
Continue reading »

 

I’ve been talking with more clients lately about Joomla. The Content Management System (CMS) is not dead, oh no, not dead at all. I’m not sure how PHP’s Joomla compares with a CMS like DotNetNuke, but my suspicion is that Joomla is far more widely used and probably has more modules and plugins too simply because the whole thing is open source.
Continue reading »

 

I am getting good at setting up the subscription management infrastructure that you need to run a good paid service.
Continue reading »

 

I’ve had this idea for a while that the principles of Test-Driven Development (TDD) or Behavior-Driven Development (BDD) could be applied to everyday living with spectacular results. Below is an untested adaptation of TDD principles to life.
Continue reading »

 

I run the “surgeon” model of development: an expert and one or more assistants.

The first place I read about the surgeon model was in Fred Brooks’ book, Mythical Man Month. In it, he describes a configuration where one expert uses several assistants. The expert tends to ambiguity: high-level crafting, planning, and architecture. The assistants tend to tasks which are important but well defined.

Continue reading »

 

I use Mac OS X almost exclusively. Here is my list of things I would change.

Continue reading »

© 2011 Ben Allfree :: Painless Programming