Archive for the ‘Business’ Category

Are you passing up opportunities?

Tuesday, September 13th, 2011

The trouble with opportunity is that it always comes disguised as hard work.

The year was 1995. I was 14 years old and recently purchased a screaming fast 14.4 Kbps modem and signed up with a local ISP to finally get graphical Internet. This was the Internet with pictures! Ah, how I remember the days watching the purple going in and out waiting for pages to load. 28.8 Kbps modems had recently come out but they were around $250. Luckily for me, the 14.4 modems had been reduced in price to only $100 which I could afford with my paper route money. How could I complain though? Previously I had been using a 2400 bps modem to access the Internet in text-form through the Lynx browser.

This was incredible! I was amazed by the World Wide Web.

Fast forward a couple years and I was itching to learn how to make websites. What should I make one about? I was a big hockey fan at the time so after some thinking about it, I decided to make a website about my favourite hockey team, the Toronto Maple Leafs. I put countless hours into the site entering statistics from a book I bought and updating the site after games. I opened an account with Geocities, taught myself HTML and even a little bit about graphics to “pretty” up the site. It’s even still available on the Internet Archive. It wasn’t the best site but I put a lot of work into it and it was a labour of love.

Forward again another couple years to 2001. I was off to university and didn’t have the time to maintain it anymore so I let it die. Just before school let out for the summer one of my friends asks me if I can make websites. I say “Yeah, I’ve been doing that for a couple years now.” His brother wants to setup a simple online store website to sell some products. I talk to him about it and we agree on a price of $1500, half paid up front and half on delivery.

After getting back home for the summer I have lots of free time and figure it will be a piece of cake. But I procrastinate and procrastinate until finally a month later I feel bad about it and I tell him I can’t do it and return his money.

One thing I’ve since learned in life is that each time I do good work, I get rewarded with a greater opportunity as a result of it. It may not be from the same person or company but somehow life tries to put me at the next level and give me a reward.

Looking back on this decision to fail, I figure it probably cost me tens, if not hundreds, of thousands of dollars and probably set my career back 5-6 years. I wouldn’t start doing any web development until after I graduated in 2007, six years later.

If I had successfully completed that project, I could have easily found others. The Internet was just getting started and was hot at that time. I could have worked while I went to university in web development instead of brainless part-time jobs earning barely above minimum wage. I could have built up a portfolio and client base that would still serve me today. But I chose to give up.

Life always seems to present opportunities when we’re ready. It might not be in the form we like and it certainly won’t be gift wrapped up in a nice perfect package with a bow on top. But you’re ready for it. You wouldn’t be receiving it if not. If you say yes and complete it, you will be able to move on to bigger and better things. However, if you reject life’s opportunity, it will say “Ok, never mind” and then you won’t get it again until you prove you are ready again. This may take years as in my case.

If you are currently being presented with an opportunity, are you accepting the present? If you choose to pass it along, it will take some time to get back.

Do you program 4th dimensionally?

Friday, September 2nd, 2011

"Marty, you're just not thinking 4th dimensionally"

I’ve worked on a few different types of applications at this point in my career and one sure sign of poor programming I’ve noticed is the inability to program 4th dimensionally. You notice this when the application may be working but implementing features begins to take longer and longer. The performance starts to become an issue when more users are added to the system. These problems are a result of the programmer not thinking about the future.

PHP code is notorious for this problem because it is so easy and tempting to write code that just focuses on the immediate problem. A programmer gets the task done quickly and he is happy and the client is happy. It’s also the reason why on outsourcing sites there are many job postings looking for PHP programmers at $5/hour. I don’t see many postings looking for Ruby on Rails developers at that rate. Ruby on Rails forces developers to use a well-established framework that adheres to good design practices. With PHP, especially without using a framework, developers have the ability to just throw everything together if they so choose. This leads to a big mess. If the application grows, this mess gets bigger and bigger until it needs to be cleaned up.

Cleaning up a code mess involves a lot of work and it shouldn’t be done all at once. It’s like switching bank accounts. I’ve switched my main banking account before and it is a hassle that takes months to complete. Any direct deposits and automated bill payments need to be changed to the new bank account. Money needs to be transferred. When you think you’ve got everything switched over, it’s also good to leave the old bank account active for a little while longer until you are reasonably confident that you haven’t forgotten anything.

Cleaning up a code mess is similar. First you want to make sure that the logic will not break. This involves writing tests for the current system. These will most likely have to be done from scratch because if the codebase is a mess, chances are there is no testing being done.

Secondly, start with simple modules that are easy to understand and are loosely coupled to other parts of the application. These parts of the application are the easiest to switch over to cleaner code because you can be relatively confident that they will still work without breaking the application. Move on to more complicated modules as you understand the system better and all the connections.

Finally, when the modules have been re-coded into a more fluid design, remove the old code. Old code on a system just confuses new developers who don’t know if it’s important or not. Throw it out to keep things simple. You aren’t going to use it.

