Archive for April, 2006

Six months and counting

Posted in Daily Entries on April 30th, 2006 by Mike Taber – 3 Comments

Somewhere between signing my second and third contractor agreement, I didn’t realize that I had been in business on my own for six months already. I guess since things are on the upswing, I wasn’t really paying attention. Six months later, and still in the black. Not a bad spot to be in. Not bad at all.


aye - mo

Posted in The Good, the Bad, & The Ugly on April 27th, 2006 by Mike Taber – Be the first to comment

aye - mo‘ (pronunciation only listed)
The company is focused entirely on selling cell phones, cell phone replacements, upgrades, and service plans. They can get you into AT&T, Verizon, Sprint, Cingular, Nextel, and probably several others neither of us have ever heard of. I think this is a great idea. Dealing with cell phone companies is such a pain that if you deal with a company focused on servicing people with cell phones, perhaps it wouldn’t be so painful. So why do I think this is bad?

Question: When you hear a radio advertisement for a company called ‘aye - mo‘, if you were going to look for a store location, where would you start? The internet or a phone book is a good answer. Great. Now that we have that established, spell ‘aye - mo‘. Here’s a potential list:

Ayemo, Aymo, Aimo, Ayemoh, Aimoh, Imo, Imho, Imoh, Himo, Haymo, Haimo, Haymoh, Haimoh… Shall I continue?

The fact is, that while their business plan may be pretty good, and their marketing has definately been getting the word out there (at least in this area), you have no idea how to spell the company name until you see it in print. I had to look this one up, since I’ve only ever heard the advertisement on the radio. What I’m referring to is the name of the company. It’s pronounced ‘aye - mo‘. I believe that their only location is in the Framingham, MA area, but they’re spending a lot of money on radio advertising. Newsflash to the executives: Run some print ads and back off the radio spots.

For the record, the name of the company is IMO, which stands forIndependent Mobile. Still trying to figure out where the ‘o’ fits in? I was too. The company name as listed on their website is simply Independent Mobile and with the initials of IMO. I believe they’re considering the letter ‘o’ as part of the word Mobile. Why is this bad? Well, when people are spending more time trying to figure out how to spell your company name and figure out what the ‘o’ stands for than actually getting to your stores, it’s time to change the name. The cynics out there would say that if the company has enticed me into researching the companyname already, then the marketers have done their job. I would agree if I were interested in knowing the name because I wanted a new cell phone, but I don’t. The only reason I looked it up was so I could criticize them.

Here’s a suggestion. How about ‘The Cell Phone Store‘. Bloody brilliant.


Another day, another grand

Posted in Daily Entries on April 27th, 2006 by Mike Taber – Be the first to comment

So, today is yet another day where I felt the need to drop $1,000 on software. Not just for me, thankfully. Some of it is for a new hire. He’s not full time, nor is he likely to ever be, but the paperwork is squared away, so it would appear that I’m going to need to buy some software licenses to accommodate him.

And you know what? I’ve done the calculations on what it will cost me to hire a full time employee, and it is hovering around $10k just in initial costs for software, hardware, and paperwork.

Suddenly, $1,000 isn’t such a high price to pay.


New Section Coming Soon: The Good, the Bad, and the Ugly

Posted in Daily Entries on April 26th, 2006 by Mike Taber – Be the first to comment

Tomorrow, I’m going to launch “The Good, the Bad, and the Ugly“, inspired by a poker variant of the same name. This section will represent an engineering perspective into the world of business and marketing. I started writing a daily entry about it two days ago, and it just started growing out of control so I decided that it warranted its own section.

Essentially, it will be a collection of different marketing campaigns, advertising campaigns, and business moves that I come across and wish to share with you. Each of these tidbits will include my own personal analysis of what I think is going on, and whether it’s Good, Bad, or Ugly. I decided that this scoring mechanism fit a bit better than some numerical score or star rating would have.

The Good: If I score something as Good, then it’s something that makes sense. It’s hard to think of an example off the top of my head, but let’s try it anyway.

