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 »

 

So, I just got through doing a weekend marathon of programming on WordPress.

I ported Click, or in-house MVC style framework to WordPress and made a few plugins to release our main marketing machine as a paid service. (I long ago built this thing that we lovingly call “The Harvester” which helps us identify good lead prospects and business).

WordPress 3.x is fantastic. You can install themes and plugins right in the WP admin, and their community of projects and support is also very strong.

Overall, WordPress remains true to its motto of simplicity. Their stuff just works and that’s nice. I didn’t have the same experience with Drupal 7. Maybe I’ll rant about that more later.

 

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!

 

Here are some thoughts on how to get your web developer to understand you better.

I spend a lot of time thinking about how to be a better communicator. I think I’m pretty clear, and I wish everyone else would just try harder :) But alas, it’s up to me to make sure my message is understood. So here are some things I think about:

1. Use fewer words. Is there a shorter way to say it? Say it that way. I can’t prove it, but I have a notion that there is a signal-to-noise ratio in language too. An excess of words, or alternate phrasings, or variation makes it harder to understand. I know that educators recommend saying something three different ways (I’m making that up), but I feel like silence is another effective way to punctuate or underscore the importance of a point. If you just keep running on like I have in this paragraph, people will forget what you’re talking about. Do you remember yet that I was talking about using fewer words?

2. Consider high bandwidth communication mediums. Phone or in-person is best. Texting is worst. Between those poles lie video chat, email, tweeting, etc. Just consider that the amount of information relayed through a real-time phone call is very rich. It allows for a conversation. Have you noticed that voice mails are sometimes hard to comprehend? Many times, I find myself calling people back because, although I heard their voice mail, I didn’t really comprehend the message. Something about a real-time conversation changes that. Voice mail, email, twitter, Facebook, and snail mail are all asynchronous. Handy for exchanging hard data, but terrible for conveying complex concepts.

3. Assume people are trying their hardest. I think this is key to understanding and being understood. I’ve learned that the vast majority of people are trying their hardest to balance all the challenges in their lives. Yelling louder or pounding the table may get what seems like a temporary result, but a better approach is to….oh my god, flashback, I just remembered one of the Seven Habits of Highly Effective People: “Seek first to understand, then to be understood.” Wow. There is a lot of meaning in that statement for me, especially since I just invented it again. You may get what seems like a temporary win from table pounding, but a better approach is to understand the complex challenges your listener faces and, through that understanding, build trust that your message will help their lives. Then they are ready to receive.

I don’t know; I try to do that with this blog. I hope someone likes it!

Let’s see how many of the 7 Habits I remember without looking them up:

1. Put first things first
2. Seek first to understand, then to be understood
3. Sharpen the saw
4. ….

Yup. Well I hope those were the important ones. Here’s the real list:

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

I think I’m going to make some notes on these and post it separately.

 

I just had a little insight about the CMS world that I wanted to share with you.

Whether you’re on WordPress, Drupal, Magento, DotNetNuke, Joomla, Mambo, or some other CMS, they all have a few basic concepts covered.

1. Themes – the idea that one look/feel should be easy to replace with a different one. Each CMS has their own incompatible approach to themes, but all themes within a single CMS are supposed to be substitutable with one another.

2. Static Content – here, we’re talking about stuff that the admin can log in and edit. Contact information. Frequently asked questions. Company history. Each CMS solves this differently, but the result is fairly uniform: you get a menu item in the navigation that leads to a page of content that you can edit from the administrative interface.

Most CMS’s are approaching theming and look/feel as a ‘all or nothing’ approach, where you just choose the template that suits you best. Customization and polish beyond that requires a programmer to hack into the template code and make tweaks by hand. They do it this way because templates must support specific constructs and features in order to be substitutable with one another. Once you start customizing a template, you run the risk of making it difficult to swap it out later. A lot of people prefer to retain that capability in case they find a nicer looking template down the road. Other people choose to commit to a single template and customize it to such an extent that it could never be replaced by another without a lot of additional effort and rework.

So what’s the best approach for you? Really great question, let’s talk :) In general, I recommend erring on the side of having a theme that’s too generic but compatible rather than a theme that’s highly custom but slick looking. There are other approaches to development, but the programmer in me wants to see you say with ‘stock’ options as long as possible. The artist in me says “Nay! Be pure and brave! Build from scratch and make it better than the world has ever seen!”

I like both ideas. What’s right for you?

 

