How to Make Millions off Rounding Errors

Ahh, tax season. The most wonderful time of the year. I recently discovered while going through my past year’s expenses, that Bell Mobility (my cell phone carrier) has been over-charging me on taxes every month. Well, 11/12 months, actually. Once did I see a rounding error in my favour.

This was odd, but not entirely surprising. Bell Canada obviously has legacy software, and as a practitioner I can see how these bugs can get in. But did other people experience this? Did anyone else even care?

On my bill, I found that sometimes the taxes were being rounded up instead of down and other times, just completely wrong as it was off by at most 6 cents sometimes.

When you think about it, 6 cents is not a lot, nor is it worth 20 minutes on the phone with a Bell CSR who doesn’t stop laughing at you and making smarmy comments about writing you a cheque for $0.06.

But 2 cents, 6 cents, whatever, every month adds up. It adds up to $1.51 over a year in fact. And with 7-8 million customers who don’t notice, that’s a lot of revenue for Ma Bell.

So, I went immediately to Google to complain and sure enough there were other people experiencing the same problem but didn’t feel the need to fight it.

After talking to the CSR, it was revealed that this was in fact, by design. This is part of the billing software because they charge tax on every line item on your phone bill. If the line item was $0.35, they’d round up $0.0455 cents to an even $0.05.

On my last phone bill, there was over 200 line items, each one being either rounded up or down after having taxes applied. The end result? The sum total was off by $0.04 cents.

So how would you convince Bell to stop this madness? In high school, they taught us about significant digits and how you should keep track of significant digits until at the end before rounding the value. Clearly, whoever programmed this billing system is accumulating fractions of pennies in an off-shore bank account somewhere.

If you’re a small business or incorporated, you can claim back the GST that you paid. This means there is an opportunity here to actually make money! The key is to maximize the number of times Bell rounds down on each line item. That means making quick phone calls that last less than a minute repeatedly. If you do this a few thousand times, you might be able to make $0.50! Just imagine the money piling in!

I’ve made a quick chart of how this works out. Hopefully it explains things a lot clearer than I can explain.

Now all you need is a (money) laundramat.

Now all you need is a (money) Laundromat.

Undermining Google and Increasing Web Traffic Without SEO

This past weekend, I attended the Impact Conference with Nick. We were there to exhibit our business venture GoEyeball.com –a website that provides free price monitoring and alerts– in front of a group of nearly 500 delegates from all over Canada. Most of them were representing their high school or University.

These days, customers go to merchant’s sites and search for what they want. They repeat this process for every vendor. In our world, we want people to just say what they want, and how much they want to pay for it. In the online world, it doesn’t matter much where your Sony TV comes from, as long as shipping is free and the return policies are fair. This is what we offer at GoEyeball. A solution to online shopping that seems intuitive for the shopper and a nightmare for the merchants.

Our booth was fairly low-budget. We had one giant sign and a few business cards. Our swag came back misprinted so we couldn’t give away any keychains or hats. We were still able to demo our product using a laptop and some fast talking.

On the second day, we were asked to participate in a formal pitching contest in front of the entire delegation and be judged by a panel of three judges. The winner of the pitching contest, would win a prize worth $10k. We didn’t win, but we still got a lot of value out of doing it.

It seemed to generate a lot of interest, and people were immediately sending out emails to their friends about it. I’m hoping the momentum continues and we can then start to build a product that changes the way people think about online shopping.

When I got home, I checked our SEO ranking and noticed that we were the #1 result on Google.ca when searching for “price monitoring service“. This was amazing to me, since I really have no idea about SEO at all. I thought about it, and tried to think how this could have happened since I was not actively doing any SEO.

Schools of Fish

In the popular speak, people often refer to  ”surfing the web” as the casual Internet user, going from site to site. I’m not sure how this phrase came about, but it doesn’t even seem to make much sense. The analogy relies on people’s concept that the Internet is a set of crescendoing waves, and you are on some kind of board going up and down. It seems to simplify through misconceptions of how the Internet actually works.