Let’s say that EMC buys out VMWare to expand their software offerings. By encouraging people to use virtualization, and thus more hard disk space, EMC can offer rationale for their customers to add capacity via their hardware. Wait, that already happened? Well, that’s good. See? This is working out already. And you were skeptical of the whole thing.

The Bad:
This is the opposite of Good. It means… wait for it… Not good. Generally a bad decision or bad marketing campaign. Here’s one for you.

Dunkin Donuts
: Everywhere that you go in this area, Dunkin Donuts is there. I never really thought much of them in college, but as I started drinking more and more coffee, I realized that it was actually pretty hard to find anywhere that could provide a decent cup of coffee on such a regular basis. McDonalds of course has tried to enter this market with Newman’s Own from Green Mountain Coffee Roasters, and I certainly can’t blame them for wanting to try. However, McDonalds isn’t the focus here.

Those of you who have seen it will likely recall the latest Dunkin Donuts commercial that has this catchy little song coupled to it that starts off “Doing things is what I like to do…. yes!” After about the fifth time of hearing the commercial, I finally started to remember what the advertisement is actually for. Drink coffee at Dunkin Donuts. For those of you who have not seen or heard this commercial, you’re not missing anything.

The whole advertisement simply doesn’t make much sense. It doesn’t relate to the company, it doesn’t relate to selling donuts, and it doesn’t relate to selling coffee. So, what’s it for? It’s apparently an attempt to make the consumer think that getting things done is somehow tied to coffee and donuts which must be from Dunkin Donuts. Make sense yet? I didn’t think so. I don’t think anyone is buying that load of bologna. You get things done by working on them, not by taking a coffee break.

There’s really no hook for the advertisement back into the company. You could just as easily substitute Tim Hortons, or Starbucks, Brueggers, or any of a dozen other companies who sell morning beverages and refreshments and it wouldn’t make any difference at all.

The Ugly:
This is worse than ‘Good’, worse than ‘Not Good’, and is quite a bit more terrible than ‘Bad’. These are the sort of things that just don’t make much sense, are going to cost a boatload of money, and won’t earn a company any favors. It can also be something that perhaps earns a short term gain (read: stock price increase so executives can sell their stock options) but will be highly detrimental to the company in the future.

Cingular Wireless: Cingular just started advertising in the Boston area that they spent $6 billion last year on their network. But for the last 4 years running, Verizon has been spending in excess of $4 billion per year, and has marketed the heck out of that statement. This is a losing situation for Cingular. They’re challenging Verizon from a position of inferiority that has been acquired over the course of 4 years. Just this past year have they beaten Verizon. It’s going to take years and no less than $6 billion per year for the next 3 years to beat Verizon in this little game.

And the worst part of it all? Nobody cares. I have Verizon, and quite frankly I don’t give a hoot (don’t pollute) who spent what on their network. I just want my cell phone to work. And being locked into a cell phone plan for 2 years means even if I wasn’t happy with my service (and a lot of people aren’t), I couldn’t switch anyway without paying a hefty early termination fee of $175. Bad situation for Cingular. Very bad. Not only will they lose this battle, it will cost them billions of dollars to do it.

I think that by now, you probably have a reasonably decent idea of what to expect from The Good, the Bad, and the Ugly. See you tomorrow, different time, same place.


Code Writing Code

Posted in All Articles, Software Development on April 23rd, 2006 by Mike Taber – 2 Comments

I’m not sure why I hadn’t thought of this sooner, but in a very small software company, using a code generator would not only seem to be a great time saver, but would be an invaluable tool for creating vast quantities of reusable, high quality code. This is assuming of course that you do a good job with the templates to begin with.

One of my first experiences with code generation was working at Clearwire. The web based ordering software I was working on was under the unfortunate constraint of reporting to the sales and marketing team. Reporting to either of these groups alone would be a nightmare, but at Clearwire, doubly so as they were basically the same department. Even more difficult was that I was located in Buffalo, NY while the Sales/Marketing team was  located in Dallas, Texas.

I rather clearly remember one particular nightmare I ended up getting involved in. Let me give you the short story.

Week 1:
VP: “Hey Mike, can you make up some suitable text for this web page?”
Mike: “No problem.”

