Two Tools Required for a Freelance Developer to Accomplish Anything
Is it possible to work on multiple projects at once? Yes, it is, but you need these tools to accomplish it.
Recently, I received an email from someone asking how I could work on seven projects at once.
Like I wrote before in a previous post, it wasn't easy, but I was able to accomplish it (and I was definitely tired because of it).
When it rains, it pours
Here's a little background of what happened.
Rewind back to 2009. I was just let go from a consulting position because the client didn't need consultants. So I was a little panicky. With the economy trying to recover, I looked to my side business to find other work that would possibly help me out while searching for a full-time position.
During that time, I asked around and received a warm welcome from people who were looking for small web projects. Sure, some of these projects were small, but there was one that was larger than all of them. It was TriYou, a social network for media junkies. This project is continuing to grow and link people up with their favorite media (sorry for the shameless plug).
After acquiring four side projects, I also had three personally-invested websites that needed work as well before releasing them. Even though I was swamped, I wanted to make sure I wasn't creating any future technical debt.
So how did I finish seven projects within three months?
Two tools that can accomplish anything
Over the years, I have worked at numerous places where developers wrote code to build a system for a client and then turn around and rewrite that code again instead of reusing it. How insane is that? When you write your code, that piece of code should be in your arsenal for future projects (provided you don't have any legal obligations between you and your client).
There are several steps in leveraging your code to become more useful:
- Code Genericly - Make your code as generic as possible.
- Test the code - Make sure you test your code to provide a stable class, method, or extension no matter what is passed into it.
- and more importantly, DO NOT CODE A Presentation Layer - If your functional code works perfectly, it won't matter whether you have a mobile device, desktop, or web page, your back-end code will just work!
Your leveraged code should become more like Lego pieces.
As you continue to build your library, certain pieces of your code will logically connect and you will start building your library. My library contains routines such as blogging, general extension methods, forums routines, registration forms...the list goes on. The idea is that I've built them and tested them over the years.
Systems are what will build off of your library. Since you already have leveraged code in your library, you can apply that code to your system. I firmly believe in the 80/20 rule. Generate 80% of what the client wants quickly and code the remaining 20% around their specific rules.
Whatever your development skills, your library will grow over time. Organize it into a TESTED weapons that you can immediately start using that code without even thinking about "Now, how am I going to write that?"
This library of code will eventually become your systems.
"What do you mean systems?" you ask.
My "lego" pieces are broken into (aptly named) systems. These "systems" will be large frameworks that you can plug into any system and immediately extend it. This is why I decided to specialize my skills on the ASP.NET MVC framework, T4, and Project Templates. Oh, you need a forum for your web site? Include your Forum System into your web site and add the Forum controller. You are done. Something that takes someone 1 month to build is constructed over a weekend thanks to your system.
Do you have any examples?
Here is another example of leveraging your code and building systems.
I've built a general purpose CMS (Content Management System) as a shell using MEF (Managed Extensibility Framework).
So anytime I have a new client coming on board who wants to manage their web site, I use Visual Studio to create a new MEF module for that client from a project template I built. It plugs into my CMS and displays their site-specific information in their brand new tab. If they need work done on it, I changed the single module and upload it. I'm done. The shell doesn't change.
When you have these systems in place, you can move forward with numerous projects and when someone asks you for a web site, you can almost immediately provide something for them in a matter of weeks instead of a matter of months.
How do you leverage your code? Do you have any systems in place? Post your comments below.