Well, if the Internet is the ocean, then in actuality, “surfers” are not surfers but in fact schools of fish. People don’t “surf” the Internet anymore. There are only a few sites out there that people consistently go to. These days, it is getting narrower and narrower. Near the top of the ocean is Google, Facebook, Twitter and then as you go deeper into the waters, few web sites actually surface as being a common hang out.

In the darkness of the Internet ocean, there are few lights that blink, attempting to attract the attention of these schools of fish. As we know, schools of fish travel in a singular movement, mostly for survival tactics. As their attention shifts, they move synchronously towards the new source of amusement.

Imagine a web site that has attained a cult-like following. Suppose its a blogger that has about 200,000 readers. As soon as he mentions a website and posts a link on his blog, suddenly that website receives a huge spike and would most likely take down the servers. This was known back in the days as being “slash dotted”. This is because slashdot.org was a website that self-proclaimed itself as “news for nerds”.

Before there were Internet surfers, bloggers, marketing gimmicks, viral marketing, and probably before Google (did Internet exist before Google?) there was slash dot. This website was popular beyond comprehension. Nearly anything worth going on in the IT industry was reported here first, then picked up in traditional news media.

This site was frequented by many IT people, including software developers that used the Internet mostly for work and out of boredom from their mundane bank jobs. They would often read slash dot for a daily dose of nerdy amusement. The readership on this site was increasingly growing and they didn’t even make any money from it. When no one understood the voodoo black art of SEO, most people just hoped slash dot would pick up their story, and they would do their best to try to get mentioned.

So there you had a huge school of fish that would move back and forth between lights shining in the ocean. They would always return to the origin, but they would be amused for a few days, maybe a week. These days, there are plenty of sites that operate as such, most with their own group of followers. With the help of Google Reader, they can group all their sparks of light into organized chaos.

Undermining Google and Increasing Web Traffic

So there is a strategy here, to draw the attention of the schools of fish. The next generation of Internet users are here and their attention span is getting smaller. If you look at Farmville and understand how it manages to attract users, you will likely do very well as a business on the Internet.

We can either convince the existing beacons of light to point towards our website, or we can try to influence the way people find you.

You can scheme and try to pitch your website to these schools of fish but often they won’t listen unless their trusted maven has vetted it.  Trying to convince sites with a large number of readers to mention your site will cost you. Nowadays, people already understand how the new Internet economy works. They know they can make money from pretty much anything.

The other way is to exploit search engines like Google. Since Google owns the Internet search market, people have understood that if you beat Google, you beat them all. The other search engines like bing! probably use Google behind the scenes.

Its easy to undermine Google now with all these domains coming available. You can register your domain in over 125 different country codes and publish the exact same content. This of course increases your web presence and your search results always nearly end up in the first 100 results (depending on how much content you have).

This method is easily detectable, and will likely not work for very long once Google figures out what is going on.

The second method is a tried and tested way to increase your web presence. The online dating website, plentyoffish.com was able to increase its web traffic from 0 to 10,000 visits a day, within a month. How did it accomplish this?

The way they did it was they created hundreds of microsites that were online dating related. The owner had a small team that would create 5-6 online dating site reviews a day, or blogs or just pages with static links that pointed to his site. The blogs were all baked, and the dating review sites were fixed but they worked. They all increased the page rank of his main site and drove thousands of visitors there.

This was the equivalent of “google bombing” but in a discrete manner. No automated system or robot could tell that each of these sites were his. All the domains were registered under different names, and all the URLs were unique. It would be literally impossible for a machine to recognize this as being a scam, and even a human would have trouble at that.

How much would it cost to do something like this? Probably a few thousand dollars. Maybe a few hundred if you had connections or outsourced a lot of it. A cheap way to increase SEO and soon enough you might even generate revenue from those microsites with banner ads. That is the Internet economy demonstrating the versatility and strength of its market, earning income for you while you provide it with banal content.

Shine a Light

For us, I think our goal is to become a bright light in swamp of Internet sites. We want to be noticed, but we don’t want to do it disingenuously. We want our users to spread the word to their friends and show them that there is a better way to do online shopping. Once people find us and understand what we can actually provide as a service, maybe they will want to tell their friends. Maybe the search engine results won’t even matter in the end, because with the faith and trust of your users, their referrals are all you really need.