Here’s a thought model that might help you get a better feel for how I understand and evaluate complexity. If you ever find yourself worrying that you might understand your business so well that it’s hard to explain to others, this might also put those concerns to rest.

I hope I don’t offend anyone by posting this. I think it’s small enough that you can’t really make out the details anyway.

This is an example of a real database. Let’s suppose it’s your web site.

This is what we call existing code. Someone else has written it; someone else thought it through; it makes sense to someone else, but that person it’s around anymore. You’ve just hired me. Understandably, you want to be impressed with great price, great speed, and great quality. You want to be wowed. But what is great value? Our definitions of “wow” will be very different if I see complexity differently.

The human brain has surprisingly strict limitations on the amount of information it can process, and there is very little variation between “smart” people and “stupid” people. While raw memory may not vary that much, problem solving approaches vary greatly. Not all men are created equal where complexity is approached, contained, and processed.

I know how to handle complexity. Sometimes it can be ignored, sometimes it can’t. For example, if I know a certain task is going to land me squarely in the middle of this database, I will be reluctant to avoid understanding the database up front. If I’m creating something for you that never touches this database, I’m more likely to be comfortable advising you that it’s okay to ignore it and move forward at full speed. I understand the danger of over-simplifying something that is obviously complex but not yet understood. You need someone who knows the difference.

Let’s suppose you know your business well, and you think this database makes perfect sense. I, being new, will certainly disagree. Where do we go from here? Our choices are not great:

A) Make risky choices for a temporary wow effect

B) Take the time to really understand what is going on, and forego any hope of an immediate wow

These aren’t great choices. A is no good for me, and B is no good for you.

At the end of the day, I may need to pass on this project. Part of my job is to provide you with the necessary and consistent resistance required for you to make good, informed choices. You can’t do that with someone who resists but eventually caves in their supposed area of expertise. What if your heart had a pinhole rupture, and you knew it? And what if you found a doctor who correctly diagnosed it? Now – and imagine with me here – what if you were able to talk the doctor out of his diagnosis? You could never trust that man. He’s not confident enough in his talent.

This database diagram came from a real client. I truly believe that the client understands the complexity, and I think he knows that there is no shortcut. But he’s searching for one anyway. My job is to withstand the test.

I’ll let you know how it goes :)

 

Do you ever get the feeling that people are making web development a lot more complicated than it needs to be? I have something to make you feel better.

Today, I was alarmed to learn that the universe was much larger than I had imagined. This is going to sound funny to a lot of you, but I’m not afraid to admit ignorance:

1. I assumed our galaxy (The Milky Way) had thousands of stars because I could see them. It has billions.
2. I assumed that streak in the sky, ‘The Milky Way’, was a bunch of star-like dust or whatever; not really stars. It’s all stars – the visible part of a solid core of stars – and we’re staring right into the center of our galaxy.
3. I assumed the all the “real” stars I was seeing were just kind of ‘in space’. I suppose in a sense, I forgot about galaxies. I thought it ended with the stars I could see.
4. I assumed there were perhaps a couple other galaxies, like Andromeda. There are billions.

I didn’t really ever think about how it all fit together. I was just walking through life comfortable with what I imagined. It fit well enough with my model of reality. Ignorance is truly bliss. My mental model of reality was working fine; I was happy. The size of the universe worked well for me, and I didn’t have any reason to suspect anything else. I recognized my version of the universe as complex, but my version was huge orders of magnitude less complex than it really is.

The point is, none of these assumptions make any sense or hold up under analysis. If I had stopped to think it through, just a little education would have caused me to realize the error in my thinking.

So naturally, I panicked. How far did I need to tear down my understanding of reality before I could get on the right track again? Here are some realizations:

1. Forget light speed travel. We can’t even get out of our own galaxy at that speed. 10 times light speed wouldn’t help. We need to completely re-think the idea of travel and universe exploration.
2. Even if we could go fast enough, the idea of a little bubble of air traveling those vast distances seems impossibly precarious. There must be entire galaxies exploding out there. By probability alone, it seems our bubble would be burst.
3. Intelligent life. I can’t decide; on one hand, it seems very probable given that there are trillions of stars. On the other hand, life exists in such a narrow and delicate band of conditions that it may be much less probable than the numbers reveal on the surface. In any case, there is nobody close by.

So this brings me full circle to you, and web sites, and the Internet in general. Here is an article that talks about IPv6, an extension of a basic Internet protocol in reaction to the ever-expanding need to transfer data.