Later that day:
VP: “Mike, can you change that text you made up from X to Y? I’d appreciate it, and keep up the good work.”
Mike: “Sure, and thanks!”

Week 2:
VP: “Mike, can you change the text from Y to X for me?”
Mike: “Sure, no problem.” (Heh. Should have done it my way to begin with)

Week 3:
VP: “Mike, got a favor to ask. Can you change the text from X to Y? That would be great.”
Mike: “Hmm. Well, I guess so.”

Week 4:
VP: “Mike, the text on that page gives the wrong impression to our customers, can you change it from Y to X?”
Mike: “It just was X and you had me change it.”
VP: “Really? Well, I’m sorry. Can you change it please?”
Mike: “Allright.”

Week 5:
VP: “Hey, you got a second? Can you change the text from X to Y?”
Mike: “It just was Y.”
VP: “Who told you to change it?”
Mike: “ummm. You did.”
VP: “Really? Oh, I’m sorry about that. Can you change it back please?”
Mike: “No.”
VP: “What? Why not?”
Mike: “Because I’ve got too much code to write to respond to trivial requests to change meaningless text that nobody reads anyway just because you woke up on a different side of the bed than you usually do after drinking all night and snorting pixie stix with your buddies!”

Chances are that I probably didn’t say that last sentance, but I was pretty annoyed at that point. Basically, I insisted that I wasn’t going to make any further text changes until I had it in writing from him that it was what he really wanted, because I really had too much to do to waste time on changing text every single week.

Shortly thereafter, I received a bit of an unofficial reprimand from my boss for giving the VP of Sales a hard time. Our little chat involved a discussion about how an entry level engineer should address a VP of the company with respect, no matter how stupid he’s being at the time, after which I can bring my concerns up with my boss who will address it with his boss, who will address it with the VP in a social environment of beer and pixie stix so as not to damage his frail little ego.

Fortunately, my point was well taken, I was not formally reprimanded, and future changes were submitted in writing. Apparently, it was my tone that was ill taken. I took it as a valuable lesson about how to reprimand your superiors for excessive stupidity.

Even so, when I was tasked with rewriting the application quite some time later, I built templates that would regenerate the application UI by tweaking configuration files and then running a script. I always found it an impressive little design I had come up with. Code that writes code. Very spiffy!

Of course, whenever you write any code, you’re writing code that writes code because it eventually compiles into machine code. But that’s really not quite the same thing as ‘code that writes code’. Converting to machine code is merely compiling the source code you’ve written into something the machine can understand.

On the other hand, a true code generator will operate from a set of widgets to generate structured code that is useable in other applications, either directly, or as a library that is compiled after being generated.

There are a lot of subtleties that I’m intentionally glossing over. For example, would software that unrolls the loops in javascript to make the page load and execute the javascript faster considered a code generator? Probably not, and definately not in my book.

Would that really work anyway because the load time of the page would be increased in direct proportion to the number of loops that are unrolled, forcing the javascript parser to take longer to parse, load and exacute said javascript? No, probably not. Don’t laugh, I’ve seen this suggested, and no it didn’t actually work.

The fact is that a good code generator equipped with the right generation templates can save you a ton of time and development costs. How much you ask? Well, this month I’ve been doing a lot of research on code generators. So much research in fact that I’ve been seriously neglecting this blog.

As a one person startup company (soon to be expanding! woohoo!), it’s really hard to do everything, so any edge that you can find to get more done in less time is a welcome addition. This includes everything from outsourcing, automation, and yes, code generation.

I’m the type of person who is big into databases. I’ve been writing applications to interface with databases for nearly a decade. There are literally dozens of different schemes for doing so, and so far not one of them has been proclaimed by developers to be the ‘best’. The reason is simple.

Every data layer schema involves tradeoffs. When you abstract the database to the point that it becomes no different than the code itself, you lose bare metal access. If you lean in the other direction and rely on the database to do some of the work, you lose flexibility to use any database you like because not everything works the same in every database.