The Nonsense of Twitter: A Death Knell to Social Interaction

Social Babble

I have often been the first to stand up and defend technology. When faced with arguments for or against the online publications versus the extinction of traditional forms of newsprint, I will always side with advancement of technology. In the arena of litigious issues such as P2P, I will advocate education of technology rather than the wholesale banishment of it.

In the software industry, many of the debates will typically reduce to one question: just because we can do it, does that mean we should do it?

That is the difference between advancing technology, and hindering it. Essentially, technology allows us to do almost anything, but poor decisions often lead to numerous Frankenstein-like creations resulting in a bloodied trail of disenchanted and bitter practitioners awaiting the next round of beatings.

Six Degrees of Tweets from Ashton Kutcher

More than recently, the advent of “social media” and “social networking” has been sold to us beneath a campaign of brotherhood: a worldwide message of “making the world smaller” as though this were a good thing. There has been a global campaign, to create a need for a product that was not there before. What was the need for Twitter, in terms of our ordinary lives? Creating a demand for a product that otherwise had no other purpose or need. As I sit here with three mobile phones, two laptops and a 46″ TV, I can’t seem to help but think I’ve been here before.

Courtesy of Aaron Riddle @ acriddle.com

In fact, before all this social babble there was only SPAM: unsolicited information that ended up in our mailboxes about things that I didn’t want or care about. But SPAM was ugly and it didn’t have a cute, blue bird or Ashton Kutcher. SPAM became our enemy and tools surfaced like SPAM Assassin to kill it and legislations rose deeming it offensive.

How would companies reach us, now that SPAM was marked as an outcast and undesirable? Introducing SPAM’s better looking twin, Twitter.

Somehow, somewhere, before we could completely kill SPAM, Twitter convinced us all that it was in fact, desirable to have unsolicited information. However, it was no longer unsolicited because you could subscribe and unsubscribe to the SPAM.. oops, I mean “tweets”.

The issue is not that you can or cannot unsubscribe, the issue is that people are now convinced that they want this! To be inundated with information is suddenly in vogue and it now becomes some kind of sociological phenomenon (endorsed with bizarre CNN segments where they read users tweets out loud).

Somehow, the marketer’s message came full circle, and now they’ve created a need for all of this typically mundane information. We find ourselves wanting to know more and more useless things, spending hours clicking links, re-tweeting, and following the endless streams of consciousness around the world. They’ve successfully enlisted the help of millions to do what they would’ve had to do themselves.

Social Solidarity and Critical Awareness

What is the sociological impact of this mass hypnosis? Why do we feel that we need so much information? Why is there never enough? The answers to these questions will help us understand ourselves better and show us where we are headed, maybe alter our course. Is this a path that we even want to be on? Should we be doing this?

Social interaction now centers around what people are tweeting about and its a race to find something interesting enough to keep your attention for 140 characters or less. If you stood quietly for 5 minutes in a bar, the most common word you will hear is ‘tweet’. People have fallen into a lull — a sense of false consciousness.

Have we become so bored with our own lives that the stream of information on other people’s lives are the top items on the menu of discourse? With advanced tools like HootSuite, you can also schedule your tweets every few minutes so that they get a fresh burst of, now solicited, messages. This isn’t about sending periodic updates about a natural disaster in Thailand, this is about self-promotion; or a link to your blog, if not an RT of someone else’s RT of a blog article.

As with most things, you cannot blame the medium but only the lack of critical awareness. As Marx suggested, we need to stand outside society and through scientific critique we can understand and alter our historical position. Separate yourself from the glue of social solidarity and objectively consider what it is these companies are asking you to do and decide for yourself.

Becoming aware and finding the right use with the right medium is the answer. An example of social interaction would be MeetUp.com, a website that has enabled loners to meet other loners. Here, you find the best use of technology to make your world smaller where groups of people actually want to interact with each other in real life.