Suppose the Internet is the universe (it is for web sites). Do you know how big it is? Do you even have something to compare it to? And what about all the diversity that exists in the Internet? Blogs, social networks, videos, still images, audio, apps, web sites, APIs, protocols, text, SEO, languages, databases, XML, machine code formats. Do you understand all of that stuff? If you treat the Internet like I treat the universe, you haven’t even sat down to think about it. And now that you sitting and thinking about it, questions are starting to come up. Your simple assumptions aren’t fitting as nicely as you thought. Web sites are quite a bit more complicated than you imagined in your simple model of things.

As a web site user or Internet user, you’re like me with the universe: a user. No need to understand the details. But when you cross that threshold and become a creator, suddenly the details are important and things get complicated quickly!

I’m your experienced traveler of the Internet universe. Welcome aboard. Just don’t ask me about theoretical physics.

 

The economy may be in a recession but what about the e-conomy?

A recent article out of England got me thinking about this idea that there are really two economies running parallel to each other right now. England reported it now has an Internet based economy that will surpass the financial sector or even the construction industry by 2015. This year they will see over 100 billion Pounds in online sales accounting for 7.2% of their economy and 62% of Britons report that they’ve already made an online purchase this year. G7 countries are losing their manufacturing and industrial base to emerging economies but the second, e-conomy has the potential to fill in some of this gap with high paying jobs that allow a level of freedom and independence previously unknown.

Yes, the US economy is slow. But those of us in the e-conomy are fortunate enough to sit in the middle of one of the only sectors that is growing and unbound by national borders. Yes, some of the hockey stick charts documenting the exponential growth in mobile devices and online sales are starting to flatten out some but they still show the characteristics of a growth sector with lots of opportunity. All we need to do is figure out how to tap this market as it constantly evolves and changes in the most dynamic ways overnight. Opportunities to break in on the ground floor emerge with every expansion of technology from iPhones to social networks like Twitter and we see examples of people founding virtual empires inside of 5 years by the dozens. Forget the Facebook story, and just consider the success of Farmville or Mafia Wars and the millions they’ve made riding the coat tails of a bigger trend. The opportunities in the e-conomy are still massive.

Holiday online sales in the US this year alone are expected to grow at a 15% rate to around $30 billion against flat retail, brick and mortar sales. The environmental movement (cap and trade) and higher energy costs will only help this trend as people opt to shop at home and have things delivered rather than crossing town and dropping a half a tank of gas to go get a new shower curtain. Basically, we have a lot of room to grow our e-conomy and few reasons to expect it to stop any time soon.

The globalization of the e-conomy and its ability to tear down borders is also quite inspiring. While we’re sitting at 9.6% unemployment, countries like Germany are seeing the lowest rates of unemployment in 18 years. Much of the global economy is doing quite well right now, even continuing or exceeding its pre-recession growth in areas like the BRIC nations. The smart investors of today will find a way to tap these global markets and re-patriot some of that global growth.

The service economy has typically been considered the red headed step child of the economy, many of us work in it and we realize its not like building cars or bridges. We understand that what we do is crucial to our day to day existence but unless we can export goods and services to other nations we can never grow our economy in a healthy way, so we need to think bigger. The Internet allows us to bridge this gap in many ways, if we can invent and develop the best technologies, we can sell them to millions of people around the world, partially filling in the gap left behind by our manufacturing sectors. We may not be a leader in the manufacturing of cell phones, but we are the leader in writing the software that makes them cool.

 

This month, I’m all about Drupal 7 because it ties into Benkido so much. What is it about D7 that is so in tune with me?

Several years ago, I looked at my project history and spotted a trend. I’ve done a lot of writing about the trend in the past, but basically it boils down to: PHP gets things done. Poeple – especially developers – immediately bristle. All developers know and agree that more elegant languages exist than PHP. And every developer I meet has a strong opinion on which language is most productive for him. But I meet very few developers – and by that, I mean none – who know PHP and other languages equally well and still disagree that PHP gets things done. It’s dirty, and messy at times, but that seems to model business pretty well.

So, I made a decision to try very hard to only work in PHP. At the time, Drupal was on version 6 and I still wasn’t happy with it. It was the best choice, but still not handling things how I wanted a framework to behave. I set about making my own framework, code-named Click because of the ease with which programmers could ‘click’ pre-written modules into the architecture.