Sure, the basics are the same, but do you really feel like writing case statements based on how to get the database date, based on the database you’re connecting to? I didn’t think so. Writing database independent code is hard, and rightfully so.

Database vendors don’t make it easy, nor would they want to. Do you really think that Oracle wants their customers to be able to swap SQL Server, mySQL, PostGres, Firebird, or anything else in as the back end database whenever the customer decides they don’t want to pay $40k/processor per year for licensing fees?

The business justification for Oracle and Microsoft avoiding this sort of database swapping becomes even more relevant as computers move towards multi-cores. Oracle has decided pricing should be based on a per-core basis, while Microsoft prices SQL Server based on a per-socket basis. While obviously performance comes into play, if it were easy to swap one database for the other, pricing becomes a much more serious consideration.

I don’t think that there’s any doubt as to whether a code generator can save time if good templates are already available. The tool I’ve been concentrating on lately is CodeSmith, from CodeSmith Tools. It’s not real expensive, and it certainly has a lot going for it. As someone who has worked with SQL Server and web applications for years though, I find it somewhat lacking in the templates that I really want.

Fortunately, there’s a decent sized user community behind it, and all of the templates can be easily customized or rewritten. So if you’re like me and you don’t like the way a set of data access layer templates are written, you can rewrite them.

But is this saving time?

There are a lot of things going against you when trying to answer this question. You have to find the tools, you need to work with them to evaluate them, then you need to build the templates you want, and hope that it’s saving you time rather than wasting it. It’s possible that given all of that, you could potentially use more time. So, how do you know whether a code generator is right for you?

Simple math, my dear Watson.

CodeSmith has a nifty little ROI calculator, which is likely more for marketing purposes on their part than anything else. The project that I’m undertaking right now has something of a large database behind it, and after generating around 80,000 lines of code, CodeSmith estimated that I had saved 1,600 hours of work and nearly $100k in development costs, assuming 50 lines of code per hour and $60/hour for salary.

That alone is justification for CodeSmith, or any other code generation tool for that matter. Just don’t spend 10 months working with and learning how to use the tool before you start on your project or you’re back where you started. Even if other tools don’t include an ROI calculator, it’s pretty trivial to throw a perl script together to count the lines of code that were generated for you.

The other great thing about code generation is that when you make changes to underlying application structures, you can simply regenerate the code from the templates. Did you add a column to a table in the database? Regenerate it, and all of your collections, enumerations, business objects, and everything else are updated quickly, cleanly, and flawlessly.

Wait, flawlessly? Well, maybe. You should still do testing to make sure the new code works, and you should verify that none of the other source files changed. This is best accomplished with source control and differencing source files. You are using source control, right? Since you already have a tool which writes code for you, why not use it to write unit tests for the various objects you’ve created? Why not indeed.

Code generators can also be used to help write documentation. One of the first tools that I ever used for this was javadoc. While it was meant explicitly for java, it did the job. There are other tools out there like NDoc, Doxygen, and literally dozens more. Need to document the database for your application? Some are free, and some not. The documentation doesn’t need to ship with your product, but as an internal document, it can be invaluable for new hires.

Like all things, code generators do have their downsides. These are mainly measured in template development and learning how to use the tools. But if I could trade 160 hours of work and $500 to get 1600 hours worth of code, you can bet your bottom dollar I’m going do it.

To take that a step further, if your company is planning on rolling out 5 products, and you can reuse your templates, you will have accomplished 4 years of development in just one month. That’s a pretty staggering productivity rate. Not to mention that all of your code will have completely uniform coding standards, making it easy to follow for anyone.

After having said all of this, I do feel the need to attach a bit of a disclaimer. While code generators can save you a lot of time and effort, the temptation is certainly there to continue using this two ton wrecking ball to put a screw into a piece of drywall. Not only is it the wrong tool, but the scale is seriously out of whack.

Code generators are not a one size fits all solution. Nor should they be used in every situation. It’s just not always appropriate to use them. Still, they can provide some useful functionality, and are definately worth a good look. And if it can save you a lot of time, effort, money, and ultimately result in a higher quality product, then you owe it to yourself to explore the possibility, even if you decide not to go that route.