Of course, this is nothing new. In this age, a successful marketing campaign can win you the presidency so it should be no surprise how SPAM was able to make its return from its half-grave, tarred and blue-feathered. Perhaps one day, I will read a tweet that you just fell down and can’t get up. Or perhaps you’re appendix has just exploded and are in critical condition at the hospital. Bear in mind, they will likely need to sterilize your iPhone before they let you go under the knife.

What we need to do is to be aware of what is looming on the horizon if we allow this nonsense to continue unabated; without checks or absent of any critical thinking. Our aim should be to use Twitter to further our progress in both technology and society, and less to further the art of self-promotion.

Twitter can be a great vessel, and it can help others reach those that would otherwise be unreachable. With no ulterior motives, we can take this medium and use it to lower the costs of helping those in need (as with natural disasters). It can reach millions instantly with a simple message that brings education to the uneducated. It can grow a network of unbounded numbers of people gathered for a noble cause and show strength in numbers. That is the greater purpose that lays ahead of us.

Limitations of Using MySql with Grails

Since Grails uses Hibernate inherently, it is a good idea to understand the limitations before storming ahead and bashing your brain trying to figure out why things don’t work. The first issue I came across was with a domain object having a long text field, such as a “url” which can be at most 1024 characters.
class Merchant {
	String name
	String url
        static constraints = {
               name(blank: false, unique: true)
               url(maxSize: 1000, unique: true, url: true, blank: false)
        }
}\<span style="font-family: 'Lucida Grande', 'Lucida Sans Unicode', Tahoma, Verdana, sans-serif; line-height: 19px; white-space: normal; font-size: 13px;">After starting up the app using "grails run-app" we run into a problem with the hbm2ddl.SchemaUpdate saying that</span>
BLOB/TEXT column 'url' used in key specification without a key length

Columns with SQL type TEXT exceeding 256 characters will fail table creation because of MySQL Error 1170. Two immediate options for relief are: 1) hand-craft the schema DDL and generate your database schema manually, or 2) remove any constraints that might require an index (e.g. unique constraint).

If you choose option 1, you won’t be able to use the “create-drop” option in your DataSource.groovy configuration, or even “update” if you are introducing a new field. This slows down development considerably.

If you choose option 2, you will likely violate business rules and introduce data integrity issues.

The Solution

A proper solution (but not necessarily the most elegant) would be using a custom mapping in the domain class to override the length of the column to be used in the index. The obvious drawback of this is the duplication of column length in the constraints and the mapping.
class Merchant {
	String name
	String url
        static mapping = {
            url sqlType: "varchar(1000)"
        }
        static constraints = {
               name(blank: false, unique: true)
               url(maxSize: 1000, unique: true, url: true, blank: false)
        }
}

The consequences of this solution is that the column is now a VARCHAR and not TEXT. In your scenario, this might not be desirable, and of course you should do your own diligence in comparing the benefits/costs of using VARCHAR as opposed to TEXT. In most cases, the differences of using VARCHAR or TEXT are negligible.

Further reading: The Definitive Guide to Grails, Second Edition

Trying to Co-Exist with Google

It seems every time I think of an idea, someone has already thought of it. More so, its typically Google. Previously, I mentioned that it would be great to have a highly collaborative environment for coding. Now, they’ve just unveiled Google Wave which is going to be the definitive online collaboration environment. It will redefine communication on the Internet and how you interact with people. No more trying to organize trips, weeding through endless emails, managing workflows. Google has the answer to everything.

Google has quickly become a depot of innovation and an incubator of ideas. The challenge for the rest of us is to be able to co-exist and if possible, even succeed without being destroyed by Google.

Being an entrepreneur is difficult enough without having this looming cloud of Google sitting on top of you. Once you do find your idea and fall in love with it enough to accept that even if Google is doing it already, that you will still ford ahead and do it, then the fun starts. For the most part, the technology part is the easy part, its everything else that’s a pain. Marketing and sales can be tough and shouldn’t be taken for granted. Of course there are some who say that a product markets itself, and that usually just takes patience and hard work.

Check out the video, the intro is a little creepy and cultish, but the demo is pretty neat. You can skip ahead to about 8:02 of the video.

