Best and Worst Collaborations

… or, a better title might be: “too much structure kills creativity”.

When I think about the best, and worst, collaborations I’ve been involved in with TeamCamp, the collaborations where we’ve ideated, prototyped and produced something, were by far the best. The richest collaboration was definitely on a web service we developed called Twegather. The idea was born from a problem that we personally experienced, and it allowed our diverse group apply our skills. We rapidly prototyped a service, from a quick and dirty MVP, to a full fledged service. We pivoted through three UI designs, and constantly innovated to make the service easier to use. Ultimately, we closed the service down because we really couldn’t see a way to monetize the service and we all got busy with other things. But it was an incredibly fun and rich learning experience and I never regretted a minute of it.

On the other side of the coin was the 3 months we spent trying to find a niche market. In this case, we followed a set process to test ideas and determine of there was a sufficient market to turn the idea into a business. We rushed the ideation stage and hurried to get to the point where we could test the idea through Google Adwords. Despite meeting weekly, we never did come up with anything and while we learned a lot, it felt more like drudgery than fun.

I think what killed our enthusiasm was quite frankly the focus on making money. Searching for a niche market isn’t about doing something you love; it’s more about solving a grinding problem, something that people are will to pay for. All of the niches we stumbled across seemed mundane; it was simply hard to get excited about it.

For me, if it’s just about making money, then there’s far easier and more dependable ways to do that. I already have a great job at a great company. I love web developing because you can create neat and innovative things. Some of those things might not be practical, but the who cares if your doing it for the enjoyment? I think the other TeamCampers on the team probably felt the same way.

A main theme of the Creativity, Innovation and Change course is getting to know yourself. Personal reflection tools like CENTER add a character development dimension to the course that is an important first step towards unlocking your creative potential CENTER is an acronym, that stands for Character, Entrepreneurship, owNership, Tenacity, Excellence, and Relationship. For me, my CENTER is:

  • Character: I love learning about new ways to do things and trying them out
  • Entrepreneurship: I’m unhappy with the status quo (especially when it’s not working) and I like to change things up (even if sometimes if sometimes it doesn’t work)
  • owNership: When I choose to do something, I learn everything I can about it to do it really well, be it cycling across Canada, learning to program in Rails or R, or oil painting.
  • Tenacity: I tend to get discouraged easily, so I need to put negativity and setbacks behind me and just keep going
  • Excellence: I plan to keep learning and creating and staying healthy until the day I die
  • Relationships: My family is my wife and my kids who mean everything to me; my community is the Ottawa startup community who are always enthusiastic, supportive and creative

Before you try something new, it’s important to understand yourself and what motivates you. It’s easy to get distracted from that and occasionally follow the wrong path.

Learning from these experiences I now know that for TeamCamp to be successful we need to:

  1. Brainstorm and constantly come up with many, many more ideas;
  2. Follow-through on the ones that have a high interest level for yourself and are aligned with your CENTER;
  3. Build it! Don’t worry about whether it’s going to make money. Rather, focus on making people happy through what you create (the money will come);
  4. Lead or join a team that has similar values to yourself.

 

 

 

Multitasking is Bad

Jason Garfield executing juggling moves

Jason Garfield executing juggling moves

Yes, you read correctly: multitasking is bad.

I’m not saying that being able to “multitask” is a bad thing – of course not – we all need to be able to switch our focus to handle urgent and important tasks.  What I am saying is that multi-tasking is generally a bad thing.

We live in a time where an overabundance of information competes for our attention: emails, todo lists, instant messaging, desk phones, cell phones, iPods, spam, YouTube, Digg, IM, Twitter… the list goes on-and-on.

When humans are focused they can do amazing things.  Take the juggler above, or an aircraft pilot or for that matter anyone doing a serious piece of work.  Eliminating distractions permits your brain to switch into “R-mode” – your most creative state. That’s when the real pay-off work gets done: strategic plans, works of art, new designs, great software.

