More often than not these days, entire companies are built on software written by the co-founders. The idea itself, execution and marketing of the company have major roles in determining the success of the startup, but as little as it may seem in the beginning, the development platform that you select may have a huge impact on your company down the road. Here are a few suggestions if you are looking at developing software internally, externally, on-shore or off-shore so that your company may stay agile in the fast-paced startup world.
- Don't try to write your own software framework! (i.e. don't start writing from scratch) - A software framework is a re-usable design for a software system (says wikipedia). Carefully selecting and building on top of a proven framework will save you hours of work down the road. As development projects grow over time, it is a challenge to keep track of changes and flow of control throughout the application. Using an established framework keeps you from having to program common logic for each software project, so you can get to the meat of your application. There are a few projects that will require a custom development framework, but 99% of the time yours won't. Consult your software-engineering friend if you aren't sure.
- What framework should you use? - Yes. Just find one that you like and use it. There are plenty to choose from. Depending on your coders' coding expertise, be it yourself, I would suggest Ruby on Rails, CodeIgniter, CakePHP, Zend and even Microsoft's .NET framework.
- Use open source software. - First off, just because software is open source, doesn't necessarily mean that it will be cheaper to implement. However, open source software usually comes with great crowds of followers and devout users and you are allowed to distribute and edit the software however you please, and this is what will save you money in the long term. Any framework, library or methodology of software development you jump behind, you will want to make sure there is a devout group of followers included, that they've been around and don't appear to be going anywhere. During the late nights and tough development times when nothing is going right, they will be your source of inspiration and much needed help when you can't solve a problem with their code or your own.
- Don't go cheap on development. - If you aren't a coder and will have to hire outside help for development, here are a few thoughts: Look for a team with proven experience in the area of your application. Find a team that asks the right questions and aren't afraid to tell you no about certain features. Be sure the development team you select are heavy-users of the platform (i.e. web, desktop, iPhone, etc.) you are building your app for. Most development projects will cost a significant amount of cash, especially if you are wanting to build a completely custom web application. This may vary greatly, but in general I wouldn't look at spending less than $10k on a custom development project. That $10k can grow very easily when you include branding and graphic design into the mix. Be sure to have on paper exactly what you are expecting from the development team, at the agreed price and timeframe with both parties signatures.
- Development cost too much? - If you can't front the cost for a solid development team and you are boot-strapping things, you may need to look at divvying out some equity to hedge the development cost or guaranteeing X% of the first Y sales. However, be careful to who and how much equity you begin throwing around. Only reserve this option if you have found a development team you truly believe in, you are comfortable going into business with them, and simply can't afford the cost. Also, if you are giving up equity, you will want these people to be inherently passionate about the project itself, otherwise you might might find yourself with a disinterested and unmotivated development team.
These are just a few things I've learned down my journey of developing software and by talking to other software developers and companies. This barely begins to scratch the surface of things to look for when developing software or hiring a development shop.
What are your thoughts? What would you add to or take away from my list?
Leave a Reply by entering your information below or logging in
Great point, thanks Alan.
And don't forget the Python frameworks! (Django, web.py, Google App Engine's webapp etc)
taynight:
> I’d argue that your software solution should fit the requirements of your problem domain.
This seems to be the best approach. Ruby (and Rails) are great, elegant tools, and I prefer using them. It's just that sometimes they aren't the right tools for the job.
But these issues are kind of moot if someone is /hiring/ programmers. In that case, he should tell his programmers what he wants to be able to do, and let them figure out the best way to implement the thing. Meddling in language/framework decisions is like hanging over the shoulder of the guy at the auto repair shop, telling him "you're doin' it wrong".
@tayknight My "just the fact that it’s Microsoft is a huge knock against it" comment is related to my argument that Microsoft doesn't necessarily do things the right way, they just do things their way. This is primarily seen in the Web environment. I can only hope that IE 8 will conform to standards, but their track record is, let's say, somewhat iffy. Also, the example I showed, from their official site mind you, is further testament to the poor way they do things.
The whole idea of proprietary software for web development is almost taboo. I would rather have open-source software with awesome community support (blogs, google groups, forums, irc channels, github, etc) than a black box and corporate support. Not to mention, if I want to go change something in the core code, I can if I want. I don't have to wait on official updates.
Again, like you said, the software solution has to fit your requirements. Also, programming languages and environments are like different foods and people have different tastes. Some people just have more refined palettes than others :D
@tayknight The example I used was from an official ASP.NET MVC tutorial (http://www.asp.net/learn/mvc/tutorial-16-cs.aspx). I did not put validation code in the controller because that's not the right way to do it. In the MVC design pattern, the model should be handling the validation. That just goes to show that Microsoft does not do things the correct way. They do things their way. You want to put as little code as possible in your controller so you can more easily test your business logic.
I apologize for not including the routing rules, so here it is:
map.resources :movies
That will take care of all of the RESTful routes for movies, so no need to have rules like:
[AcceptVerbs(HttpVerbs.Post)]
[AcceptVerbs(HttpVerbs.Get)]
before each action method. Routing in rails also does beautiful things such as named routes and nested resources. I have no idea if ASP.NET MVC does any of that so it may or may not be on par.
I definitely agree with your comments on using software to fit the requirements. In the context of web development, I say rails takes the cake (pun intended) every time. I commiserate with anyone doing Microsoft-centric development. I currently maintain two sites and am developing one in non-MVC .NET. I inherited all three when I joined my current employer and I cannot wait until I have the time to convert every one of our sites (including 2 that are in CakePHP) into Rails.
And also... Why the statement "Microsoft is a huge knock against it." Specifically, if you were a startup betting your existence on the framework you chose, would be the huge knocks against Microsoft? I'm not a Microsoft apologist, but I bet I can refute most claims against it. I will concede certain Microsoft products have greater up-front costs, but those costs come with support from the vendor. Most open-ource project vendors don't provide free support in the same was as paid products.
I messed up that last line. Should have read "I’d argue that your software solution should fit the requirements of your problem domain."
@hinson. I'll buy, in that example, that the Rails way is more succinct (but, where are the routing rules like the first line of the ASP.NET code? And, you've included validation controller code in the ASP.net example, but not in the Rails example). But, in your example of the .NET way, is that ASP.NET MVC code. If is isn't, please show me an example of using Rails code to compile an executable for a Windows Mobile device, or Rails code to extend Outlook to include voicemail for a unified messaging solution.
The parent article talked about choosing software for a startup. If your startup is web-based, I'll argue Rails _might_ be a solution. If your startup is developing a solution that is a native app for an iPhone, rails isn't going to do much good (neither is .NET). If your solution is industry specific and uses legacy datastores, be they Notes, DB2, or Oracle that don't use normalized Rails oriented datastores (plural named tables, ID columns, etc) your Rails development is going to get much more difficult.
I'd argue that your software solution should fit the requirements. Rails may be a good choice for a new, web-based software solution. It certainly isn't the only game in town.
@tayknight I agree with the Rails vs. .NET comment. ASP.NET MVC is relatively new (heck, the official version 1 didn't come out until last week) and just the fact that it's Microsoft is a huge knock against it. Programming in .NET just feels so...corporate. Since it's not open-source, improvements are going to be slower and starting costs will be higher. It usually is more expensive to get a windows box than a linux box with equal specs due to proprietary software (Windows, SQL Server, etc). Microsoft likes to do things their way even if it's not the "right" way.
Just an example of Microsoft goodness:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Add(FormCollection form)
{
var movieToAdd = new Movie();
// Deserialize (Include white list!)
TryUpdateModel(movieToAdd, new string[] { "Title", "Director" }, form.ToValueProvider());
// Validate
if (String.IsNullOrEmpty(movieToAdd.Title))
ModelState.AddModelError("Title", "Title is required!");
if (String.IsNullOrEmpty(movieToAdd.Director))
ModelState.AddModelError("Director", "Director is required!");
// If valid, save movie to database
if (ModelState.IsValid)
{
_db.AddToMovieSet(movieToAdd);
_db.SaveChanges();
return RedirectToAction("Index");
}
// Otherwise, reshow form
return View(movieToAdd);
}
Ruby Goodness:
def create
@movie = Movie.new(params[:movie])
if @movie.save
flash[:notice] = 'Movie was successfully saved'
redirect_to(@movie)
else
render :action => 'new'
end
end
class Movie < ActiveRecord::Base
validates_presence_of :title, :director
end
That example alone is enough to sway me.
About Chad's last comment on Ruby AND Rails books (and this may be a little off subject.)
I've read both of those books and HIGHLY recommend them even if you're just a front-end XHTML/CSS guy like myself. Because of the awesomeness/ease of use of Rails for developers chances are you will have to mess with Rails at some point and you need to understand what's going on, how things work and the overwhelming MVC file structure.
Summary: READ THOSE BOOKS! You will be SO happy you have a basic understanding of Rails and you won't have to rely on the backend development nerds to throw in your beautiful XHTML and CSS changes.
Bon Voyage.
Rails is an MVC framework. .NET is an application framework. They can't be compared in an apples to apples fashion. You could, however, compare Rails to ASP.NET MVC (http://www.asp.net/mvc/).
Thanks everyone for the comments. I definitely lean towards rails with the same sentiments as Jon.
As for some Ruby and Rails resources:
To start learning Ruby, this is a great tutorial: http://pine.fm/LearnToProgram/?Chapter=00 There is a book on the page that goes into more detail.
To learn Rails, this is a great example-driven book: http://www.sitepoint.com/books/rails2/
Very good points. Here's my 2 cent:
All developers should just hop on Rails. CakePHP is just trying to mimic Rails and php will never be as wonderful as Ruby. I don't want to hear the performance arguments, 99% of the sites out there aren't going to get enough traffic for it to matter. The sheer number of examples, plugins, open-source projects, documentation, etc is also so amazing. I don't even want to get started on .NET. (Currently, I have to code in all 3, and rails just makes me love life) But, if you don't want to take the plunge just yet into the wonderful world of Ruby and Rails, then definitely choose some type of framework (preferabbly an MVC framework) in your language of choice.
Also, no matter what language you choose, for the sake of your sanity, adhere to #4. Do NOT outsource to India because it's cheaper. You will spend so much more money in the long run on man hours with the communication barrier, working out all of the errors, the horrendous time it takes to clean up the code and figure out what the heck they were thinking when they created the spaghetti code they call a final product.
/rant
Totally agree with Matthew - With anything (frameworks, cms, apps, etc) the more hardcore followers the easier it is to find GREAT answers/ideas to your personal questions, problems, etc
> Any framework, library or methodology of software development you jump behind, you will want to make sure there is a devout group of followers included, that they’ve been around and don’t appear to be going anywhere.
Good advice, but if I were playing it safe, I think I would rate "sheer number of followers" as the most important criterion, and "devoutness" somewhere below that.
Post new comment