Great to see that people are doing!

June 9th, 2009 Comments Off
Filed in: Business, Development, Internet, Politics

I have been in touch with lots of people regarding my previous blog posting, and I’m very impressed to see that a lot of people are indeed aware of the problem, and actively working toward solutions.  In fact, Michael Geist, who has been speaking and writing about this for much longer than I have, recently spoke in front of a Senate committee and explained things in very simple, precise manner.  Here is a great excerpt (emphasis added by me):

“The truth is that there are ways, if we had unlocked devices and had a more open space, we would encourage this innovation without the gatekeepers that we see. Fundamentally, that is what we see taking place here. Certain gatekeepers exist in the chain; sometimes it is the device manufacturers; often — particularly in Canada — it is the carrier themselves who set limitations on what can come into the marketplace, precisely because it is to their competitive advantage to do so. We do not have enough competition to counteract that at the moment.

Who is to blame? I think there is plenty of blame to go around. We have the CRTC — to be honest — asleep at the switch, particularly on this wireless issue; they have not been involved at all. On net neutrality, for example, a complaint was brought against Bell Canada’s activities. They found for Bell in a manner that just last week was appealed asking for a reconsideration, noting that the CRTC itself has acknowledged in public statements that they may not have had all of the facts. Even when they do get engaged, the perception is that they may be overly cosy with some of the companies that they regulate, so there is ample reason to lay some of the blame at the CRTC.

It is not just the CRTC, however. I think we can blame the Competition Bureau as part of this. It was the bureau that, when we had two providers in the GSM space — Fido and Rogers — allowed a merger of those two services to go ahead, taking away the only competition we had in the GSM space and leaving us with just the one provider.

We can look to governments. This is not a partisan issue because this falls under both the watch of when we had Liberal governments and now, more recently, Conservative governments. In both instances, they let broadband task force reports sit there. There has been no digital strategy for Canada for more than 10 years now, while we see other countries move ahead more aggressively. I think we can look to all of these players to say that they have let us down, quite frankly.

The results are in the independent statistics. You can certainly get lobby groups or association groups to come in and spin the numbers any way they like, but if you take a look at statistics from the independent people — groups such as the OECD that no one will question — the numbers do not lie. We are falling behind other countries, and Canadian consumers know it intuitively. I suspect many of you know it, based on the experience you may have had just last week when you had a chance to compare what they have in Europe to what we have in Canada.”

The full transcript is here: http://www.parl.gc.ca/40/2/parlbus/commbus/senate/Com-e/tran-e/47244-e.htm?Language=E&Parl=40&Ses=2&comm_id=19

Keep it up everyone.  We have a lot of work to do to reverse the damage done over the past decade!

Stop talking and start doing!

People love to talk.  It’s in our nature.  We’re social creatures.

At some point, however, if you want to get anything done, you have to stop talking and start doing.

There is a big conference in Stratford this week called “Canada 3.0.”  One of the major sponsors apparently has something to do with the recent government spend of $10 million plus to “stimulate” things through creation of some sort of “Centre of Excellence for Commercialization and Research (CECR).”

The stated purpose is to “create jobs, improve the quality of life of all Canadians and strengthen the economy for future generations.”

This is all fine and good.  Every project needs a high-level/brainstorming phase.  The problem is that there doesn’t seem to be many (any?) specific goals about how this is all going to work.

You see, there are some severe, systematic problems in Canada that tend to destroy innovation in the early stages.  Let’s have a look at some pretty graphs.

In 2000, Canada was leading the way with broadband penetration:
Canada Broadband 2000

Can you spot the difference in the 2006 graph?
Canada Broadband 2006

Similarly, back in 1995, Canada was among the leaders in mobile technology:
Canada Cellphones 1995

But by 2005, something had changed:
Canada Cellphones 2005

Canada is behind many nations that have small fractions of our GDP.  Keep in mind these are plotted logarithmically.  So, for instance, Israel’s mobile reach is more than double Canada’s rate.

If you think these charts are scary, head to www.gapminder.org and run the animations.  The most alarming thing is the speed at which we’ve been overtaken.  I’m sure the more recent data will look far bleaker.