However, when too many things compete for our full attention then nothing gets done well.  Think of your computer when it’s downloading a file, doing a virus scan and  searching you filesystem – it’s grindingly slow.  Your brain is the same:  The L-mode of your brain is switching from one task to the next, not really completing any one thing.  Meanwhile, your R-mode brain is virtually shut down, eliminating your chance of getting anything really important done.  In fact studies have found that multitasking can cost you 20 to 40 percent of your productivity.

So what can be done to help us to stay on task?  Here are a few suggestions from Pragmatic Thinking and Learning by Andy Hunt (The Pragmatic Programmers, 2008), plus a sampling of tools I’ve found to be helpful:

Work on what’s important

The first you need to do is decide what’s important:

  1. Make a ToDo list – no one – and I mean no one – should try to keep a list of things to do in their head.  It causes stress and you will “drop the ball” on something.
  2. Prioritize your list: Use Stephen Covey’s principle of putting first things first: A-Tasks: Important/Urgent; B-Tasks: Important/Not Urgent; C-Tasks: Urgent/Not important (try to stop doing these things); Not urgent/Not important (definitely stop doing these things!).  I use Ryan Lowe’s Lighterest as an easy way to sort my tasks into buckets.  Then I use the online CEO by Geoffrey Grosenbach to help me to make sure I’m working on the right things.  If you don’t like those tools there are lots of other free list managers out there that will work for you.  Even a notebook and pen is better than nothing.
  3. Eat a frog everyday – By “eating a frog” I mean get one task out of the way that’s important but simply something you don’t want to do.  These are the tasks that result in procrastination. It could be paying that bill, making a telephone call you’ve been putting off; only you know what it is.  And if there’s more than one frog, start with the biggest.

Optimize your current context

Given that humans are not particularly good at multitasking it’s important that we have methods at our disposal to help us stay on task:

  1. Simplify your user interface – it’s true: a clean desk does help you concentrate better.  A clean desk removes all the little ugly things that are going to distract you.  The same goes for your desktop computer: shut down or minimize all the software and web apps that might distract you: Twitter, rss feeds and so on.  If you’ve got a Mac use OS X Spaces to organize the tasks by types of work.  For example, if your doing a communications based task then Email, ToDo list, calandar, Twitter are probably the right mix of apps; if you working on a presentation then likely PowerPoint and a browser window (for reseach) and perhaps Excel would be the right combination of apps.
  2. Get a second monitor – Having a second (or even a third) computer monitor means you to keep task-related items in context; you can then “spread out” your work and you’ll also spend less time searching for things.
  3. Cut down on email – First of all, shut off that annoying “you’ve got mail” announcement in whatever client you’re using.  Second, know and understand the following “truth”: send less email and you shall receive less email.  You know it’s true.  Have you ever gone on vacation to find you’re inbox cluttered with hundreds of emails only to find out that most of them have already been dealt with? Sure you have.  I’m not suggesting you ignore people – just understand what’s truly urgent and important – the rest can wait.
  4. When necessary, let others know when you’re busy –  If you work in an office then close the door.  If you’re a teleworker set your presence indicator (i.e. google mail, Communicator etc.) to “do not disturb”.  This is important if you get a lot of interruptions and you need to get something important done, but let your staff or coworkers know why you’re asking them not to disturb you.

In this day and age of the Internet, self-managing teams, freelancing and teleworking it’s more important then ever to learn to how to manage your time effectively.  And like any other skill, this is one you will need to hone to fine point.

Now, close this browser window and get to work on that “next big thing”.

-Chris

Update: for an idea of who a prolific blogger stays on task take a look at this post from John Nunemaker.  Note the clean desk, simple s/w setup and look for his comment on maintaining a TODO list.

What techniques to you use to stay on task?

“Test Driven” Development for non-programming related tasks

Lately I’ve been toying with the idea of applying the concept of Test-Driven Development to development methodologies for  non-programming related tasks.  Test-driven development (TDD) is a software development technique that uses short development iterations based on pre-written test cases that define desired improvements or new functions.

