Friday, February 22, 2013

Humbled at Spark Nashville

Last night I had the pleasure of attending Southern Alpha's Spark Nashville event. We had some great food, drank some good beer, and heard some fun stories of early tech days in Nashville from Marcus Whitney and Nicholas Holland. In addition, there were some fun pitches for various company ideas.

My primary reason for attending was to support my friends Jacques Woodcock and Jason Myers and hear their pitch for Sucratrend (which won the viewer's choice award, btw. I like to think my tweets and RTs helped).

Earlier in the day, when I mentioned I was going, I was amused at Jacques' reply:

Jacques (and those who have read my blog and my thoughts on business and profit), knows that I'm not a huge fan of VC money when it comes to "startups". The main reason being, I like what I'm familiar with, and I've only ever bootstrapped. I'm also not a fan of debt (having worked for Dave Ramsey for almost four years). Giving away equity may not be the same thing as debt, but on the other hand it might be worse. But I won't get into that here. Different strokes for different folks.

For me, the event was a great success. I'm about to get vulnerable here, so cut me some slack. At times, I can be a little scatter brained (just ask my wife). Months ago, I distinctly remember asking my business partner about buying a ticket for Spark. He was totally on board and (in my mind), I bought a ticket with the company card.

As I was driving to the event last night, I started to second guess myself. "Why didn't I receive a reminder email from Eventbrite? I... did buy the ticket... RIGHT?" I'm ashamed to admit, I started using my phone while driving in the rain to check my email.

Nothing.

Now I'm starting to feel like an ass. I happened to see this tweet earlier in the day and started to hope:

Guess who greeted me at the door? Before I could even finish my sob story of stupidity, Tara was already pulling out a ticket for me. How awesome is that? Big shout out to Aaron Sanders Law Firm for hooking me up. If you're doing anything in the tech space, please give them a call. They are extremely helpful, friendly, and awesome. They just might change your opinion of lawyers and best of all, they LOVE the technology space.

The night just kept getting better. Everywhere I looked I saw friends and smiling faces. I even got some compliments and words of encouragement about my involvement in building cool stuff and being part of the community. Someone even recognized me from a Barcamp and wanted to say hello. It was kind of surreal.

After the event, I had a great time hanging out with some friends old and new and talking everything from Agile development methodologies (Brendan Wovchko is amazing) to women in tech to RV living.

Another topic that came up (and seems to come up a lot in Nashville for some reason) had to do with the difference between those who are doing great things and those who just seem to be talking a lot. Need an example?

John Wark. Now there's a doer. He stopped complaining about not enough tech talent in Nashville but instead created the Nashville Software School to build some.

I won't give examples of talkers because everyone seems to have a different opinion of who those people are in the community and those judgements are probably unfair anyway. Let's take a different approach. Instead of talking a big game (or ridiculing those who do), let's humble ourselves, help those around us, and get stuff done.

Don't seek out recognition. If what you're doing matters, that will come when it's due.
But when you are invited, go and recline at the last place, so that when the one who has invited you comes, he may say to you, 'Friend, move up higher'; then you will have honor in the sight of all who are at the table with you.
- Luke 14:10
Whoever exalts himself shall be humbled; and whoever humbles himself shall be exalted.
- Matthew 23:12

Monday, February 11, 2013

I'm Not One of the Cool Kids; We All Are

This past weekend I had the privilege of attending (and sponsoring) the first ever SunshinePHP Conference in Miami, FL. I must say, Adam Culp did an amazing job organizing and executing this event. Every moment I saw him, he had on is his regular friendly, beaming smile. I've never seen a conference coordinator so relaxed! On top of that, from what I understand, his only staff was the ever moving Pablo Godel.

Great job, Adam! You certainly made it look easy (and we all know it was anything but). Among everything you had to coordinate, you somehow found time to drive Paul, Matthew and I to dinner the first night. You even let me borrow your laptop for my talk! Your willingness to serve those around you is phenomenal.

I loved hanging out with great friends and making some new ones. I also finally took advantage of the "hallway track." I didn't attend a session during every single slot. Instead, I slowed down a bit and hung out with guys like Keith, Cal and Joe. I met the creators of the tools I use every day including Sebastian Bergmann (PHPUnit), Jordi Boggiano (Composer), Fabien Potencier (Twig, Silex... if you don't know all the things he's done, you probably don't use PHP)... I could go on and on. It was amazing.

Oh, and did I mention the guy who started this whole PHP thing (Rasmus Lerdorf) gave the opening keynote? That was epic. I really enjoyed the history lesson and the "why" behind the decisions he made (which actually made sense at the time in 1993).


