Well, it wasn't as complex at that time as you're thinking :P
Feature-wise there were only 5 things in TheFacebook at the time of initial launch:
Its homepage looked something like this at that time (to a logged out user):
Homepage to a logged in user was something like this:
And this was the profile:
Coding something like this in two weeks isn't too difficult :)
However, the thing that might've been difficult is planning. He planned the most correct set of features that was simple yet "cool" enough to college kids. That was the tricky part, and he cracked it very well.
Too many people who want to build something new suffer from Features-syndrome. They end up overloading their products with features, most of which don't really matter to the user.
At the time of initial launching, Facebook had minimum-yet-most-useful features.That was what Mark did the best, and that was what separated Facebook from other social networks at that time. Had it been launched with as many features as it has today, it'd have failed miserably.
Feature-wise there were only 5 things in TheFacebook at the time of initial launch:
- Profiles
- Friend Requests
- Search
- Messaging
- Like button :)
Its homepage looked something like this at that time (to a logged out user):
Homepage to a logged in user was something like this:
And this was the profile:
Coding something like this in two weeks isn't too difficult :)
However, the thing that might've been difficult is planning. He planned the most correct set of features that was simple yet "cool" enough to college kids. That was the tricky part, and he cracked it very well.
Too many people who want to build something new suffer from Features-syndrome. They end up overloading their products with features, most of which don't really matter to the user.
At the time of initial launching, Facebook had minimum-yet-most-useful features.That was what Mark did the best, and that was what separated Facebook from other social networks at that time. Had it been launched with as many features as it has today, it'd have failed miserably.
I could have coded websites like the initial version of FB in days, not weeks. Most websites start out pretty simple and back in those days it was very easy to start up a Linux/Apache/MySQL/PHP environment. Even if I were going to host the server in my dorm room, it wouldn't take me more than an hour or so to get a new machine set up.
Then for the data schema, it starts out pretty clean and easy for a relational system. I'd have tables such as user, user_profile, user_posts, user_friends, user_friend_requests, etc.
Then for the code, it's basically all create, read, update, and delete to/from these tables. Of course, I'd do all of the standard stuff like one way encryption for password storage (using SHA1 or something like that), etc.
All of this stuff would have gotten me a basic facebook system up and running within one day (typically one night).
I'd also build in some admin tools to look up users, reset passwords, etc.
Then I'd make things a little prettier and easier to use by adding in some javascript, ajax, etc. I'd also start using memcached at this point as well. This stuff would take a few days.
Once I get some real users on the system, you have the hard part...scaling. This is when I'd split up the servers into multiple servers, eventually set up MySQL in a multi-server environment (single write, multiple reads), etc. Eventually these will become java services and each service is run by a team of engineers, etc. And of course another hard part is security.
As users increase, I'd spend most of my time writing code for new features and to clean up existing features but also spend more time on scaling (evaluating and probably moving to nginx, etc.).
When I was consulting at a consulting company, I one time singlehandedly built an e-commerce website in 2 weeks. The client approached our company and said that they were in a time crunch and needed a system up and running in 2 weeks. The company knew I was the only guy who had a chance to pull it off so they asked me. I shrugged and said "Yeah, I can do that" and a week later, we were internally testing the e-commerce site. It was fairly basic but it had a catalog, shopping cart, user accounts, checkout flow, credit card integration, etc. That client did piss me off though because they asked for a lot more features after they saw the initial version that I made for them in a week and I basically said no...because I wanted to spend the 2nd week testing and fixing bugs while their logic was that since I did all this in a week, it shouldn't be a problem to do all this other stuff. I had a graphic designer do the html though.
Most websites (facebook, quora, stackoverflow, gmail, ebay, etc.) aren't hard to create their core basic features but then many features get added and polished, etc. They then build on network effects which I wouldn't have by simply copying their core elements. You have to be quick to market (usually not first to market but early enough). And then there are some websites that are actually kind of hard to build. A search engine comes to mind because I'd have to build a crawler and it will work but probably won't be all that great so my search results won't be so good, etc.
I get asked on a regular basis from friends and others to build them a website that does X. 99% of the time I can build the core features from a back end functional perspective within a week or two. But 99% of the time, I feel that the idea is stupid (e.g. social network or dating site for (sports fans, job seekers, (insert another niche)).
BTW these days I build these types of sites on Google App Engine using Python and Datastore.
Then for the data schema, it starts out pretty clean and easy for a relational system. I'd have tables such as user, user_profile, user_posts, user_friends, user_friend_requests, etc.
Then for the code, it's basically all create, read, update, and delete to/from these tables. Of course, I'd do all of the standard stuff like one way encryption for password storage (using SHA1 or something like that), etc.
All of this stuff would have gotten me a basic facebook system up and running within one day (typically one night).
I'd also build in some admin tools to look up users, reset passwords, etc.
Then I'd make things a little prettier and easier to use by adding in some javascript, ajax, etc. I'd also start using memcached at this point as well. This stuff would take a few days.
Once I get some real users on the system, you have the hard part...scaling. This is when I'd split up the servers into multiple servers, eventually set up MySQL in a multi-server environment (single write, multiple reads), etc. Eventually these will become java services and each service is run by a team of engineers, etc. And of course another hard part is security.
As users increase, I'd spend most of my time writing code for new features and to clean up existing features but also spend more time on scaling (evaluating and probably moving to nginx, etc.).
When I was consulting at a consulting company, I one time singlehandedly built an e-commerce website in 2 weeks. The client approached our company and said that they were in a time crunch and needed a system up and running in 2 weeks. The company knew I was the only guy who had a chance to pull it off so they asked me. I shrugged and said "Yeah, I can do that" and a week later, we were internally testing the e-commerce site. It was fairly basic but it had a catalog, shopping cart, user accounts, checkout flow, credit card integration, etc. That client did piss me off though because they asked for a lot more features after they saw the initial version that I made for them in a week and I basically said no...because I wanted to spend the 2nd week testing and fixing bugs while their logic was that since I did all this in a week, it shouldn't be a problem to do all this other stuff. I had a graphic designer do the html though.
Most websites (facebook, quora, stackoverflow, gmail, ebay, etc.) aren't hard to create their core basic features but then many features get added and polished, etc. They then build on network effects which I wouldn't have by simply copying their core elements. You have to be quick to market (usually not first to market but early enough). And then there are some websites that are actually kind of hard to build. A search engine comes to mind because I'd have to build a crawler and it will work but probably won't be all that great so my search results won't be so good, etc.
I get asked on a regular basis from friends and others to build them a website that does X. 99% of the time I can build the core features from a back end functional perspective within a week or two. But 99% of the time, I feel that the idea is stupid (e.g. social network or dating site for (sports fans, job seekers, (insert another niche)).
BTW these days I build these types of sites on Google App Engine using Python and Datastore.
إرسال تعليق