It strikes me that pre-written test cases could lead to a more successful new technology or process implementation.  For example, we are currently working on a project to introduce a new technology into a sophisticated telecommunications network.  Without getting into too much detail, this technology could dramatically lower the cost to deliver telecommunication services under a certain scenario.

What would the equivalent of “Test-driven” development look like in that scenario?  First, we need to define the “unit” that we are testing.  For this example, the unit of functionality we would like to test is that the technology can be deployed to 50% of our customer base.  This is a critical assumption and worthy of such a test: If the technology cannot be deployed to at least 50% of our customer base then we would either have to scale back our deployment or even discontinue the project.  On the other hand, if we find that we can deploy to greater than 50% of our customers we may have an opportunity to expand deployment and achieve even greater benefits than expected.

Let’s step through a typical test-driven development process to see how a this methodology would be applied in the example above:

Step 1 – Write tests

In test-driven development, each new feature begins with writing a test.

For our project, the equivalent of a “test” would be to develop a query in our databases that determines if 50% of our customer orders are being successfully deployed on the new technology.  The benefits of preparing this query ahead of time is that it forces us to think about how we would measure and track this information – something that is often neglected in implementation projects.

Step 2 – Run the test and see if it fails

In software develop the first test fails because the code to pass the test hasn’t been written yet.  Test-driven development forces a programmer to think about what a unit of code will produce before actually writing the code.  This leads to better code and a more productive programmer.

For our project, running our query ahead of time also fails because we have not yet deployed the technology.  However, to prove the concept we could run a query on a similar technology to test our assumptions.  Having proving our assumptions we are not only more confident about the potential success of the project but we also now have a query ready for the next step.

Step 3 – Write some code

In this step the software developer now writes the code that will make the test pass.

For our project, we would deploy this new  technology a test environment – first in the lab and then in the field under a controlled environment.  We now have all the pieces in place to run our test.

Step 4 – Run the tests and see them succeed

Running and passing a test in the software world proves that the code works.

For our project, we would process some test orders under different scenarios to demonstrate that indeed at least 50% of our customers could be deployed on the technology.  Having completed this step in a lab and out in the field we’re now ready to deploy the service to real customers.  We continue to run this test, i.e. running database queries to determine, if indeed, at least 50% of our customers are being deployed with the new technology.

Step 5 – Refactor code

In software development the programmer now cleans up the code as necessary, removing any unecessary duplication.  By re-running the test cases, the developer can be confident that refactoring is not damaging any existing functionality.

In our project this is where we have an opportunity to improve the deployment of the technology.  For example, perhaps we can achieve far greater that a 50% deployment by changing the way we use the technology.  If so, we could revisit the original business case and seek additional benefits.

This is a step that is often left out in non-programming related projects.  We deploy some sort of new process or technology and neglect to follow-up afterwards.  Maybe the process or technology isn’t achieving the benefit we expected?  Or maybe it’s even better than we expected and could be deployed on a larger scale then originally intended?  Either way, it’s important to “refactor” to ensure we are achieving the greatest benefit possible.

Repeat

In software development, the programming starts over with another new test, and the cycle is repeated to push forward new functionality.

For our project this also makes sense: customer demands change; new technologies are introduced;  we would prepare a new “test” and follow through with introducing the new functionality following steps 1 through 5 above.

Applies to more than just technical tests

The same principles for test-driven development would also apply nicely to testing expected cost benefits.  For example, our business model assumes that the successful implementation of our project would result in a 75% reduction in customer access costs.  But how do we know that we are achieving those results without preparing the appropriate “test” ahead of time?  The answer is that you won’t unless you have developed a way to measure the expected financial benefit and have deployed the appropriate test to ensure the expected benefit is being achieved.

Conclusion