(If you're wondering where that stat comes from, you can look into it yourself at w3techs.com)

So on to the point of my post... as I was meeting and listening to these giants of the industry, schmoozing with the "cool kids" during the hallway track... I began to realize something.

There are no individual cool kids.


We're all the cool kids.


I got some really encouraging feedback on my Hypermedia API talk from people I previously thought were on another level. As I was meeting speakers in the hallways, I realized many of them do "the conference thing" quite a bit. They are conference regulars and are sought out to speak all over the world. They are what I had always thought of as "the cool people" when I was simply a "regular" conference attendee.

For a half second, I began to wonder if someone might think of me as "one of those" now that I've given this talk a few times. It was a humbling thought. I don't think of myself as someone special in the programming community. Other than helping start an ecommerce company, I haven't contributed much (yet).

It was then I realized a speaker isn't more or less special or cool than anyone else. We're all building and doing amazing things, and we're all on different stages in our journey. Whether you're just learning to code, or you've been doing it for years and contribute to the tools thousands of people around the world use every day: You are what makes the PHP community great.

As Cal said so well in his keynote, you are awesome.


Even if you don't feel like an expert and just started using PHP last week, guess what? You're probably an expert on what it feels like to use PHP for a week. Everyone has something to offer, and everyone contributes to the awesome PHP community.

So go build something awesome! As Keith so eloquently put in his keynote (I'm still thinking about the ideas he put out there), don't build a copy of something crappy thinking you'll hit the next gold mine. The next dating site? The next photo sharing app? The next Facebook? That's about as practical and as likely as a unicorn farting rainbows and pooping lucky charms.


Related note: When a friend like Keith looks at you with that "I'm up to no good" smile and says "I updated my slides", be afraid. Be very afraid. (If you missed his reference, we included this sticker in the sponsor bag which is from an image we built out for our 404 page)



In summary, the conference was amazing. The people in the PHP community are amazing. And as Larry Garfield quoted in the OOP panel discussion, "You are not a beautiful or unique snowflake." Whether you're a speaker or not isn't as important as being part of the community and helping make it better. Attend your local PHP group this month and help them out. If you didn't make it out to SunshinePHP this year, plan on it next year. While you're there, come find me and say hello.

Sunday, December 30, 2012

The $0 Startup

I haven't posted in a couple months because I've been busy tinkering with something. And no, it's not another crappy startup that can't raise any more money. (BTW, have you read that article? I think it's fabulous. Seriously, go read it. I'll wait.)

It started with a hackday courtesy of CoderFaire. The night before, I was thinking how great it would be to to build something I would actually use and somehow involve FoxyCart and Twilio in the process. I woke up at 5am that morning with an idea and couldn't get back to sleep.

The idea is pretty simple. We all have things we want to change in our lives, and most agree creating new habits (or breaking old ones) is the best way to do it. There are plenty of reminder apps out there, but we're too busy (or too lazy) to set up spreadsheets and track our progress as a form of accountability.

So how about a system that sends you a text message, asks you a simple question you define, and then graphs your replies?

That's the basic idea behind Track and Remind Me:



It's not pretty. Heck, I don't even have a logo yet. But here's the important part:

It cost me nothing to launch this site.

I literally spent $0 getting this hobby site off the ground (and yes, it's a hobby right now, not a startup). Here are the tools I used:
  • FoxyCart (free during development)
  • Twilio (also free during development)
  • PHP (free)
  • MySQL (free)
  • AppFog (first 2 gigs of application memory are free)
  • GoDaddy domain ($10, but I didn't really need this, as AppFog provides a nice, small domain for testing)
  • phpMyAdmin (free)
  • DNS (went with a free solution at http://freedns.afraid.org)
  • Google Apps (free, used for setting up email accounts, though they may be charging $5 a user now)
  • Bitbucket (a free provider of git)
  • Eclipse (a free integrated development environment)
  • Highcharts (I haven't made any money yet, so I still consider this testing a personal project. I'll buy a license and/or use something else when appropriate.)
Of course, nothing is truly "free" when you include the man hours (and I've put in a lot for this). Still, this is a fully functional "idea" that didn't require a penny of funding. As you may know, I've spent the last 5 and half years of my life bootstrapping FoxyCart. There is a place for funding (though I have no personal experience with it), but I also believe many of the "web" ideas floating out there right now should stay as hobbies. There's little point in raising a bunch of money, hiring a bunch of people, and spending 18 months or so to see if anyone cares.

You have nights and weekends just like everyone else. Try putting in some time first to see if your idea sucks. If you're worried someone can copy you and "beat you to the market," then you're probably not solving a very original (or difficult) problem in the first place.

Here's my advice for someone with a web-based idea:
  • Be the guy who can actually work on it (i.e. a developer). Don't expect someone to work on your idea for free unless that someone is you.
  • Solve a real problem you personally need solved (I need a reminder to run at least twice a week).
  • Think long term. If the problem you're solving won't be around in the future, is it really worth solving? If you're willing to go slow and steady, making many small improvements over time, you're on the right track.
  • Don't call it a "startup." You have a hobby. Until you see profit, you still have a hobby.
While we're on the topic, what do you think of my idea?

If you like it, hit http://trackandremind.me, set up some questions, and give me some feedback. For a limited time, I've got it adding a 2013 New Year's resolutions coupon to make the whole system free. Check it out! I still have some bugs to fix, but that's all part of the process.

Thursday, October 18, 2012

An Autobiography Worth Reading: Benjamin Franklin

2016 Edit: This post can now be found on Steemit here.

I was recently intrigued by an interview with Elon Musk, one of the most interesting entrepreneurs of our time (more on that some other day). When asked what books inspired him, he mentioned Ben Franklin's Autobiography.

My ears perked up immediately. I had just been researching Ben's Junto club but never really studied the man himself. Which is strange, considering he founded the very first university in America, one I was privileged to attend.

I loved this book!

I highlighted so many sections, it's kind of funny. I could relate to Mr. Franklin because of the faults he had (he basically ran away from Boston after steam rolling some people), but I was inspired by what he did to change himself. He was a man full of wisdom, inspiration, diligence, and virtue.

I'll add some of my favorite quotes below. Hopefully they will inspire you to give the book a read. If you're an entrepreneur, I highly recommend it.

On Communication and Persuasion

...retaining only the habit of expressing myself in terms of modest diffidence; never using, when I advanced any thing that may possibly be disputed, the words certainly, undoubtedly, or any others that give the air of positiveness to an opinion; but rather say, I conceive or apprehend a thing to be so and so; it appears to me, or I should think it so or so, for such and such reasons; or I imagine it to be so; or it is so, if I am not mistaken. This habit, I believe, has been of great advantage to me when I have had occasion to inculcate my opinions, and persuade men 
My wife often berates me about communicating my opinion as fact. I really suck at controlling the words I use. I forget how powerful they are. To completely remove words from one's vocabulary is inspiring. I say "good" when I mean "well" at least 10 times a day. Yes, I need to learn the art of thinking before I speak.
When another asserted something that I thought an error, I deny'd myself the pleasure of contradicting him abruptly, and of showing immediately some absurdity in his proposition; and in answering I began by observing that in certain cases or circumstances his opinion would be right, but in the present case there appear'd or seem'd to me some difference, etc.
Speaking of those who love to be contrary:
...these disputing, contradicting, and confuting people are generally unfortunate in their affairs. They get victory sometimes, but they never get good will, which would be of more use to them.
The chief ends of conversation are to inform or to be informed, to please or to persuade.
If you wish information and improvement from the knowledge of others, and yet at the same time express yourself as firmly fix'd in your present opinions, modest, sensible men, who do not love disputation, will probably leave you undisturbed in the possession of your error.
Men should be taught as if you taught them not, And things unknown propos'd as things forgot;

On Virtues and Self Improvement


This quote actually made me LOL:
It was about this time I conceiv'd the bold and arduous project of arriving at moral perfection.
What blew me away further was the systematic process he went through over a period of decades to achieve this goal. The dude made his own spreadsheets on paper! The virtues he pursued were:

  1. Temperance. Eat not to dullness; drink not to elevation.
  2. Silence. Speak not but what may benefit others or yourself; avoid trifling conversation.
  3. Order. Let all your things have their places; let each part of your business have its time.
  4. Resolution. Resolve to perform what you ought; perform without fail what you resolve.
  5. Frugality. Make no expense but to do good to others or yourself; i.e., waste nothing.
  6. Industry. Lose no time; be always employ'd in something useful; cut off all unnecessary actions.
  7. Sincerity. Use no hurtful deceit; think innocently and justly, and, if you speak, speak accordingly.
  8. Justice. Wrong none by doing injuries, or omitting the benefits that are your duty.
  9. Moderation. Avoid extremes; forbear resenting injuries so much as you think they deserve.
  10. Cleanliness. Tolerate no uncleanliness in body, clothes, or habitation.
  11. Tranquility. Be not disturbed at trifles, or at accidents common or unavoidable.
  12. Chastity. Rarely use venery but for health or offspring, never to dulness, weakness, or the injury of your own or another's peace or reputation.
  13. Humility. Imitate Jesus and Socrates. 

 It's safe to say Ben Franklin helped change the world. Those 13 virtues may explain why.

Throughout the book, he mentions many vices, but I found it interesting he specifically called out debt:
...which exposes a man to confinement, and a species of slavery to his creditors.
Dave Ramsey and Proverbs 22:7 would agree.

On Pride and Humility

In reality, there is, perhaps, no one of our natural passions so hard to subdue as pride. Disguise it, struggle with it, beat it down, stifle it, mortify it as much as one pleases, it is still alive, and will every now and then peep out and show itself; you will see it, perhaps, often in this history; for, even if I could conceive that I had completely overcome it, I should probably be proud of my humility.
Battling my pride (which goes hand-in-hand with my man-pleasing and insecurities) is a constant activity. Glad to know I'm not the only one.

On Reverence to God

And now I speak of thanking God, I desire with all humility to acknowledge that I owe the mentioned happiness of my past life to His kind providence, which lead me to the means I used and gave them success.
"O powerful Goodness! bountiful Father! merciful Guide! increase in me that wisdom which discovers my truest interest. strengthen my resolutions to perform what that wisdom dictates. Accept my kind offices to thy other children as the only return in my power for thy continual favors to me."
That there is one God, who made all things. "That he governs the world by his providence. "That he ought to be worshiped by adoration, prayer, and thanksgiving. "But that the most acceptable service of God is doing good to man. "That the soul is immortal. "And that God will certainly reward virtue and punish vice either here or hereafter."

On Entrepreneurship

I have always thought that one man of tolerable abilities may work great changes, and accomplish great affairs among mankind, if he first forms a good plan, and, cutting off all amusements or other employments that would divert his attention, makes the execution of that same plan his sole study and business.
He'd probably agree with Dave Ramsey who often says the only ship that doesn't sail is a partnership, though Ben does give me hope that it can be done when communicating expectations is made a priority.
Partnerships often finish in quarrels; but I was happy in this, that mine were all carried on and ended amicably, owing, I think, a good deal to the precaution of having very explicitly settled, in our articles, every thing to be done by or expected from each partner, so that there was nothing to dispute, which precaution I would therefore recommend to all who enter into partnerships; for, whatever esteem partners may have for, and confidence in each other at the time of the contract, little jealousies and disgusts may arise, with ideas of inequality in the care and burden of the business, etc., which are attended often with breach of friendship and of the connection, perhaps with lawsuits and other disagreeable consequences.
Oh, and he had an opinion on patents too:
That, as we enjoy great advantages from the inventions of others, we should be glad of an opportunity to serve others by any invention of ours; and this we should do freely and generously.
I could probably go on and on... but you get the idea. It's a good book by an incredible man.

I'm amazed at how many areas of our daily life Ben Franklin influenced. Like him, I also want to make a difference in the world and be significant. Learning what worked for him seems like a good place to start.

What have you read recently that has inspired you?


What other autobiographies would you recommend?

Saturday, October 13, 2012

My Friend, the Politician

If you're like me, you might agree politics is not the answer for much of anything. On any given day, the decisions I make impact myself and my family more than any politician or government program.

In fact, mostly I just want them to stay out of my way and let me run my business.

A few years ago, I got really frustrated with politics in general and urged people to take our country back from the corruption in Washington. I still believe neighbors helping neighbors through churches and non-profits will always be more effective than any bureaucratic government plan.

To be honest, at one point I probably lost hope in the political system as a valid means of bringing about positive change or making an actual difference in people's lives. I have friends that are political, and I've cheered them on at a distance, but, more recently in fact, I've become more aware of just how difficult a job it is to get elected or be a public servant.

My friend Ben Claybaker has helped me realize that. He's running for State Representative for district 53 here in Tennessee. My wife and I have known Ben and his wife Elizabeth for a long time. We actually knew Elizabeth back when we lived in California and she attended UCLA. Ben's the real deal. A small business owner who believes in limited government, cutting taxes, and improving education (which, by the way, makes an area more attractive for business owners, their employees and their families).

Ben won his party's nomination. He and his wife have worked hard. I mean, really hard. I know something about hard work having built my own business over the past 5 years, 4 of which while working a full-time job. He's been working a marathon of making phone calls, attending events, and knocking on doors.

Unlike all of the opponents he's faced in this election, he's lived here for 6 years. I hear the other dude owns a house somewhere else and is renting here just for this election.

Last week I helped knock on doors for Ben and let the swing voters know why I support him. I got to see first hand just how hard he's been working day after day for months. He's doing it because he has a passion to serve his community, and he believes it's part of his calling and responsibility. I'm inspired by my friend who is living his life on purpose.

He's given me hope for politics. He's helped me believe, at least on the local level, that one man with a passion can make a difference.

Today, my family had the privilege of attending one of Ben's events in Lenox Village which is just down the street from our house. The kids had a blast (bounce house, cookies, and gelato), but I also enjoyed meeting Governor Bill Haslam who was there to support Ben (that's him in the picture). Gov. Haslam told some funny stories but also reminded me how close of a race this is. He recommended we each get a list of 10 people in our minds and make sure they vote for Ben this election. I'm hoping this blog post will help us do that.

If you're in district 53, and you want to be proud of your representative, please vote for Ben and ask your friends and neighbors to do the same. Share this post with them or have them contact me if they want someone to vouch for his character.

Not all politicians are evil. I had to see one of my friends first hand working his tail off to realize that. If you're like me, fed up with politicians and politics (especially on the national and presidential levels), try getting to know your local representatives. If you can't find anyone with integrity in your local office, consider running yourself. It's a lot harder to complain about a problem when you're the one willing to fix it.

I hope this post encourages Ben and lets him know how proud his friends are of what he's doing. I hope on November 6th, more people will be introduced to him as our new representative and maybe, just maybe, find hope in the system again.

Tuesday, September 25, 2012

The Hypermedia Debate at FoxyCart

All I want are sharks with frickin laser beams on their heads!

Many of my geek friends know I've been working for most of this year on a new REST API for FoxyCart. It's been a long, sometimes painful process but I'm learning a TON. It's really challenged me to grow as a developer and that's a Really Good Thing (tm).

Just last night I put up a post over at FoxyCart.com opening up the discussion we're having concerning media types for our new API. If you're into that sort of thing or you've enjoyed my previous post about RESTful Resources Required Reading, come join the discussion. We'd love to have your input.

The Hypermedia Debate

Friday, August 31, 2012

The Other Side of the Booth

This past weekend, I had the pleasure of attending CoderFaire Nashville. I've been to a lot of great conferences, but this one was different for me on a few levels:
  1. My good friends Cal Evans and Jacques Woodcock organized the event which made me feel like an "insider." 
  2. I got to see my friends speak, and they were all really good! Tim Moses, Ben Ramsey, Jason Myers, Eli Tapolcsanyi (say that name 10 times fast!), Jim Siegienski ("Jimski"), Jon Shearer... loved them all. I missed Kevin Powell and other friends, but I heard they did great as well. 
  3. My business partner, Brett Florio, flew in from California so we got to enjoy the conference together.
  4. My company, FoxyCart, was a lab sponsor.
Let me start off by saying the conference was a huge success. The Nashville development community has been growing like crazy and desperately needed their own conference event. There's been a lot of back and forth on social media about BarCamp, PodCamp, and other conferences some argue have been "taken over" by marketing professionals. Regardless of that debate, there was no denying what CoderFaire was all about.

For a first year conference, I was amazed at the turnout, the quality, and the smoothness with which everything was done. The result was a testimony to Cal's many years of conference experience combined with Jacques, Kathy and the volunteer team's pursuit of excellence.

Well done!

But that's not really what this blog post is about. I wanted to highlight #4 above. I've been to a few conferences now (JavaOne, AdobeMax, Shop.org, PHP Tek, BarCamp, PodCamp, etc), and I usually follow the unspoken rule when it comes to vendor tables: Get in, get your free swag, get out, and, no matter what, do not make eye contact!

No one likes to be poorly marketed to. It makes you feel like a roast pig on a spit.

For the first time ever, I was on the other side of the vendor booth. FoxyCart was a proud sponsor of CoderFaire. Look, we bought a banner and everything! We're a real company now! (after only 5 short years). The genius of the setup was we weren't allowed to "sell." We were lab partners, there to answer questions about our service and equip others to build awesome.

This is the way it should be done. Vendors should think of their conference presence as an opportunity to serve their community in person. To put a human face on the awesome support they already give, day in and day out.

I think we've all been trained by bad vendor booths. People hawking their products and services to anyone and everyone: bribing you with a t-shirt and shaming you for not signing up for the newsletter.

Cal and Jacques: Thank you.

Thank you for showing us all something different. It's hard being on the other side of the booth. It's hard to get past that unspoken rule and let coders know, "We're here to help. Really." But you made it possible.

We had some great conversations and hopefully sparked the beginnings of some new partnerships. The feedback I got at Tuesday night's NashCocktail and last night's CentreSource Interactive Mixer from CoderFaire attendees was incredible.

They loved that we, as a vendor, were there for them. We participated in the hackthon (more about that later... I'm going to turn that thing into a business). We attended sessions and asked questions. We, as developers, were part of the community, not a parasite feeding on it.

The next time you attend a conference, look for the vendors that genuinely want to serve you. Thank them for being there. Tell them you enjoy doing business with real people who care about their customers.

I know it will mean a lot to them because the feedback we've gotten has meant a lot to us.

(Note: All of these pictures were blatantly stolen from Cal and Jacques. They both know where I live, so they can come beat me up if they don't like me using them).

Did you attend CoderFaire? If so, what did you think?

Got an interesting conference story involving vendors? Please share it in the comments!

Tuesday, August 21, 2012

Does Your Business Care About Profit?

2016-08-27 Edit: A version of this post now lives on Steemit! Join up and give it a vote.

Q: Why do companies fail?
A: Because they don't have any money.

Q: Why not?
A: They spent it all. There was a bucket they pulled from to do their business, and that bucket is empty.

Q: How do you keep the bucket from going empty?
A: Profit

Profit is an ancient, seemingly forgotten equation that many Internet startups have never known. Centuries, even millennia, of business wisdom have followed this simple idea:

Profit = Revenue - Expenses

(Sure, you can get more complicated by calculating your break even point, analyzing fixed costs, variable costs, marginal revenue, equilibrium price, supply and demand, etc... but let's just keep things simple).

If you don't have profit, you might just have a hobby.

If you convince others to invest in your hobby or buy it completely, it may be a ponzi scheme.


I'm concerned for my industry. For some reason, it seems we didn't learn from the dot-com bubble. We somehow think if we get enough people "interested" it will make up for not delivering real value. The service provided to the customers should have real value. Someone should be willing to be pay for it (customers, preferably, but advertisers get in the game as well).

If "going public" or "selling the company" is your company's only strategy for making money, it might be worth asking, "Are we bringing real value to our customers?" If you're pouring your heart and soul into building something, make sure it's something that will last. Make it something people are willing to pay for. Work hard to keep it that way.

Don't pull money out of a bucket to run your business. Instead, do something awesome your customers will tell their friends about. Meet real needs in the marketplace and continue to evolve as the needs change.

Rabbi Daniel Lapin calls a dollar bill a "certificate of appreciation."

Your doors are kept open by the appreciation of your customers.

Do something worth appreciating.

It won't be easy, and it won't happen overnight. In fact, it will probably take years of trial and error.

Dave Ramsey talks often about losing it all. After becoming a young millionaire, he went completely broke. He then spent years meeting with and learning from millionaires, decamillionaires and a few billionaires about how to do things right. The recurring theme he saw over and over again can be explained in a children's book.

The tortoise always beats the hare.

Warren Buffet (quoting Fred Brooks from the Mythical Man Month) said it well: "You can't produce a baby in one month by getting nine women pregnant."

Spend the time to grow your business the right way. Meet needs, deliver value, and profit.

This post may rub some people the wrong way. It's just my opinion. I welcome yours in the comments below.


P.S. I can't tell you how thankful I am for our FoxyCart customers. They have given us their appreciation and referrals since 2007. Serving them is the reason our company exists. I'm glad we spent our time in the hobby stage because we focused on the needs first. We're now a sustainable business meeting real needs for thousands of people, and I feel like we're just getting started.

Monday, August 06, 2012

Curious About Curiosity

When shuttles tragically fail, Hubble can't take pictures, or missions don't go to plan, I hear friends talking about how we should redirect NASA funding to feed the hungry.

With the success of Curiosity's landing last night, now I hear calls to increase their funding.

I guess we Americans just want to celebrate success.

Don't forget, failures always line the path to great accomplishments.

As for my opinion, I don't think we would have been given such a big backyard if we weren't meant to explore it. I believe these moments will mark the timeline of humanity while many other things will be long forgotten.

What's your opinion?

Tuesday, July 31, 2012

A Test Story for Those Who Don't Like Writing Tests

Without tests, eventually you'll fall down.
My first experience with unit tests sucked. It involved a Java ecommerce bohemoth with good "test coverage" along with more bugs than should be ethically allowed in a commercial product. The company admitted it was one of the worst versions they had ever released (and supposedly some people lost their jobs over it), but the net result was me thinking unit tests were useless. If the same team who wrote the crappy code also wrote the tests, how helpful could they be?

So I decided to just write production code and leave the tests to people with too much time on their hands and no customers to serve.

Yes, that was me being arrogant, ignorant, and stupid. The tests weren't the problem. They just didn't have tests to cover the issues we were finding.
With tests, you have a chance to stay standing.

Years went by, and I got along fairly well. But then I started building something complex. Really complex. A fully RESTful API. It quickly got out of hand. I needed the ability to refactor a major controller for the whole system and know with confidence a change in one place wasn't breaking something else.

Going with Silex and their Symphony WebTestCase pushed me over the edge. Their createClient method helped me quickly test my whole API from end to end. I had no excuses not to write tests. 803 tests and 2,289 assertions later, I'm completely sold on testing.

The story I'm about to tell would have helped the earlier version of me get on board faster and may help you or a colleague finally write those neglected tests.

During what had to be a "Gee, I wonder if this quick hack will work" coding session, I added an attributes table to our system for transactions, customers and subscriptions. I was lazy, so I made a dumb decision and created a name/value table with transaction_id, subscription_id and customer_id fields. Why would we ever need more attributes, right? ;-)

I usually make long-lasting database design decisions, but this was admittedly pretty lame.

So the time came to add more attributes to products, shipments, users, clients, and stores. I knew to do things "right" would involve a database schema change, and it could impact live stores if I screwed up. Most everything we do is versioned in FoxyCart, so what you get today is what you'll have tomorrow. The catch is, all of the versions we support use the same data model.

Testing to the rescue!

The updated table was going to use foreign_key_id and type fields to keep track of the various attributes. The existing versions expect attribute data to be organized in a very specific way. Here's how I went about making the changes without screwing anyone up:

Step 1: Write tests for how it works today.

Ideally you're all hard-core with test driven development, and you wrote your tests before you even started building anything. But if that's you, this isn't your story. You're the guy who is "too busy" to write tests and would rather write code that "meets real needs" in the marketplace.

Am I right?

So I wrote 27 tests with 35 assertions on everything the current class object handled. This included outputting to XML for our API, updating and saving objects, and the like. Keep in mind, this was a real time investment.

Step 2: Break it all.

Once I had everything working, I went ahead and made my database changes in development and refactored all the code. Now almost all of my wonderful new tests failed. Some methods had been renamed or completely removed, others were slightly re-purposed or adjusted. I made a copy of the test file and went to work on it.

Step 3: Mindless coding for speed and profit.

It wasn't exactly test driven development, but this approach made my job so easy. The tests literally told me which line to fix next. Going through and tweaking the code was almost mindless. I can't tell you how many times I said, "Oh, yeah. That doesn't work that way anymore. That's a quick fix."

Soon I had things green across the board again with my new tests against the new class with a new table structure. I was stoked.

Things clicked for me. I got a greater understanding for the power of proper test coverage. I could now confidently roll out a significant change (with a required data migration step) and know our users wouldn't be impacted because the inputs and outputs of the class were verified to be exactly the same as they were prior to the change.

So here's my challenge to you, like the me-of-old, who isn't writing test code:

Start today.

Start with the very next thing you have to code. At first it will be painful, and you'll think you're "wasting time." Trust me, you aren't. Ask anyone who's worked on a lot of real code for more than a few years, and they will most likely back me up on this. You may have gotten by this long because you haven't been faced with a real challenge or you haven't had to fully realize the extent of your current technical debt.

Once you get a taste of the confidence you can have in your system and future changes to it, you'll wonder (as I have) how you got by for so long without writing tests.

Do you write tests (unit, functional, PHPUnit, Selenium, etc)? Why or why not?

P. S.: I know the pictures in the post really have nothing to do with it, but I needed excuse to post them somewhere. :) I got a bunch of cool shots from surfing last week. Check 'em out.

Saturday, July 14, 2012

What If You're Not a Writer?

My baby girl, Aria.
She's one of the reasons I need to stay focused on what I'm called to do.
First off, Jeff Goins' book, You Are a Writer, is a really great book. You should buy a copy and read it. I thoroughly enjoyed it and recommend it to anyone who's ever even thought about writing.

But what if you aren't a writer?

This post may offend my writer friends, but hopefully they'll hear me out (and offer some input).

I've been thinking about blogging lately. That's kind of what you do when you have one of these things. I've already talked about why I blog (to encourage others), but lately I've been thinking about how I blog.

I'm not one to do things half way. If I'm in, I'm all in. So where is this blog going? I'm a business owner and an entrepreneur, not an aspiring writer. I don't have a life long dream to write my own book. I don't take this blog as seriously as some suggest I should.

I haven't bothered to upgrade to Wordpress or buy a cool theme. I don't spend as much time as I should editing posts or creating new content. I don't comment on or read other blogs every single day. I'm not out building new relationships with great authors. I don't seek out people to follow on Twitter in the hope they will follow me back and grow my "audience." I'm not looking for opportunities to guest post or asking people to guest post here.

In short, I'm not trying to be one of the cool kids in the blogosphere.

All of those activities are things I know I should be doing as a "blogger" or a "writer." If I'm honest, I may have felt guilty now and again for not doing this work. A lot of my friends are on top of it. They have amazing blogs with loyal readers and tons of inspiring comments. It seems like almost every day I see tweets about the top ten ways to grow your blog, or the five things you can do today to improve your posts. Basically, I'm doing it wrong. And I know it.

One sure-fire way to be successful at nothing is to try and be successful at everything.

I've been told by a few that this blog could turn into something really good. Am I willing to do the work to make it good?

Don't be deceived. It takes work.

The answer, for now, is no. I'm not a writer. I am, however, striving to be a better communicator. This blog helps me tremendously. It helps me better understand myself and encourage others. I might be a writer in the future, but today I'm a business owner.

I don't have to be like everyone else. I still get value out of what it is I am doing. I'll keep writing because I want to encourage others with my story, and I want to hear their story in the comments and via email.

So how can this post encourage you?

I want to give you permission to write for your own reasons. Focus on the most important priorities for your purpose and remove the other distractions. Don't feel bogged down by all the things you should be doing as a blogger. Just get something done. Do the work, but do it for you. Stay focused on being successful at that which matters most for your life.

I hope you have a blog, and you share your thoughts with others. Your words are powerful and unique. You are the only one who can distribute them.

Are you a blogger who has priorities other than your blog and do you feel guilty about what you think you should be doing?

P.S. I'm super excited because my wife finally started blogging. Do me a favor and check out her blog at Simply Stokes. Leave her a comment to encourage her to keep going.

Sunday, July 08, 2012

Your Art Should Be Selfish

No, that's not me, nor is it Costa Rica. It's actually Mavricks. © jdegenhardt 

The previous two times I went surfing were horrible. During one, I was just getting pitched over the falls and drilled left and right. The other ended with lightning and a thunderstorm throwing rain so hard it hurt my face.

But tonight...

Oh tonight...

I had one of the best surf sessions I've ever had. I surfed from 5pm to 6:30pm. By the time I got out of the water it was almost dark, and I was definitely the last guy out there. The sunset was amazing, and the waves were incredible.

I caught some overhead monsters and even though the lineup was full, I was catching waves all over the place. When I close my eyes, I can still see some of the rides I had. One barrel seemed to go on forever. Another huge take off turned into a screaming face with the lip right over my head. As I started paddling back out, one of the locals actually turned to face me and clapped with a smile. Another gave me huge smile and said, "Nice wave."

I was already beyond stoked before these kudos from the cool kids, but something about it struck me.

What was so different today than the previous two times out in the water?

Other than the thunderstorm hindering things a bit, I felt like I could do nothing right just a few days ago. One wipeout had me through the spin cycle. When I pushed off the bottom, my head ran straight into the fins of my board. Ouch.

One of the reasons I had such a bad session in contrast to tonight's had to do with who I was surfing for. After getting tossed by a couple waves, I think I started surfing for the approval of those in the water instead of my own enjoyment. I also started getting desperate. I convinced myself they were all thinking, "Who is this kook wasting our waves?"

I tried to take off on some waves even though I was already too far inside. I didn't want others in the water to think I was letting a good one go by. I had a scarcity mindset.

Now, I'm not what I'd consider an artistic person. I can't draw worth a damn. I blog a little bit. I've tinkered with guitar. I write code. If I were to think about "my art," I might consider including surfing. Granted, I'm not very good at it, but a wave is like an empty canvas either way.

To be better at my art, I needed to be selfish with it. It was for me, not for the locals in the water.

Your art is for you.

I'm not talking about when you turn your art into your business. I'm talking about when it's still just pure, uncommissioned, do-it-because-you-love-it art. It's an intimate expression of your inner self. It introduces you to parts of yourself you didn't know.

If you just want to create art, don't write for someone else. Don't create a song you think others will like. Don't approach a canvas thinking about what will sell.

Do what you love just for you.

And you know what? Your art may not be that good. That's OK. You don't have a scarcity mindset because there will always be another chord progression, another blank page, another empty canvas, another perfect wave. Art is what you have inside. Sometimes it just needs to come out as is.

Let others worry about if it's good. You never know, you might get a hand clap now and again.