Wednesday, April 23, 2008
Tuesday, April 8, 2008
Hacks@LUMS-101
Sunday, February 24, 2008
Startup Insiders 6 @ LUMS Lahore
Jehan Ara and Jawad Farid introduced the panel and the format.
- Jehan Ara
- Jawad Farid
- Dr. Umar Saif
- Faisal Qureshi
- Zia Imran
- Fahad Bangish
- Zafar Khan
- Nadeem Malik
You must be able to specify the attributes of your product in 30 seconds. Identify the qualities of your product and relate them to the customer needs such that it makes the customer ask for your card
An entrepreneur does not complain but solves problems. This is critical as your customer does not care if its raining, your building is on fire or there are strikes. Buy generators to cover electricity shortage, dig holes and put tube wells to get water. Solve the problems you face, do not complain.
Know your customer, know his pain. Identify the points that are most painful and then convince him that your solution solves these pains better than any other exisitng solution. You can make the best product in latest technology but if you can not convince your customer to use it, its not worth anything to him.These points convey the essence of entrepreneurship. Entrepreneurship is not about making money, its not about having a huge company. It is about solving problems, creating value and converting that value into money. Jawad was spot on with the details on how he got his first customer and how his company ended up having the business they are doing right now.
Jehan Ara
There are lot of problems with working in Pakistan.
- resource dependency
- lack of infrastructure
- bad image of Pakistan
However, we must face these problems and try to solve them. Complaining will not help. Our universities need to produce good people, our people need to imporve our image by working hard and being honet. The image is not just built by government, but by the people. Companies in India face lack of infrastructure, poverty and bomb blasts at a much higher scale than Pakistan but still they manage to overcome these problems.
One thing common in all these people is commitment and hard work. These people worked really hard at whatever they did, whether it were studies or business. Withouth hard work, you are bound to fail even in a job, let alone your own company.
I dont care WHY I dont use your product. The bottom line is that i DONT. I should be using it but I dont. Now figure out how can you make me use it. You only get 30 seconds before I leave your product and the image I have will stay with me.
You have to find a link to your first customer. A customer probably gets 100 phone calls today for business and listens to 1% with some seriousness. But if his 'Mamoon Akbar' calls him and tells him about you, he will listen to you. Find that 'Mamoon Akbar'. This will open the door for you. After that its your job to 'con' him into buying from you (he later explained it as con from CONvince not from CONvict).
Before the customer buys your product, he decides if he wants to have a relation with you. Every thing matters in this regard. Dress up nicely, talk nicely and be honest. You have to look like in control. Do not let anyone else dress up and look better than you and take the center stage. If you cant do that, hire someone who can.I guess I wont be showing up in the next gathering in slippers :P
MBA degree neither makes you a better human being nor a better business man, it only opens up doors for you that might not be opened otherwise.*cough* *cough*
You are responsible for the two square feet you occupy. You destroy it when you trash the city, when you make a personal attack, when you lie or cheat. At the end of the day, be responsible.
You should aim to absorb and keep growing yourself, help others because that help will definitely come back to you.Faisal's thoughts about innovation, impact, responsibility and success were just extraordinary.
Some other good questions were,
Q: How to balance your team?
Q: How to target a wide range of customers? (the long tail)
Conclusion
Thursday, February 7, 2008
2's Complement of 3
Tuesday, February 5, 2008
Lessons About Startups Part II
Startups magnify minute details and force you to think and work like you never have. There are many things you will need to learn and learn quickly.
Define Your Ethics
Define your absolute do's and dont's. Some examples are,
· Keep your word, even if it means losing something
· Respect other people
· Self-respect
· Accept your mistakes
· Be forgiving
And the list can go on. Important thing is that you MUST have some values. These values are the foundations of every decision. Do not let your values be defined by the world. Never compromise on your values. The stones with no weight are swept away with the waves and turned to dust.
Learn to say NO
During your journey, you will get a lot of opportunities. You will find people who will offer you money, support and contacts. What you must realize is that you do not and should not accept every offer. This means that you have to accept some and reject others. Remember that you have as much right to say 'YES' as 'NO'. But how do you know you are making the right choice? This you do by going back to your values. Evaluate the person making the offer on your values. Look at the person not just the words. To define your answer, you must have already defined yourself.
Do not be Apologetic
There is nothing conventional about startups. Being unconventional leads to uncertainty and you tend to get apologetic. You can get over this feeling by building confidence. And confidence comes from believing that you are doing something great. Take pride in your company, your product and your working 80 hours per week. You should not be ashamed of your desire to change the world.
Be Yourself
It is generally believed that companies are run from huge, well decorated offices by grey-haired managers and MBAs. This thinking is so dominating that the startups also take to be true. So they feel inclined to pretend like big companies. They pretend to sound and look conventional. Because if they do not, they look out of place and exceptions just look silly in the first glance. Do not be afraid of looking silly. Part of entrepreneurship is learning from your mistakes.
Do not pretend someone you are not. People laugh at monkeys who pretend even though they pretend very well.
Do Not be a Whiner
I hate whiners. Not just me, but every sensible person hates people who whine and cry. Your server crashed; fix it, you are out of money; find some way to earn more, aliens kidnapped your pet cat; get a new one. But do not cry and blame the world. If you are not used to accepting and cleaning up your own mess, stay in your cubicle.
Make your own decision
Making a decision is difficult. Decisions are just another name for well thought out guesses. These are based on your past experience, your judgment of future, your fear of failure and your intelligence. No one else can see these things as good as you. Do not take the easy way out by following someone else's decision. No one is going to take the blame if the decision goes bad. It is better to fail on your own rather than succeed on someone else.
It seems impossible to remember and follow all these guidelines. Yes, it IS impossible. Nobody said startup was going to be a walk in the park. This is one reason why you should have multiple founders. Make sure that if you forget, someone from your team remembers.
Friday, October 26, 2007
Lisped
- Languages vary in power. This can be proved by nagation. Let us assume that "All languages are equal in power". If all languages were equal, there would be no need for new languages because a new language means the inability of existing languages.
- New languages are created by programmers, not by standards. (JAVA whiners should read http://www.paulgraham.com/javacover.html). Languages are much like food. You can fool customer by wrapping bad crappy food in pretty packaging once, not twice.
- A language should get out of your way. A hacker's time is very valuable and the language should respect that.
- There is always a simple way to do everything. An elegant language should take the user to the most natural solution. Even if it means twisting the standards.
It was when I started reading Paul Graham that i heard about Lisp. I coould see people appreciating it, praising it, see it in action but not understand it. It seemed like just a big pile of CARs and CDRs. It took me three months of reading to witness the first glimpse of its power. And it was worth waiting. It was when I solved a problem in it that i saw its real strength.
What we write and call C++, isnt remotely close to C++. So i wont be calling this C++ code.
- First question: How to represent a list of functions? I ll just use vectors. DAMN, now i have to read about the syntax of vector. And how do I represent functions? That too with unknown signature? DAMN again! no problem, I ll just restrict the signature to some predefined value and mention it in my documentation. Or i can define it a template, but how do you do that? DAMN again. The arg_list also has to be defined as a template list.(Refer to 5)
- Lets try Google for syntax issues (Refer to 3). Notice that we have already spend a good 10 minutes and we are yet to write a single LOC.
- Okay, now that we have gathered all the stuff, lets get on with writing code. Lets start by a simple code and expand it to full form. Lets assume the each function operates on integers and return an integer as well.
using namespace std;
vector<vector<int>> apply_funcs_to_args(vector<int (*)(int)> fun_list,vector<int> arg_list)
{
vector res;
return res;
}
And i am stuck as i need to confirm the syntax of function pointers. What to do? Back to Google and MSDN.SHEESH, hope somebody is keeping time, this is hard work dude.
Now i need a function that will apply a function to the arg_list and return the result. Here it is,
vector<int> apply_func_to_args(int (*f)(int) f,vector<int> arg_list)
{
int i = 0;
vector<int> res;
for( i = 0 ; i < arg_list.size() ; i++ )
{
res.push_back(f(arg_list[i]));
}
return res;
}
I have to make sure that this function is defined before apply_funcs_to_args or it will not recognize it. Now my final code becomes,
#include <vector>
using namespace std;
vector<int> apply_func_to_args(int (*f)(int) f,vector<int> arg_list)
{
int i = 0;
vector res;
for( i = 0 ; i < arg_list.size() ; i++ )
{
res.push_back(f(arg_list[i]));
}
return res;
}
vector<vector<int>> apply_funcs_to_args(vector<ret_type (*)(arg_type)> fun_list,vector<int> arg_list)
{
int i = 0;
vector<vector<arg_type>> res;
for( i = 0 ; i < fun_list.size() ; i++ )
{
res.push_back(apply_func_to_args(fun_list[i],arg_list));
}
return res;
But to make it work with any data type, i have to change it to template.
#include <vector>
using namespace std;
template<class ret_type,class arg_type>
vector<ret_type> apply_func_to_args(ret_type (*f)(arg_type),vector<arg_type> arg_list)
{
int i = 0;
vector<ret_type> res;
for( i = 0 ; i < arg_list.size() ; i++)
{
res.push_back(f(arg_list[i]));
}
return res;
}
template<class ret_type,class arg_type>
vector<vector<ret_type>> apply_funcs_to_args(vector<ret_type (*)(arg_type)> fun_list,vector<arg_type> arg_list)
{
int i = 0;
vector<vector<arg_type>> res;
for( i = 0 ; i < fun_list.size() ; i++ )
{
res.push_back(apply_func_to_args(fun_list[i],arg_list));
}
return res;
}
This code assumes that the return type of every function is same. So how do we handle different return types? We can make a generic class Result and force each function to return a pointer to class inherited from that class? Notice how a language restriction has forced us to propagate a change in some other code.
Okay, I am done. Where is my Electra? What! i am not? I have to test it too,well too bad, i am exhausted, maybe tomorrow. Infact i dont want to look at the code again because its too ugly.
Monday, September 3, 2007
The life in the dead stuff
- Old books
- School notebooks
- College notes
- University quizes, assignments, exams etc
We encounter such things every day. But the behavior is not just limited to stuff. At any time, we seem to carry around loads of useless things, ideas and values. Stuff that i like to call Dead Stuff. Little do we realize the cost associated with them. To us, their unknown value is so huge that we ignore the costs. Note the word 'Unknown' here. I ll get back to it later.
We can assume that this is default. But actually it is not. Observer a kid playing (get married and have kids if you dont already). If you can look into his treasure chest (kids have them), you will find lot of stuff. Stuff like,
used batteries, thumb pins, common pins, shiny coins, fancy cards, key chains, candy warper
Useless isnt it? Actually its not. Ask a kid why he keeps that stuff? He will have an answer for EVERYTHING. You will not find anything USELESS in that chest. At least not for the kid! Strange; isnt it? The kids only collect things that they find useful. Its simple; keep what is useful and get rid of others. Kids go on to become adults, so the adults should exhibit this attitude. But the adults seem to carry so much dead stuff. Somewhere during the transition this behavior gets lost.
Teenage fits perfectly in this situation. Kids have to go through teenage to become adults. So teenage might just be the culprit here. But what happens in teenage? Lets have a look.
A teenager is just old enough to become a part of adults. But to be an adult, he must BEHAVE (not think) like an adult. This he cannot do, because his whole life he has been a kid. As a kid he knows how to assign values to things. No one ever told him that his values are incorrect because he was surrounded by kids.
But now suddenly he has to deal with adults. Adults, who try to impose an adult like thinking on him. The first thing they tell him is "Your judgment of values was wrong. These things that you value are actually trash. We will tell you what is useful and what is not. Since you are too young to understand, take our word for it and behave like an adult". If you do not feel the strength of this statement, read it again. Now we refer to the term 'Unknown'. Things that he sees in the adult world are unfamiliar with unknown value. He feels the urge to reject them but is forced to accept. So he begins to believe that if something is unknown, it MUST have a value. Mathematically speaking,
Unknown = Valuable (Equation I)
Being a kid, the teenager can not understand something without a value. So he asks for it, but is told that he is too young to comprehend and should trust the knowledge of adults. He has to obey or be considered abnormal. Result, he begins to rely on adults to tell him things. Again, mathematically,
age difference = authority (Equation II)
Combine I & II and you get a crippled mind. To make someone understand the value of an unknown, you must have an age difference. Conversely, an age difference can convince someone of a value for unknown. Think about it this way, the inventions and discoveries are done by young energetic people. But people do not accept them because they are only influenced by age, not idea. Without age difference to impose value, they fear the unknown, not value it.
People do not like young managers, young CEOs and young founders. They like to think that they are wrong...because they are young. People do not like to think about the value of unknown. Because they fear that the unknown will turn out to be nothing. They prefer to keep unknown stuff with imaginary value than to get rid of dead stuff.