As a developer, how can you better program for the future? There are a few things you can do:

Every time you write code think about how it will look in the future. How easily can someone understand this code when they read it 6 or 12 months from now? What if the code needs to be used somewhere else? Is it easy to call from another part of the application?

In addition to thinking long-term while performing short-term tasks, start noticing code messes. Anytime you see the same code repeated more than once in an application, alarm bells should start going off in your head alerting you to a possible mess. Make a note of it.

Take some time regularly to clean up messy code you notice. This is probably the most difficult as it requires a developer to think independently. In my experience, very few managers are going to come to you and say “You should take the next week to work on cleaning up the code while no features are getting implemented.” As a developer, you need to just clean up the code as you go along without being asked to do so. You do it because even though the immediate task may take a little bit longer, you are saving more time down the road.

If all the effort is placed on the immediate short-term you will be like a public company that just focuses all its attention on the next quarter’s results. It may work for a while but after cutting their Research and Development budget to save costs and boost short-term profits, the company then realises that they have nothing in the pipeline for the upcoming years and begins to lose market share.

Your manager/client is always going to be providing the short-term, immediate tasks you need to work on but to become a professional developer, you need to carve out a part of your day to think 4th dimensionally.

Never Compromise Quality

Tuesday, April 27th, 2010

In programming people sometimes feel they have to sacrifice quality in order to get a product out the door on time. Never do this. You are hurting the customer, the company and yourself if you do.

This American Life had a very interesting program on the New United Motor Manufacturing Inc (NUMMI) plant in Freemont, California. NUMMI was a joint venture started in 1984 between Toyota and GM for both parties to learn from each other. GM would learn about Toyota’s quality control systems and Toyota would learn about building cars in America.

The amazing story is the turnaround of the plant. Prior to the joint venture, the plant was operated by GM and was one of their worst factories. The program talks about workers gambling, having sex, and drinking at work. They produced very low quality cars and didn’t really care. The plant was closed as a result. However, for this joint venture, GM agreed to re-open the plant and hired back many of the original workers. Thanks to Toyota’s quality systems, the plant turned around to become one of the best GM had.

One example of change was “stopping the line.” The GM workers grew up with the notion that you don’t stop the line. If you notice something is wrong, you just keep it going. Just get the cars out the door. With Toyota’s system, workers were encouraged to stop the line if they noticed something wrong and fix it on the spot. This was a big shift for them. The process became about quality over quantity. Within just three months, cars coming off the lot were being made with near perfect quality.

When you let an error slip, either with cars or with software, you are compounding the problem. It takes much more time and money to fix the problem later than when it is first discovered.

How much more money? One study estimated “it would take 50% more workers under the old system to produce the same car.”

Recently I had a situation like this. I was responsible for checking over and delivering database scripts to a client. I noticed one of the scripts had an input parameter and while I got a feeling I should double-check about it, I ignored that intuition and delivered them anyways. The client ended up running the scripts in their environment but ignored the input parameter which caused part of the scripts to fail. There was a lot of back and forth to get it fixed. I estimate it probably wasted about one man-days worth of everybody’s time. Because I didn’t take 5 minutes to check about something that could be wrong, I ended up costing hours worth of time.

It’s not mentioned explicitly but it is implied that the vices went away after the quality program was introduced. While workers were embarrassed to be working at the plant before, they now were proud to tell friends where they worked.

In ancient times, brick makers, engravers, and other artisans used a symbol to mark the things they created to show that they were the makers. The symbol that each one used was his “character.” The value of the work was in proportion to the skill with which the object was made. And only if the quality of the work was high was the character esteemed. In other words, the quality of the person and his work gave value to his credentials. If the work was good, so was the character. If it was bad, then the character was viewed as poor.
- “Becoming a Person of Influence” by John C. Maxwell & Jim Dornan

This is why the morale and esteem of the workers improved once quality became the focus. Your character is revealed in the work you do and vice versa. If you are producing shoddy work, your character is being revealed as such.

In programming, quality does not mean taking a stand over something trivial such as whether to use tabs or spaces for indentation. Quality means being consistent in your work. It means following design principles that will save time and effort down the road. It means doing things right the first time so you don’t need to correct them later.

Always do things in a quality manner. Never compromise. For if you do, you are compromising your character.

This American Life episode about NUMMI
Becoming a Person of Influence

You Don’t Want Money

Thursday, April 15th, 2010

The other day, a young kid on the bus struck up a conversation with me. During the conversation, he said he wanted to make a lot of money because he doesn’t get enough respect from his peers. He thought if he could become rich enough, he could earn that respect.

Thinking about this conversation later, I realised no one really wants money. Money is meaningless. When people say they want money, they really mean they want something intangible which money can help them get. This could be respect, as in the case of this young man. For a lot of people, it probably comes down to happiness, security, love, power, respect or freedom.

Personally for me, I like freedom. I like being able to work on what I want and having autonomous control over my time and activities.