And don’t give me the old “Canada is so big” argument.  Most Canadians live in large, densely populated cities, just like everywhere else in the world.  Plus, we used be to way ahead, despite our huge land area.  And Russia is just as big and vast as our country, yet they have nearly twice as many cell phones per person.

Why have we fallen behind?  Because the government has been asleep at the wheel, letting a few private corporations bleed everyone else dry charging premium rates for old, obsolete technology.

They have no incentive to invest in R&D, because there is no competition in the mobile phone or broadband internet categories.  Meanwhile, the government keeps passing laws and making rulings to help these companies expand and protect their monopolies, killing any incentive for new or even existing international companies to take them on.

This is really freaking basic economics, folks.  High-school economics.  Maybe first year college.

If we want to “create jobs, improve the quality of life of all Canadians and strengthen the economy for future generations” it’s going to take a hell of a lot more then some “center” with no clearly defined purpose.

Instead, let’s allocate a couple bucks towards enforcing the Canada Competition Act, which supposedly “contains both criminal and civil provisions aimed at preventing anti-competitive practices in the marketplace.”

Let’s bust up these old cartels that are cutting off the oxygen supply.

That’s the only way we’ll have even a small chance of keeping pace with the rest of the world.

So please - at some point in the near future, stop talking about “ways to innovate”, and start doing something to make it happen!

Software Development: When Change is Bad

April 10th, 2009 2 Comments »
Filed in: Development

As software moves into maturity, it becomes a delicate art to add features and fix bugs without screwing up stuff that already works.

I’ve worked on three 10+ year-old, massively-sized projects (CorelDRAW, Microsoft Access, and ERDAS Imagine) and let me tell you — the older the code base, the tougher it gets.

In very mature projects, maintainability starts to become more important than optimization, and the prevention of introducing new bugs can trump fixing old ones.  You’ll even see libraries where they decide to keep old bugs in place, since consumers up the chain rely on the buggy behavior.

If you’re a programmer, it’s important that before you change any function that is used elsewhere in the system (a “core” function), you check each and every place it is called and understand the implications of your change.  If there’s any doubt, you need to either step through, or ask someone else who is more familiar with that code.

A safer alternative is to write a new function that caters to your specific needs.  This may seem wasteful at first, but it actually pays off in the long run.  This is because it usually makes for less complicated logic in the function, and simpler dependency chains.

Adding additional parameters and conditional branches in an existing function can introduce subtle changes that cascade to other parts, causing subtle bugs that are difficult to track down, and even harder to fix.

That said, there is a time and place for refactoring, but it needs to be done carefully.  It should be done independent of other changes, and be extremely well tested.

Automated testing and regression tests help fight this war, but coverage is never 100%.

I’ve found it’s often better to err on the cautious side and try not to break things in the first place :)

Management vs. Leadership

September 18th, 2008 Comments Off
Filed in: Project Management, Business, Development

Robert X. Cringely wrote a nice little post about Leadership recently. Everybody has lots to say on this topic — most of which is meaningless blubber — but I was particularly impressed with these little gems (emphasis added):

“Management is telling people what to do, which is a vital part of any industrial economy. Leadership is figuring out what ought to be done then getting people to do it, which is very different. It is a vital part of any successful post-industrial economy, too, but most managers don’t know that.

In contrast to the military, most businesses do a lot less explaining and pondering and a lot more laying down edicts. That’s management, which works fine on an assembly line, but not at all well building a big software application or winning a war.

You can read the full article here: http://www.pbs.org/cringely/pulpit/2008/pulpit_20080917_005420.html

Reducing the Risk of Fixed-Price Projects

August 12th, 2008 Comments Off
Filed in: Project Management, Business, Development

Scott Ambler has posted a follow-up on his previous article about fixed price software projects at http://www.ddj.com/architect/209602001.

As a quick summary, he gives five recommendations:

  1. Give a ranged estimate (+/- a certain percentage or amount)
  2. Do some upfront agile modeling (using people who will actually do the work)
  3. If the customer still insists on a “precise” estimate, pad the number as much as possible to account for the risks
  4. Fix the price, flex the scope (anything added requires removing something of equal effort)
  5. Stage the funding, based on real deliverables (working software)

More to come on this topic…