The application of “test-driven” development methodologies translates nicely to other non-programming related development tasks.  It introduces a new way of thinking: clearly understanding the expected benefits of a project and definging a way to measure those benefits before implemention.  Not only should it result in more successful and cost-effective project implementations, but it should also result in a more productive and content project team.

Wish List: Discussion Groups as Easy to Use as Email

One thing on my wish list for Christmas is a team discussion application that’s as easy to use as as email.  It seems that no matter how hard I try use collaboration tools,  team discussions started in an application like SharePoint inevitably end up moving to email.   I don’t like lengthy  email discussions: they clutter up my inbox, threads are dsitributed and not easily searched, and they take place in a vacuum. 

What I really want is dynamically generated discussions:  I want something that recognizes that a discussion between 3 or more people has started and automagically moves the content to the correct centralized project discussion forum.  It’s then able to inform others on a project of the discussion so that they can join in. All the while, the interface is as simple as writing and replying to an email.

Is there such a thing or is that a pipe dream?

I hate printers

Printers never work right.  They’re always out of paper or ink.  The paper they use goobles up trees.  The empty cartridges go into landfills.  They’re expensive and need to be replaced far too often.

Yet, I’m often required to print out a document, sign-it, scan it and then email it to someone.  There’s something very wrong here.

The problem is even more aggravating when you’re a teleworker: you have to use your own printer, your own paper, your own ink – because for the small number of times you need to print something, it’s not worth expensing.

Let all teleworkers and employers of teleworkers unite! Bring an end to any task that requires a printer – please!

Ten Things Every New Rails Developer Should Know

So, it’s been about a year and half since I started developing in Ruby on Rails. Along the way, I’ve learned a few things the hard way that I’d like to share. These are things that will just make your life a lot easier:

  1. Develop Rails apps on a Mac – Practically every Rails developer develops on a Mac. That means that pretty much every tutorial was written on a Mac. Of course there’s nothing wrong with developing Rails on Windows (I’m thinking of a famous Seinfeld episode here), however, you’re already going to have a steep enough learning curve without having to tweak every other example or tutorial for a Windows machine. Besides, you can only get Textmate on a Mac, which is the subject of my next bit of advice.
  2. Use Textmate – Textmate is the de facto editor for Rails. Again, pretty much every Rails developer I’ve come across uses Textmate and there’s a good reason for it: Textmate comes with a great Rails bundle. You don’t need all the bells and whistles of an IDE – they just get in your way.
  3. Host your first application on a virtual server slice – don’t go the cheap way (like I did) and sign up with a shared web hosting provider. Besides the performance problems you’ll have a hard time using a deployment tool like Capistrano. Get a server slice instead from a service provider like Slicehost that allows you to setup you’re own OS, web server, application server, Ruby and Rails environment, mail service, logging etc. It’s more work initially but it will give you far more flexibility and save you time down the road.
  4. Learn to use a version control system like Git and use a central repository like GitHub – When you’re learning Rails you’ll try a lot of things and then you’ll want to undo everything you just did. That’s where a version control system comes in: it tracks all the changes you make and let’s you either undo or “commit” those changes. A version control system also let’s you branch off different versions and is necessary when more than one person is working on a project. Github makes it easy to share you app with others and gives you an offsite backup.
  5. Learn how to deploy your application to a production server early – even if it’s just the standard “Welcome to Rails!” screen, you’ll save a lot of time down the road when your ready to put your real app into production. Learn and use Capistrano – it lets you roll back changes if something goes awry. BuildingWebApps has great screencasts on deploying an application using Github and Capistrano.
  6. Get at least two books in both online and paperback form – the two books I recommend are Agile Web Development with Rails, Third Edition and Programming Ruby, A Pragmatic Programmers Guide, both by the Pragmatic Programmers. You’ll have these books opened up beside you all the time. There are other great books too: Ruby by Example, Concept and Code is an awesome book for learning ruby step-by-step. But in my view the Pragmatic Programmers books are the “bibles” you can’t live without. Besides, they’re a great publisher.
  7. Buy a 10-pack of screencasts from Peepcode – this excellent series of screencasts will help you to learn Textmate, basic and advanced Rails skills, Git and so on. You’ll definitely need more than one so take advantage of their volume discount. There’s also Railscasts that are 5 to 10 minute free screencasts with a new subject every week. These amazing railscasts will keep your skills honed to a sharp edge.
  8. Start a Rails-related blog – Even if for no other reason then to track your progress and share ideas. Although it is time consuming, posting to a blog is a super way to learn Rails. Don’t bother writing or installing your own blog using Rails (unless you can’t think of any better Rails app to work on). Use WordPress or one of the biggies. Again, it’s hard enough learning Rails and finding time to write blog entries without having to worry about blog setup, hosting, spam, and blog upgrades and maintenance.
  9. Subscribe to a good Rails forum With all of the resources listed above you should be able to handle 99% of the problems you’ll run into, but when you’re really stuck, there’s nothing like a good Rails forum to turn to. I use railsstudio@yahoogroups.com. You may have to be a Rails Studio Alumni to subscribe, however, you can get practically any question answered in 24 hours or less. There are other great forums as well.
  10. Have fun! – Enjoy learning Rails because it is a lot of fun. Don’t get sucked into the stupid debates about which programming language is better than the next, or whether the framework is headed in the right direction. Just focus on learning and building your skills.