Creativity in Software

“Great software, likewise, requires a fanatical devotion to beauty. If you look inside good software, you find that parts no one is ever supposed to see are beautiful too.” – Paul Graham, Hackers and Painters

I am often brought back to this essay by Paul Graham. He often grounds us in our pursuit of perfect software by putting in perspective the nature of our work. We may not be as artistic as our tradesmen counterparts, but if we strive for a more balanced reform between technical work and artistry, we can deliver high quality and more original work, leading to innovation and greater aspirations.

Creativity is key in software development as much as it is in any other profession.

Design Smells: Fragile Unit Tests

Introduction

In Uncle Bob’s book on Agile Development Principles, he mentions 7 design smells. These are all very good articulations of what it means to have clean, maintainable and extensible code.

What he does not mention is that there is another smell: Fragile Unit Tests (FUTS). Perhaps the reason no one thinks about this, is because not many people actually do unit tests at all. If you code has fragile unit tests, you’ve surely got even more fragile code. Having a solid foundation of tests acts as a safety net, but when your net has holes, it will do no more good than just adding to the maintenance of your program.

After having read Kent Beck’s article on Just Ship, Baby, I have become more wary of unit testing for the sake of unit testing. I have since then come up with my own rule of thumb for TDD. If it hurts to do something, then you’re probably doing it wrong (or don’t do it at all).

Here are 3 other testing smells that I think are good indications of your code having FUTS and in turn, lead you to take notice of more subtle design smells lurking in your code.

Zombie Unit Tests

With unit testing, it can quickly become a giant blob of ugly code. You’re constantly maneuvering an obstacle course of external dependencies and as you do, you’re not really paying attention to the mess of prior tests you’ve written. You’ve started in earnest with very solid TDD principles, and promised yourself to go back and refactor those duplicate lines of code. As you’re getting further, you fall behind in your refactoring, but hey, they’re just unit tests, not production code!

You’ve finished enough to get 80% code coverage, and breath a huge sigh of relief, never to embark back on that class again. Like Attack of the Killer Tomatoes, you worry that one day, your giant class of four or five unit tests will come storming down 5th Ave heading directly for your head! So our rule is, If you are dreading your unit tests coming back to haunt you, then your tests are already unmaintainable.

Making a Mockery of Your Code

Legacy systems are hard to test. You’ve joined a company and congratulations, you’ve just been awarded the worst inheritance ever: 600K of legacy code. You try your best to add unit tests, slowly unweaving the external dependencies, and realize, there are still more external dependencies. This is something you should recognize as bad design according to the Rigidity design smell. If you can’t inject dependencies then you can’t test without the dependencies. So what is your only recourse? Mock objects. There are several drawbacks to mocks. I consider mocking to be the last resort or last line of defense against legacy code.

The danger with mocking is if you end up mocking out too much at the beginning. You know its going to be hard when your code is considered “legacy software” (probably in 3 months), so why put yourself through it now? Heavily relying on mock objects is a good indication that your design has some serious flaws. Even with JMock 2.x, you’ve got several sequences or orders that need to be mocked out exactly in order for the test to fail. So our rule is, If your test relies on a lot of mocking, you are likely violating OCP.

Impersonating is Fragile

Along with heavily using mock objects, the other key insight is that mocking objects and not roles creates fragile unit tests. Roles are defined by interfaces, which can be implemented in a variety of ways. If you mock out concrete classes, you are constrained to the internals of that particular implementation, and now you’ve violating the The Interface Segregation Principle. Thus forcing a tighter coupling between your code, and your tests are not proving anything except for this design flaw. The only time you should mock out a concrete class is if you have no way of changing that class (e.g. EJB2.x). This was also mentioned by Steve Freeman, co-author of jMock library. jMock provides a class to do so, called Imposteriser but it has been moved into the legacy module. So our rule is, Prefer mocking roles and interfaces, than objects and concrete classes.

Conclusion