Click served me and my clients very well for several years, but I kept watching Drupal because I suspected our paths would converge at some point. That day of convergence has finally happened. With Drupal 7, I have all the benefits of my Click framework, plus a very healthy community of other developers joining in with me.

In the coming months, I suspect I will be porting much of my Click code into Drupal as open source modules. I’m fully committed to D7 from this day forward.

Okay, but aside from D7 being like Click, why am I so in love with it? The answer lies deep within Drupal’s architectural philosophy. At its core, Drupal asks you to construct your web sites using an event-based approach to programming. Some might call it aspect-oriented. I call it the right way to do web applications.

Event-based programming means that Drupal announces something, like: “Hey, I’m about to draw the main menu. Anybody got anything to say about that?” And then the individual modules that comprise the features of the web site can each optionally chime in and add, remove, or re-arrange the menu items. Likewise, Drupal might annouce: “Hey, I’m about to save this piece of data. Anyone care?” And at that point, modules have an opportunity to opine. Drupal doesn’t need to know or predict what modules may eventually respond in the future – and that is the basic power of event-based programming.

Other frameworks, notably Rails, accomplish a similar goal, but in a far less interesting and extensible way. So it’s not a matter of this approach being impossible in other languages or frameworks; it’s a matter of it being done best in Drupal. Oh, and Drupal is written in PHP!

One of the ideas I try to bring home often is that the basic ideas of software design and technology don’t change. They just get renamed and repurposed. Event-driven, or aspect-oriented, or late binding, or whatever you choose to call it – is, I believe, the most powerful programming model for web applications. I don’t love Drupal because it has a fun name, or a friendly inventor. I love it because it is the most elegant implementation of the core programming concept most suitable for web applications.

And don’t you want your web site built on that? Drop me a line, we’ll talk.

 

This holiday season will mark the release of one of the biggest potential market expansions Google has ever seen. Teaming up with Sony, Google will introduce the much anticipated Google TV just in time for Christmas.

My first reaction was mixed, but after reading some of the releases from Google, I have to reconsider. The biggest factor in play is the simple fact that Americans are glued to their TVs 24/7. We are a nation that spends about an hour a day surfing the web but an additional 5 hours watching TV. Google sees this as an opportunity to get 5x more face time per day with its customers, WOW! If you think of the way that DVRs and cable boxes have penetrated American homes, we can opportunistically expect this device (or one like it) to have almost total market penetration in 5-10 years.

Why does this matter to you? Anyone can develop content for Google TV’s open platform through made-for-TV websites, and, starting in 2011, Google TV apps.

When the iPhone came out people were able to make big bucks writing apps that did almost anything. As the number of apps in the store increased exponentially, it became harder and harder to find that special niche that would allow an investor to turn a quick buck. Now, with the introduction of Google TV, we may just be sitting in front of the next big opportunity for the application market. And it could be a lot bigger than the iPhone, a whole lot bigger in fact.

As soon as 2011 we will be able to introduce specific apps designed for Google TV which will be supported by the Android platform and, right out of the gate, you need to start thinking about optimizing your site for TV. What people will want and where the money will be made is still up in the air but we know that these types of events give us a special opportunity that may only come up once a decade or so. Maybe a simple weather application pegged to the desk top could find 100,000+ downloads in the first few months. Maybe we will have to invent a way to tag all your favorite shows or filter out specific actors you want to see. Its hard to say. So early in the game we can only speculate as to what people will want. Even Google says “the coolest thing about Google TV is that we don’t know what the coolest thing will be.”

The main reason I see this as revolutionary is that its hard to get on TV. I mean, up until now, its been almost impossible for me as an individual to write and produce a TV commercial and buy up the air time to get it out there. The economies of scale made that too difficult for less than 6 figures. But now, if your app gets downloaded you can start feeding targeted ads directly to people’s televisions in an affordable way for the first time ever. When has it ever been this easy to get people’s attention, on their couch, during that crucial 5-6 hours of daily ‘down time’? Never.

Basically, its time to put your thinking caps on. The people who are first to market will have a massive advantage that will only diminish with time. If we can help you formulate a basic app that can be useful to millions of people, and do it early, we may just be able to help some people make big money at a time when the economy is less than friendly to new ideas.

Check out these links to learn more about this cool new product that’s bound to be on top of the Christmas wish lists for millions of people. And who knows, it may even end up being a genuine tax deduction if your Google TV app hits big, making it a gift that truly keeps giving.

http://www.google.com/tv/

© 2011 Ben Allfree :: Painless Programming