After being a senior developer for quite a few years (more than 15) I would like to start my own business and implement a product that will be used for financial purpose (it will probably take 4-5 months)
Now I have a doubt: if I stop working as contractor to implement my own idea I will lose quite a bit of money.
If I implement my idea after work it will take ages and the quality of the code won’t be as good because after having worked 8 hours I won’t be very productive.
That’s why I was thinking about Offshore Development. Doing that I can focus on design my application and writing functional specs and such I could then lead an offshore team giving them the guidance.
I could keep working as contractor to have funds to invenst in offshore development(the money loss will be less than If I stop working).
What’s your opinion about that?
You need to pay the bills and feed your family, so your options are that you take ages working on it part-time, in which case if you are entering a competitive market, then you may be too late.
Another option is that you can try to find VC funding for your idea that will allow you to put full time hours in and get it completed and out the door faster. Other ways of getting funding without getting in contact with a VC firm is partnering with somebody who has experience running a business and is willing to fund the venture for partial ownership. If you do this then you may have enough money to work full time on it and contract out much of the work.
Either way, if you are offshoring be extremely careful. It requires a significant amount of discipline and documentation to do correctly, otherwise the offshore team will most likely not deliver what you ask for. If you are going to do this, make sure that you create functional specifications, lead in design, and participate in code reviews to ensure that quality is being maintained in the project. Without this level of discipline you will get burned, and all of this can be a full time job in and of itself.
I suggest you read Rob Walling's Start Small, Stay Small, specifically chapter 3. An excerpt (but by all means, read the whole book - it's great):
Hiring someone to build your software is a good middle ground, as it allows you some control over the technical aspects of your product without sucking the coding life from your veins. The biggest hurdle when deciding whether to hire someone to build your software is that you think you can build software better than the next person. You don’t have to admit this to anyone, but every good developer I know thinks his/her code is the best code out there, and that by hiring it out they will receive a poorly-written product. If you’re going to hire out your software construction: You have to get over your desire to write the software yourself. You do. You have to accept the fact that the code is not going to be in exactly your style, and it may not be as good as if you build it yourself.
Walling, Rob; Taber, Mike (2010-08-04). Start Small, Stay Small: A Developer's Guide to Launching a Startup (Kindle Locations 1480-1488). The Numa Group, LLC. Kindle Edition.
He and Mike also cover this topic briefly in Episode 64 of their Startups for the Rest of Us podcast.
Having managed a small team of offshore developers for the past 4-5 months (and all my experience with other outsourcing companies), I can tell you that you do want to be careful. Most of the outsourcing companies I have worked with have produce sub-par code at best.
Even with the good outsourcing companies, you still need to make that the documentation, requirements, and directions you giving the outsourcing team are extremely clear otherwise you might not get what you expect.
You should also keep in mind that time difference and language barrier also impact on the effectiveness of outsourcing.
What your talking about is outsourcing your core business. I would strongly recommend against it. By outsourcing you lose the level of control you need over your core business.
The best way to do it is work nights and weekends, get a Minimum Viable Product built, and use it to bootstrap or get funding so you can quit your dayjob.
But if you can't or don't want to do that, you can use outsourcing to build your MVP. Just remember the following:
It is possible to do this successfully. But it comes with its own drawbacks and costs.
I will start out my answer with a Bush-ism.
You don't know what you don't know.
Every product starts out as an idea.
9 out of 10 ideas, someone has already thought of.
Out of those 9 ideas, 8 have already been implemented. The one that wasn't was deemed
a dud, not feasible, too expensive to implement. It was not one of the low hanging fruit.
7 of those 8 ideas were duds meaning that it cost more to make these ideas a reality than
the profit from selling the actual product. Why?
Basically, what it comes down to is a process of elimination. The market is very good at this. There is a lot of stuff in the market. The market separates the quality from the quantity.
That said, if you truly believe your idea is the million dollar baby, do the following:
You need to architect/design the software first. The operative word here is 'design'. Write the user manual or draw out the screens (if it's a web system). Draw out the user interface flow. In other words, you will go from this screen to that by clicking on this link/button, etc. This in itself takes more time than actual programming. You discover all sorts of wonderful things at this stage. For example, that the tools you would have used to build the software would not meet the design requirements. You'll basically go back to the drawing board more and more as your idea hardens into an actual design. When you are confident you've got 99% of the design bases covered, you get to farm out the easy part --> the implementation. The more design you did, meaning the more time you spent on design, the easier it is to see what needs to be done in concrete terms. In other words, this button is tied to this module that calls on this screen that displays these buttons that map to these modules and so forth, ad infinitum. Break out the implementation into pieces. Give out the pieces to different companies that have no business ties. Never reveal the big picture to any one entity. Set up a modular firewall. If version 1.1 of modules A, B and C were completed by OffshoreRUs, don't give them version 1.2 of modules D, E and F! If they kept an archival copy of A, B and C, they've now got A, B, C, D, E and F. By setting up modular firewalls, you ensure that you've got the big picture and no one else has managed to reconstruct your modules from archival code.
That's my 2 cents!
Good luck to you sir!
Do not outsource the whole single project to a single company If you have a clear idea of your project, and can document it, in specifications, U.M.L., or other documetns, and know hot to delegate it, to other people...
...then you may want to keep your full-time job, and use that small free time (lunch time, weekends, after job) to model (design) your software project, in a way that can be divided or separated in small parts, modules, libraries.
You may want to outsource only parts or sections of you whole project, to different people,
and leave the main final integration to yourself.
Its a common practice, even with subcontrators, in the manufacturing market.
An example:
Have you seen the first "Batman" movie ("Batman Begins"). The characters had to get all the character uniform & vehicles, from different parts of the world, in order to keep it secret. Good Luck with your project.