These a few that I have taken note of and have made an effort to be wary of when I’m practicing TDD. Recently, I’ve been more inclined to define contracts first, rather than tests, in order to maintain a more aligned adherence to the domain problems. Setting up your contracts as though you were the client has helped a great deal in deciding what to test, how much to test and how to focus on solving the business problem at hand.

References

Object Mentor Resources

jMock ooPSLA Article: Mock Roles, not Objects

Kent Beck: Just Ship Baby

Steve Freeman on Testing Smells: Listening to the Tests

Cope vs. Uncle Bob: Architecture through TDD

Does doing TDD make you a professional? Software debates can be dry at most times, but this debate between Robert C. Martin and Jim Coplien (“Curiously Recurring Template Patterns”) gives rest to the notion that TDD can be substituted for good (up-front) architecture. Though friendly and jovial, I found the talk to still be enlightening, particularly hearing Cope’s opinions on XP and the benefits of doing CDD (contract-driven development).

“On the other hand I don’t believe architecture is formed out of whole cloth. I believe that you assemble it one bit at a time, by using good design skills, by using good architectural skills, over the weeks and months of many iterations. And I think that some of the architectural elements that you create, you will destroy; you will experiment in a few iterations with different forms of architecture. Within 2 or 3 iterations you will have settled into the architecture you think is right and then be entering into a phase of tuning. So my view of that is that the architecture evolves, it is informed by code that executes, and it is informed by the tests that you write.”  – http://www.infoq.com/interviews/coplien-martin-tdd  

Integration Testing, As a Matter of Course

It is frustrating how so often projects treat unit testing as an afterthought, scheduled somewhere between development completing and QA testing beginning. Project plans seldom meet their deadlines, so unit testing is often the one to suffer. Or in some cases, testing in general.

Frameworks that can assist in unit testing have been a major time saver for the amount of work that would otherwise need to be put in. I’ve recently re-discovered the joys of development, and in particular test-first development. Using the Spring TestContext Framework it has become even easier to not just do unit testing quickly, but also integration testing.

The importance of both is often understated, as integration testing is more crucial when there are external dependencies. With a few annotations, one can create an integration test simply by specifying the database connection settings and focusing on the critical test paths through the business logic.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"test-context-data.xml"})
@Transactional
public final class BidnessLogicManagerTest {
    @Autowired
    private BidnessLogicManager bidnessLogicManager;
 
    @Test
    public void shouldRetrieveIdentity() throws Exception {
        Identity identity =
              this.bidnessLogicManager.findIdentity(10L);
        Assert.assertNotNull(title);
    }
}

The test-context-data.xml contains your usual datasource, transaction manager and other bean configurations.

With this class, you can test logic with rollbacks, test without rollbacks, or you can set up transactions before entering them. If so desired, you can also extend AbstractTransactionalJUnit4SpringContextTests to have access to convenient underlying low-level classes.

This is the way to develop, and its unfortunate that developers will most likely miss out on this, as they are rushing to meet deadlines and pressured to push out code. Using annotations with the Spring TestContext Framework gets us one step closer to having a real internal DSL that allows us to develop in the context of the domain. We can start shedding all the baby fat of traditional Java development, and worry less about all the plumbing.

If Java is to compete with the young, fresh new blood on the horizon, it needs to continue moving in this direction. Java is a powerful language, but it must become more lightweight and faster to develop to stand up against languages like Ruby or even Python.


See Chapter 8. Testing with Spring for more information.

Technologists as Business Leaders

I’ve recently begun to pay more attention to celebrities. Celebrities like David Deutsch, Dave Eggers, Brian Greene and Nobel Laureate James Watson. Celebrities that are, indeed, far less likely to appear at a Hollywood party than a pink chihuahua.

Though these celebrities are not mainstays of tabloid newspapers, they are inspired purveyors of hope and vision. Listening to these talks have eased my transition from startups to big name corporation and have given me the motivation I need to get off the couch and start building on these ideas.

Prior to leaving my last company, I had spent hours weeding through Monster.ca, Workopolis, and various other avenues for employment seekers. Through weeks of reviewing job postings, looking at companies and hoping to match them to my own ideals, I found there were very few that stood out as fresh or very agile at all. I was looking for a company that believed in what they did, not to become rich, but to be able to sustain themselves so that they could continue to do what they loved, indefinitely. To me, that is the ultimate success. Now, where would I find something like this?