For the past few years, I’ve had dreams of retiring early so I can spend time doing what I want. I follow the blog Early Retirement Extreme of a man who retired in his early 30s by saving 80% of his salary and making smart investments which now cover his humble living expenses. This was the path I wanted to follow up until my revelation after this conversation.

What I really want is freedom. Money is just a tool that can be used to buy my time and freedom. However, if I want to save enough to retire extremely early, I would basically need to postpone life. Postponing life for a few years is a sacrifice to get to the goal. But since money is just a tool to achieve freedom, I should just cut out the middle-man to achieve my goal faster.

After getting laid off in 2009, I ramped up my free-lance work. It didn’t take long for me to find enough work to pay for my lifestyle. I managed to survive just as most people manage to do. It’s human nature to find a way. That feeling of knowing that even getting laid off does not really affect me is priceless.

If you are working long hours or on something you don’t like for money, ask yourself what you are really working for? Remember, you don’t really want the money. What do you want to use that money for? Is it happiness? Freedom? Love? Once you have the answer, understand that you can cut out the middleman and go right for it. Don’t postpone life.

Early Retirement Extreme

Sneaky Pricing

Thursday, December 17th, 2009

Pricing is one of the hardest things to get right for your business. I heard a story the other day of a business that implemented random pricing to pick the right one. On their pricing page, they had the system choose at random from a pre-determined list of prices. These price points ranged from $5 all the way up to $200. Keep in mind, this was all for the same product. After analysing the data, they decided to settle around $20.

It was a very interesting way of using technology to your advantage. Marketers always want to hit that price point where price x customers will provide the most revenue. This company was able to leverage technology to help them do that. It’s just another way in which the web can help your business in ways that can’t be done offline.

This is a post about another pricing strategy.

Recently I signed up for Safari Books Online. On their subscription page, they offer two choices – the unlimited Library at $42.99/month or the limited access bookshelf at $22.99/month.

Safari Books Online - Subscribe

I can read up to 10 books per month for $22.99. Being this is about half the price of a technical book, I thought it was a good deal and signed up.

Today I received an email with special holiday pricing. Sign up by the end of December and I could receive access to the Full Library for just $29.99 per month. Since it was just a little more, I checked it out to see if it was worth it.

When I came to the Change Subscription page, this is what I saw:

Safari Books Online - Change Subscription

Notice anything different?

Now, they have a third option – the 5-slot Bookshelf for only $9.99/month. I imagine this option is for people who are considering cancelling their account. It is a way for them to keep their business by offering a reduced price for reduced services.

In my case though, their plan backfired. I was happily paying $22.99/month but since 5 books a month is plenty for me, I reduced my subscription.

In summary: Because of a marketing effort to get me to upgrade, I actually downgraded my account. I suppose the lesson is to be careful with pricing. It’s good to make an effort to keep customers but you don’t want happy customers paying less than they would have otherwise.

You, Inc.

Monday, December 14th, 2009

Are you an employee who dreams of starting your own business? You have an idea that excites you when thinking about it. You visualise the finished product coming to life. You imagine all the money rolling in from sales. That is great but it could be months or years down the road. Do you really need to wait that long to start a business?

No. You already run a business, and that business is You, Inc.

No matter if you are an employee or employer, you are operating a business. Each month you have revenue (income) and expenses. You have a balance sheet (whether you realise it or not). You have at least one customer. Sounds like a business.

One of the best realisations I have had in my career is that I am not an employee, I am a business of one. As an employee, I choose to provide my services to one client. As a business, it is quite risky to have just one client. However, if you choose to do so, you need to be aware of the pros and cons.

Thinking as owner of You, Inc. puts me in a different mindset than if I consider myself an employee. As an employee, the company is in control of the work I do. As a business owner, I am in control. It helps me question things like: Is this the kind of business I want to be in? Am I providing good value? Will my clients want to work with me again?

When you start thinking of yourself as You, Inc., different questions start to come up? Am I running my business well? Am I investing in the future of my business? How can I grow? Is it smart having only one client? What are the goals for my business?

It is important to run your business well because how you run You, Inc. today is the way you will run a “traditional” business. If you do not communicate well with your client now, then you will not communicate well with clients in the future. If you are running a loss every month, you will do the same with your business. Does You, Inc. operate with little or no debt? It is important to get You, Inc. running smoothly before moving onto bigger things otherwise you won’t be able to handle them.

A year after winning the lottery, most winners say they wish they had never won. Generally, life only lets you move on to the next step when you are ready. If you jump too far ahead, such as in the case of lottery winners, it usually causes too much hardship.

To run You, Inc. successfully, copy what successful businesses do. Just do it on a lower scale.

Good businesses spend money on sales and marketing.
Good businesses do not rest on their past. They are constantly investing in development of new products (skills).
Good businesses demonstrate values and try their best to live up to them.
Good businesses reward those who help them.
Good businesses treat others fairly and courteously.

To shift your mindset, spend a little time each day thinking about your business. If you were in control, what are some things you would do differently? Then realise that you are in control.