I hope this advice will help to set you on the right path from the get go. Now go and build so awesome web apps!

– Chris

A Brilliant and Stealthy Business Model

The folks over at Yammer have come up with a brilliant way to bring a collaboration web app into the corporation, and at the same time, make some money from it.

Yammer is essentially Twitter for business – with some pretty nifty features.  To sign up for the service you need to provide a corporate email address.  Then, you get your co-workers, staff and maybe your boss to sign up – all free at this point.  What happens next is the local IT department jumps in and figures out it wants a piece of the action (you know – control, control, control).  The “corporation” then “claims the network“.  That means they get administrator privileges – manage content and members, set the password policy, restrict access to the company’s network, use a corporate logo – for just $1 per user per month.

I could easily see this as a stealthy SaaS model that will become very popular:  1. Get the corporate users on board; 2. Give IT the control when realize they can’t do anything to stop it; 3. Make money.

Absolutely brilliant!

Managing a Web Business in a Downturn Economy

Some good advice from 37Signals about operating a web-based business to survive a downturn in the economy:

  • staying small,
  • being frugal,
  • focusing on just a few core things at a time,
  • quick wins,
  • eliminating abstractions that lead to miscommunication and complexity,
  • only doing what you need to do instead of everything you could possibly do,
  • charging your customer for your service (instead of an advertising model)
  • marketing without spending

Like most of us, I’ve worked for companies that grew to fast and then had to cut back – it’s an awful and painful experience, no matter whether you’re the one being cut or you’re the one doing the cutting.

The key here is that if you manage your growth by staying focused, avoiding debt, staying profitable and staying away from revenue models that suffer in a downturn, you should do pretty well.

Dead Simple Ways to Prepare for a Job Fair

I just came back from a job fair at Carleton University in Ottawa.  It really struck me how unprepared the students and grads were.  Two simple things can improve your chances of getting hired:

  1. Research the companies that are going to be at the job fair – My company is the third largest telecommunications company in Canada, has over 6000 employees and annual revenues of almost $2B.  Only one of the 50 odd students/grads I spoke with knew who we were.  I had to spend the first five minutes explaining who our company is and what a telecommunications company does.  For god’s sake, if you really want to get hired do a little research beforehand!
  2. Bring some resumes to hand out – Sure, you can upload your resume and apply for a job online, but you’re much better off leaving something tangible before you leave.  Otherwise, how can you be sure that the employer will remember you or find your application later on?  Plus the employer can discuss your experience and qualifications with you and perhaps give you some career advice. It’s still a good idea to apply online but come with paper too.

These are two simple things you can do that will increase your chances of finding employment.  It will also optimize the short time you will have to talk careers with a perspective employer.