It use to be that you could go onto craigslist.org and see very unique job postings. Since only the “cool” people used craigslist, it was evident that only “cool” companies would post job ads there. No longer is the case, as word has spread and the enemy is onto us. Now, everyone is trying to be cool. It seems, nowadays, everyone wants to be the cool, hip, company. Unfortunately, in reality, these types of companies are very rare — and that is exactly what makes them cool.

Some of the postings on craigslist are actually written in a very affected language, hoping to entice fresh minds with their somewhat obvious marketing ploy. Imagine your dad, wishing to fit in with your generation, trying to make jokes about Kanye West and Britney Spears when your friends are over hanging out. His attempts to fit in, readily fall out as awkward, sad and ultimately, pretty lame.

It seems this kind of marketing is becoming more prevalent, with the onslaught of Koodoo ads. Everywhere I go, there are pictures of leotards and cellphones. These ads hope to win you over with its slightly obvious attempts to connect with your hipster/scenester/trendster sensibilities. How does this kind of advertising do anything but annoy people? Similarly, in the delicate art of recruiting, these gimmicks not only fail to attract the right talent, but drive them away or worse, attract the wrong type of talent.

It is entirely possible that I have myself become out of touch with what the kids think is cool these days. Perhaps I am the Dad (who is not a dad) without a sense of humour. Could it simply be a matter of my own conceit or rather a deplorable closure of ingenuity and authenticity?

I have reached a point in my career where I am slightly behind in experience, yet slightly ahead in ambition. While working at my last company, I’ve condensed in 2 years more experience and exposure to technology and practices than most people would in 5 years at a large corporate company. In fact, during interviews, I’ve often been asked, how is it possible that I was able to work on all these different technologies, as though it were slightly incredulous for this to be true.

Most other companies, the opportunity to experiment or adjust if something is not working, is harder and more costly. When requirements change, as they often do, large companies cannot adapt quick enough because of all the processes that were put in place to protect the company against the whole trial-and-error affliction which most startups are generally known for.

In the software industry, change is often the only constant, but change in large companies is often difficult and slow.

These companies have adopted as a matter of practice certain methodologies from 30 years ago that at the time seemed fine and worked for many projects. Those software processes that large corporations adhere to, cannot handle today’s fast-paced environment, yet many of them are trapped because they’ve grown so big that they can’t risk changing to a whole new process. As the common phrase goes, “Better the devil we know, then the devil we don’t.”

Unfortunately, the software practice is still immature, and what was agreed as the only way to develop software in 1980, has now many other, and in many ways, better, options. How do we ween corporations off the old processes that are costing money? And how do we get them to adopt a more agile approach? It must start of small, and with a project whose success or failure is equally less important. It must grow organically as a movement from within the groups. This will then lead to bridging the gap between management and product development.

There is a disconnect between those who understand how to drive a business, and those that understand how to get the most from technology. Then there is also the disconnect between those who are managers, and those who are developing the product. I believe those that manage software developers should be as or more passionate about software than the developers themselves. There is nothing more disheartening than being lead by someone who cannot connect with you at the most basic level. Leaders who do not lead from within the group itself, risk being seen as an outsider or worse, as the enemy.

In some instances, I have noticed that developers are often viewed upon as factory workers; resources who are tasked and are accountable for completing those tasks. This type of thinking discounts the ability of software developers to provide any more value than what they’ve been tasked with.

I subscribe to the more unpopular belief that software developers are capable of being more creative than most other professions. If we were to learn anything from Google’s experiments, it is to say that a company lead by technologists (Brin and Page) in equal cooperation with a strong business mind (Schmidt) will undoubtedly yield ground-breaking and innovative products with high utility and soaring profits. Google has become unparalleled in brain-power and proven that business growth can go hand-in-hand with technology growth. If we could only spend some time investing in change, and preparing ourselves for change, perhaps we’d understand better, how to be as successful.

←Older