Ottawa Democamp10 & Announcing TeamCamp

Update: I’ve now created a wiki for TeamCamp

Ottawa Democamp10 was a blast! Just as promised, it was fun, friendly and informal.

Chris Taggart provided a demo of FixIt Ottawa – a local problem reporting tool. I spoke to Chris before his demo and I was really impressed by his hard work with the good folks at the City of Ottawa. Not only is Chris building a dynamic website but he also has to deal with government bureaucracy. I wish him the best in developing this site because I think it’ll be a great tool and I hope the City recognizes his contributions. It ‘s people like Chris who will bring our local governments, perhaps kicking and screaming, into the 21st century.

Aydin Mirzaee provided an amazing demo of fluidSurveys.com and ScreeningRoom. As I watched his demos it became clear to me that the stunning interface the folks at Chide.it developed not only represents the future of web applications but it sets the bar for desk-top applications as well. For example, in FluidSurveys you create web-based surveys by dragging and dropping questions, picking the method for responding, and adding flow controls, all from one screen.

I was also impressed by Gazaro, a platform that let’s you create your own personal sales flyer of the biggest and best deals of products that you are looking for in your area. I wish it was available before I bought that digital camera last week – I’m sure I would have paid less! These guys are taking intelligent search engines to the next level. It can even show you price trends over a time period so you can decide whether to wait before you make that purchase. I can’t wait for Canadian retailers to be supported. PS – check out the hilarious press release describing how Gazaro was selected as the winner of the “coveted and highly subjective Calacanis TC50 Disqualification award”.

Sixent is Ramius Corporation’s multi-profile social networking site. Sixent lets you control the way you share your online profile depending on whether you’re connecting with friends, family, business contacts, or the world. Imagine a Facebook that you could customize available content depending on who you’re sharing it with – that’s Sixent. The Enterprise version of Sixent could be a clever way to get social networking accepted by businesses that have not quite embraced the whole social networking thing.

Thanks to some Internet connectivity issues, Andrew Ross from osbootcamp sneaked in a demo of Ingress Cafe. This opensource product is a java application development tool that accelerates and simplifies development with Java. Ingress Cafe was selected as the Best Application Development Tool at LinuxWorld Conference & Expo this week. Impressive!

DemoCamp Ottawa reminded me why I love this city. Not only is it one of the most beautiful places in the world but we also have the most talented and creative thinkers around.

I took the plunge and provided a demo of one of my Rails applications, GiftMyList. I was truly taken aback by the warm and supportive response I received from the audience during and after my demo. It gave me the encouragement I needed to complete this particular project, and to get cracking on others, which brings me to the second half of this post…

Announcing TeamCamp

Team Camp is a series of events aimed at forming like-minded individuals into teams for the purpose of turning ideas for software or web applications into successful businesses.

If you are…

  • Someone with an idea that you would like to turn into a web or software business,
  • Working full time but, wanting to take the start-up plunge part-time before the BIG leap,
  • A student looking for start-up experience,
  • You have experience with start-ups and just want to lend a hand

… then come to the first TeamCamp meeting:

Date: Thursday, 9th October, 2008
Time: 6pm to 8pm
Where: @ TheCodeFactory (246 Queen Street)

How do you get involved?

Step 1. Contact Chris: chrisjchmitt[@]gmail[dot]com or Ian Graham: info[at]thecodefactory[dot]ca.
Step 2. Attend the kick off meeting.
Step 3. Bring your ideas!

Why are we doing this? In a recent Sitepoint post, Daniel Burka’s advice to young designers put it perfectly:

I’d strongly encourage them to find people with like interests and start working together on stuff. Build fictitious projects, and try stuff.

If this sounds like you then come on down to the first TeamCamp! (except we’re going to work on real projects)

A special thanks to Ian Graham at The Code Factory for his help and encouragement, and for providing us with a fantastic venue for hosting these events.

– Chris