The art of building software

Wednesday, January 25, 2012

The importance of factoring large numbers

Here's a simple math question for you: What two integers do you have to multiply to get 15, other than 1 and 15?
 Prime Numbers, from Nerdy Baby
Most people get that the answer is 3 and 5, because 3 x 5 = 15.  That one's pretty easy to figure out.  Of particular note: The numbers 3 and 5 are prime numbers, meaning that 3 and 5 can not be divided evenly by any other integers other than 1 and themselves.  Numbers like 15 are called semiprime numbers, because they can be factored into exactly two prime numbers.  This cool chart teaches babies about the first few prime numbers.

Here's a harder one for you.  What two prime numbers do you have to multiply to get the following semiprime number?
25195908475657893494027183240048398571429282126204032027777137836043662020707595556264018525880784406918290641249515082189298559149176184502808489120072844992687392807287776735971418347270261896375014971824691165077613379859095700097330459748808428401797429100642458691817195118746121515172654632282216869987549182422433637259085141865462043576798423387184774447920739934236584823824281198163815010674810451660377306056201619676256133844143603833904414952634432190114657544454178424020924616515723350778707749817125772467962926386356373289912154831438167899885040445364023527381951378636564391212010397122822120720357
Yeah, that's a pretty big number - it has 617 digits in it.  I don't know the answer, and I believe no one alive knows the answer.  Until just a few years ago, the RSA corporation who originally asked this question offered a \$100,000 prize to the first person to come up with the answer to that question.  They called this the RSA Challenge.  They multiplied two large prime numbers together to get the monster above, and then threw out the piece of paper on which they had recorded which two prime numbers they multiplied together - so no one alive has the answer.

How long would it take a typical computer to figure out the answer to RSA's challenge?  According to Digicert, one of RSA's competitors, it would take 6,400 trillion years using a standard desktop computer, and using the fastest method known (called the general number field sieve) for coming up with the answer.  Using the fastest supercomputers today might drop that number down to only a few trillion years.  You could further improve that by using several other techniques, but still, we're talking about a much longer time than the human lifespan.  Here's a cool video from Digicert that is fun to watch and puts this into perspective:

Though it's impossible to figure out the answer using today's technology, it's easy to check whether someone has the right answer by taking two numbers and multiplying them together to see if that equals the number above.

Since I mentioned two Internet security companies - RSA and Digicert - I would be remiss of I did not mention the name of the company that originally invented this stuff.  That company was Netscape, which was once a high flying Internet company but crashed and burned and ended up getting bought by AOL for 4.2 billion dollars.

The reason this is so important is that our Internet security relies on the fact that it's currently impossible for anyone to figure out the two prime factors that are multiplied together to get numbers as big as the example shown above.  RSA is one of the leading vendors of Internet security products based on this simple mathematical exercise, and they wanted to prove to themselves and the rest of the world that our Internet is secure.  Every time you access your online banking or use your credit card or login to some web site, you use a security technology which at its core relies on the impossibility of factoring large numbers.

I think RSA has made their point, at least for now: hackers generally don't try to solve this problem but instead rely on numerous other types of attacks.  Here's why.  Let's say you're a bank robber trying to break into the bank's vault.  You're not going to try to break into the front door of the vault by brute force, say with a bomb.  Instead, you might get your own safety deposit box in the vault and just walk right in as if you're going to your own safety deposit box, and then pull out your gun and demand that a bank executive empty out other people's safety deposit boxes for you.  Similarly, hackers don't try to break the secure semiprime key by finding out what two prime numbers need to be multiplied together.  Instead, they attack weaker parts of the security protocols having nothing to do with factoring large, semiprime numbers.

It may surprise most people to learn that the latest Internet security protocols can easily be cracked by hackers in seconds, using techniques such as ARP spoofing or ARP poisoning, and then doing what's called a "Man in the middle" attack.  You are most at risk if you are using a public WIFI connection, even if you are using secure Internet protocols such as SSL.  These attacks have nothing to do with factoring these large semiprime numbers, and will go right through your anti-virus software and firewall software.  Other techniques let you discover any passwords saved in a user's browser, or crack your Facebook password.  You are also vulnerable in your own home.  If you don't set up your own strong, WIFI router password (something you actually have to explicitly do), then you are vulnerable.  I'm not going to link out to this information, but if you're really interested, you should be able to easily find detailed How-To videos if you look around.  Once you know this, you may never want to use a public WIFI connection again!

Most people don't know how vulnerable they are when they are connected to a public WIFI connection.  Let's say you're carrying your iPhone or Android in your pocket, and you walk into your local coffee shop and connect to the free WIFI there.  Once you've done that, a hacker could easily steal your passwords, even if you never take your phone out of your pocket.  Scary, huh?  These hackers are not attacking the semiprime numbers in the security protocol.  Instead, they are acting like the bank robbers, and attacking other parts of the protocol that really are weak.

It's possible to defend yourself against these types of attacks, but as of today, you have to know what you're doing if you want to protect your computers and cell phones, especially if you're connected to a public WIFI.  I believe that our computers and devices will get smarter over the coming years so that they will not be vulnerable to these attacks. However, at the heart of it all, are still these large semiprime numbers.  If someone figures out a way to crack them, there's no easy way to fix this.

If someone could answer the RSA Challenge, they could crack the large semiprime numbers at the heart of the security protocol - it would be like having a way to walk right through the bank vault door even if it were closed and locked.  While no one possess anywhere near sufficient computing power to answer RSA's challenge, if someone magically came up with the answer, anyone could quickly verify that they had the right answer because it would be super fast to multiply the two numbers together to see if that equaled the number above.  Fundamentally, the fact that it's too time consuming to calculate the answer but trivial to check the correctness of the answer, is what secures the network connection between your computer and all servers on the Internet.  If you could answer RSA's challenge, our Internet security would vanish in an instant.

In the 1990's our government used to consider this type of computer security to be equivalent to possessing a nuclear weapon - it was classified as an armament.  They have since changed this stance, but their former stance shows you how important this kind of security is to our nation, and to nearly everyone who uses the Internet.  I think we're fortunate that the government changed their view on this before the 9/11 attacks.

 Hypothetical intel Quantum computer chip
But the day is coming when quantum computers will be able to break into any secured Internet connection, because unlike the computers of today, quantum computers will be able to solve the RSA challenge in a reasonably short amount of time.  And when this happens, our government could well classify these new computers as equivalent to nuclear weapons again because they would destroy all privacy and security on the Internet.  How soon this will happen is a matter of debate, but I believe some time this century we will have the technology, perhaps as soon as a few decades from now.  And then it's only a matter of time before the cost of these devices comes down and then that's it - we need to change the fundamental security architecture of the Internet that we've relied on since the dawn of the Internet.

Knowing that this day is coming, some people formed the PQCrypto conference to pool together great minds to prevent this from happening - but they haven't yet figured out a solution.  Assuming they or someone else does eventually come up with a counter measure, fixing this problem will be a project equivalent or worse in risk and size to the Y2K problem that we were all worried would bring down the Internet, and that cost over \$300 billion dollars to fix according to the BBC.

Tuesday, May 31, 2011

Software Development Tribal Culture

Often overlooked and underappreciated, among the most important factors in determining the success of every software development tribe is its culture.  I'm using the word 'tribe' rather than the more traditional word 'team' to reference the anthropological roots of culture, because I think the elements of culture that make modern software development teams successful can trace their origins to primitive tribal societies.

There's a difference between your tribe's culture and its processes.  Processes are usually documented in some form and represent the ideal of what you're supposed to do.  You can most likely read about your "development process" somewhere, and you might read words about Agile development or waterfall methodology.  At a more detailed level, you might also find the documentation for your check-in process, or the bug fixing process.  These are all processes.

In contrast to processes which might represent a sort of ideal of what you're supposed to do, culture represents the reality of what you're actually doing, and consists of memes that are communicated amongst tribal members.  Do you remember your first day, when you joined your software development tribe?  Remember that "drinking from the fire hose" feeling where your brain was in overload mode because it was taking in so much new information?  You were integrating and melding with your new tribe, drinking in its culture and grokking its memes.  It doesn't matter if your new tribe works in a bank and wears suits every day, or if they dress in kilts and boots and have a dog named Blue who likes to hang out in the kitchen, or if they wear leaves around their genitals and carry spears and hunt big game (or dogs named Blue).  You have to do more than form relationships with the key people in your tribe and find out where the rest rooms and gazelle are: you have to meld with your new tribe's culture.

On the other hand, if you are the person starting a new tribe as opposed to joining an existing one, you should be very conscious of the kind of culture you want to create.  The first people in a tribe usually play the greatest role in creating its culture.  Cultures are a fluid thing and are usually not under the direct control of any individual even though all individuals may contribute to the culture.  Past experience can be especially useful when forming new cultures.

Culture exists at multiple levels within larger organizations.  You may have a divisional culture that is broader than your development tribe's culture, and a company-wide culture as well.  In larger organizations, you sometimes see cultural wars between competing tribes, even as they cooperate on some levels as well.

For purposes of understanding software development tribal culture, I'm going to break down culture into these elements:

• Symbols and language, which often take the form of neologisms and new meanings for existing words, but they also appear in visual and auditory form as well
• Rules that govern interactions among tribal members and with the world at large
• Values - what you spend time and money on
• Knowledge that allows you to control various elements of the world, cyber and physical
• Wisdom and vision that encourages you to pursue the "right" goals

These elements of tribal culture are not just limited to software development tribes, but can be found in all sorts of teams such as sports teams, schools, companies, and indeed at any level of social organization up to nation states and beyond.  These elements of culture are often only partly documented in online or printed forms, and to a large extent must be learned via personal interactions, whether in the flesh or virtual.  That takes time.

I find it fascinating to ponder where this magical culture actually exists.  If all the electricity went out and there was no Internet, your culture would still survive.  It also survives the departure of any individual of the tribe as it is spread amongst all the tribal members.  I once wondered whether culture can survive the death of all of the members of the underlying society.

Let's take a look at how these things manifest in your software development tribe.

Symbols.  You know those acronyms you throw around now?  You had to learn each of those.  At the high end, cultures like Microsoft create thousands of acronyms.  Here's one public list of 451.  Then there are all the software module names, machine names, names for conference rooms, product names - the list goes on and on.  You have a corporate brand identity, product logos, and maybe even a sonic brand.  Your brain needs to understand the meaning of all these new symbols.

If your tribe uses a lot of symbols, or at least if you find yourself feeling like you're listening to a foreign language more often than you'd like, you may want to start your own dictionary.

Rules. Rules can be expressed in many different ways.  As software developers, we're familiar with the pattern for a rule consisting of a condition and an action.  While your tribe's rules could be expressed in that format, since these rules are executed by wetware and not software, I find it more convenient to express these as questions.  Rules can answer these sorts of questions which are found in most software development tribes:
• When you sit down in front of your computer to work, how do you know what to do?
• To what extent can you integrate your personal (family & friends) life with your business life?
• If you would like someone else to do something, how do you do that?
• When is it really OK to work from home?
• How much time off do you get?
• If someone comes to you and asks you to make a change to your code, is it OK to make that change?
• What kind of testing should you do before you check in your code?
Values.  Values are what you spend time and money on.  Here are some examples of values:
• Does your tribe maintain thorough unit tests and automated functional tests?  If so, then it values long term quality.  Some times you don't need long term quality because the code will have a short life time, and in that case, it could be entirely appropriate not to value such testing.
• Do developers have multiple monitors and screaming-fast development machines?  If so then the art of software development is most likely valued by your employer (i.e., you have a higher salary).
• How much time and money do you invest in your build, test, and release process?
• Do you get paid to invest time in staying current in the art of programming by getting to attend trade shows or classes to learn new things?
Knowledge.  Knowledge bases capture some of your tribe's cultural knowledge in a written form, while the remainder exists as tribal knowledge.  For example, you need to know your tribe's system architecture in order to extend its code base in a good way.  So you might start by reviewing system architecture documents.  Most likely the actual architecture is different from the documented architecture and you may well have questions about the architecture that you can best answer by asking someone and drinking in some tribal knowledge.

Knowledge can also be thought of as answering these sorts of questions:
• How do I set up my development machine?
• How do I check in my code?
• How do I log a bug?

Wisdom.  Sometimes ordinary knowledge is insufficient to make the big decisions.   I once recounted the story of when I was once part of a massive development team with many dozens of staff-years of effort invested in a very large product, and the CEO of the company decided to kill the project.  How did he know that this project was a dead end and that he needed to pull the plug?  It was wisdom.

Dakota tribal wisdom says that when you discover you are riding a dead horse, the best strategy is to dismount.  This is one of the most beautiful metaphors I've heard.  How do you just "discover" that you are riding a dead horse?  And how can the simple act of dismounting a horse turn into a strategy?  It turns out this metaphor shows itself all the time in various parts of our lives.  How do you discover when it's time to leave a job, a relationship, or change a habit that's no longer working?  And then how do you form a strategy to address your new discovery?  It's a bit of a magical process, usually accompanied by insight, inspiration, some trepidation, and a feeling of reaching a turning point.

Wisdom also guides our software development.  How do you know when your code design isn't working out and you need to redo it?  What about if you're just stuck on a bug and your existing approaches at fixing it aren't working?  How do you know whether to build or buy some technology?  Should you write your server code in Ruby or Java?  And when you're interviewing, how do you decide which person to invite to join your team?  Even harder, how do you know when it's time to let a team member go?

Putting it all together.  Frank Addante starts off his article Start-up Step 1: A Culture Plan for Inc. by saying "Great culture doesn't just happen - you need to make it happen."  I hope that by breaking out culture into these individual elements and giving examples of how they manifest in software development teams, you can be more aware of the role that culture plays in modern software development teams.  With such awareness, team founders and team members can more consciously and carefully choose or at least guide the culture that best suites them, rather than letting it evolve more haphazardly.

Friday, May 13, 2011

Online Social Fetishes

 A Zuni Fetish
A fetish happens when someone ascribes more value to an object or concept than it intrinsicly has.  As I researched fetishes for this article, I found them to be a surprisingly deep area of inquiry with multiple meanings and applications.  As usual, Wikipedia has a number of excellent articles on the topic that will most likely give you (as it did me) a much deeper understanding of fetishes, and in this article I will use the word "fetish" as described in Wikipedia.

In the online world, we have a "social fetish" when we ascribe more value to an online social experience than it intrinsicly has.  Some examples to give you an idea of what I mean:
• You need a Facebook account to stay well connected with your friends and family
• You need a LinkedIn account to find a job
• You need a dating web site  to find a better mate
• You need a mobile device to survive and thrive in this modern world

I'm going to get uncharacteristically personal for a moment and let you in on a little secret that I suppose will no longer be a secret now.  After leaving a Principal Development Manager role at the mobile phone division of a major software company, I spent about a year without owning or using a mobile phone.  It was quite an eye opener for me.  I certainly noticed the large number of broken, decaying pay phones scattered around our country.  People suddenly didn't know how to meet me somewhere on time.  And I would get on a train and see nearly everyone interacting with their mobile devices.  I think this experience served to make me more sensitive to online social fetishes.
Advertising encourages the fetish-izing of the product or service being promoted by associating things we already take as valuable - for example healthy, sexy looking people - with the thing they're advertising.  How else, for example, could we Americans be convinced to pay up to 10,000 times more for a gallon of bottled water than we pay for a gallon of tap water?  How many of us have taken the time to see whether bottled water is actually any cleaner than tap water?  Most people don't know about this study that found bottled water often exceeded the U.S. Environmental Protection Agency's level for heavy metals, or this study which showed that bacterial contaminants in bottled water exceeded that found in tap water, or this study which found no difference in water quality between tap and bottled.  The online social world is no exception.

We've been convinced we need to invest time and money in using online social tools in order to be successful in our personal or business lives.  But how many of us that have used dating sites have actually checked the statistics to see if getting matched on a dating site works out any better (or worse!) in the end than getting matched not-on-line?  (Update on February 6, 2012: Online dating survey suggests it's no better than meeting at a bar.)  Good hard data is surprisingly hard to find, and you would think that sites like eHarmony would feature such data front and center on their web site if they had it, but they don't - try to find it on their web site.  Disclaimer: I could have spent more time trying to find this data so it may well be out there, I just couldn't find it.  If you find it, post a comment here and let me know!

Interestingly enough, with the advent of viral marketing techniques, we now do the advertising for social web sites when we bring new people into our network.  LinkedIn doesn't need to show you an ad during the Superbowl because their users are actively recruiting new users into the nework while the superbowl is actually going on!

The reason we're worth so much to Facebook is that while we're sitting for 11.5 minutes per day in front of Facebook interacting with our network, Facebook is pushing ads to us based on all the personal stuff we've entered into Facebook, and enough of us are clicking through on those ads that Facebook is making many hundreds of millions of dollars in advertising revenue per year.

Another way to look at the fetishizing of social web sites is to look at the market value of companies like LinkedIn.  LinkedIn is valued at approximately \$3B.  With approximately 100M users, that means each user is worth about \$30, even though the net revenue per user per year is only \$2.40.  Facebook is worth \$50B divided by 500M active users makes each user worth about \$100, and again the net revenue per user per year is much lower.  The reason these companies are valued at such a multiple of their earnings or revenue, is that those of us valuating online social businesses also have an online social fetish.

 Karl Marx
Some argue that one of the reasons Karl Marx used the word "fetish" when he coined the phrase "Commodity fetishism" is that he was trying to show that the same force that drives so-called "primitive" cultures to, for example, believe in the power of voodoo dolls, also drives so-called "civilized" cultures to believe that, for example, a \$100 bill is actually worth \$100 when in reality it is a nearly worthless piece of paper, or that an online dating web site can actually improve your chances of having a successful relationship even though there is no data to that effect.  I'm making a similar comparison here.  Look for hard data before and after all these social tools, in each domain which they claim dominance: Family, friends, jobs, dating, etc.  Is the quality of relationships we're seeing now better than it was before these tools were around?  If so, where's the data?  If not, why do we invest so much time and money in these online social services?  Is it an online social fetish?

Wednesday, May 4, 2011

Famous LinkedIn Profiles - Social Media vs. Social Networking

Seems like everyone has "social media" in their profile these days, or at least about 600,000 on LinkedIn do at the time I am writing this (search for social media on LinkedIn to see).  That number is growing by almost 1,000 new people per day, so you will see a higher number if you click on that link now. This got me wondering about the difference between two terms we all use a lot to describe Internet-based applications: Social Media and Social Networking; what is the difference?  Social media allows anyone to broadcast content that others can discover, share, and comment on, while social networking allows people to connect around shared interests.  Both types of software are used as part of broader marketing campaigns and both generally rely on viral marketing to bring in new users and so can grow at exponential rates.

The latest trend in advertising is to tie celebrities and authoritative voices into interactive advertising campaigns, although arguably this isn't all that new since advertisers have been using celebrities to market their products for years, known as the "celebrity endorsement".  SocialMediaMarketing.com describes a case study where they recruited influential bloggers to lead as ambassadors as part of a large scale marketing campaign.  Say Media took this one step further when they acquired the Typepad blogging platform last year.  This is social media.

There is a special case of social networking I'd like to zero in on for this blog posting: What happens when famous people use social networking tools?  In some cases such as the examples I give below, I think these people are trying to use social networking platforms as if they were social media platforms, and in my opinion, this usually fails spectacularly.  Barack's campaign (read more below) is one notable exception, but that was unique because his campaign invented a new way to use social networking tools, and I'd hesitate to call this either social networking or social media.  I think we need a new term for this.  Any ideas?

I recently discovered that a number of famous people appear to have their own LinkedIn profiles.  At least I'm assuming these are real as I expect they would have been torn down if they were fake.  (If anyone thinks any of these are fake, please let me know!)  Here are my personal favorite examples of celebrities trying to use LinkedIn as if it were a social media platform.  I've just requested a direct connection with all of them.  If I get any responses, I'll come back and edit this blog posting and let you know who let me in!

Sarah Palin's profile is just downright funny to read - her summary ends with such badly written English, you have to wonder how this could still be here online, but there it is:
"My fellow Americans, come join our cause. Join our cause and help our country to elect a great man the next president of the United States. And I thank you, and I -- God bless you, I say, and God bless America. Thank you."

Bill Gate's profile is awesome in it's conciseness.  With only 38 connections it's pretty clear Bill is not using LinkedIn for its social networking capabilities.  I'm guessing he wanted to try it out at some point and just abandoned his account.  Maybe he thought his profile description would be a good way to describe himself to the LinkedIn community.
The man does not need to say much in his profile.  He calls the Gates Foundation, the largest foundation in the world, "A humble initiative", and Microsoft, one of the most dominant software forces in history, "A small monument".  A bit of false modesty?  He never finished college though, so I don't know.  One of his public recommendations appears to be this comment which probably wasn't meant to be public so I am a bit surprised that he'd post this:
"Great job on your promotions. Please contact executive assistants at MAP92112 @ gmail.com to work out details of future promotions."

Like Gates, this guy doesn't need to say much.  His job description for being President simply says, "I am serving as the 44th President of the United States of America."  This is the complete opposite of Bill's profile: millions of connections - over three million on facebook alone.  This is not social networking in the sense that most people think of when they think of LinkedIn, yet at the same time, he never posted anything new on his LinkedIn profile so there could not have been much social media going on either.  I think this was something else, neither social media nor social networking; it was a badge his fans could put on their profile to show their support to their own network.

Talk about not needing to say much, Britney has the shortest profile of the group.  This is the entire profile:
Summary
It's Britney Bitch!
Specialties
Dancing and singing

With only 23 connections and not being open to accepting new connections, I'm guessing she's not using LinkedIn.  I think the only reason she has a profile there is to provide a link to her real fan site.

Wednesday, April 27, 2011

Ruby and the Three P's versus Java and the Argonauts

There's a cultural war going on between developers that use late bound languages to build web applications and services, and those that use early bound languages.  This job trends graph from hiring site Indeed.com may help explain what is going on.  You can see the trend for the early bound languages has continued to grow as a group (with C++ dragging down the pack).  A look at Ruby and Python will show that these are growing at much faster rates than the early bound languages, but the absolute number of jobs available for these languages is only a fraction of those available for the early bound crowd.  In order to grow, the Ruby and Python movements need to get programmers from the top three languages on the graph, which are all early bound languages: Java, C++, and C#.  They also need to recruit younger developers.  This cultural war is one technique the late bound crowd is using to get a developer audience.

This video is pretty funny, and the whole series is quite effective at capturing this cultural war.

Another interesting data point is a comparison of Ruby and Java salaries (see below).  This salary data from payscale.com shows that entry level Ruby programmers make almost 20% more than their Java counterparts.  What accounts for this?  I don't know - if you have any thoughts please let me know!

This advantage disappears as the programmer gets older though.  I think this reflects something else I've noticed about this cultural war: Late bound adherents tend to be younger than their early bound peers.  I think this is because the late bound crowd needs to recruit "new" people to the fold, which will generally be younger people.

 Ruby on Rails Median Salary (U.S.) By total years of professional experience
 Java Media Salary (U.S.) By total years of professional experience

Tuesday, March 8, 2011

Social networks and the future of digital communication

 Future of digital communication?
I recently ran across a fairly widely publicized job description that ends with the following, and I thought it would make a great topic for a blog posting:
Please reach out to email-address-withheld if you’re interested in being considered. Tell us about yourself, how you use social networks and your view on the future of digital communication.

There are a few well respected futurists, such as Carl SaganRay Kurzweil and Michio Kaku, who I like to follow.  But there is another futurist I'd like to make special mention of, because of his vision of the future of digital communications.

 Stylish Nokia Cityman
Before I discuss the future of digital communication, I must make homage to Apple's Knowledge Navigator video, based on the amazingly prescient concept first explored by then Apple CEO John Sculley in the epilogue of his 1987 book Odyssey: Pepsi to Apple.  Before you watch this video, let's take a moment to remember what was going on in 1987.  To the left is the latest, hottest Nokia device to hit the streets.  World wide what?  Wasn't around yet, and the Internet itself wasn't quite all wired up yet.  Now check out the video and think about how close the iPad is to that today.

What is a social network?
Before answering the question of how I use social networks, I'd like to define what I think a social network is.  In this context, I'll use the term "social network" as a shorthand for "online social network service".  These services help people build relationships around shared interests.  They are especially powerful when they enable individuals to harvest the power of indirect relationships and potentially the entire network to, for example: (1) Ask questions; (2) Create new relationships; (3) Search for and exchange information; (4) View group aggregate statistics such as average group age or income; (5) Create entirely new groups based on specific shared interests, and; (6) buy or sell goods or services.

I love this snapshot of an evolving social network from FMS Advanced System Group because it instantly conveys how people are organized into a real-world society by their relationships.  The online view of the entire social network is intended to reflect an in-fact, real-world social network.  (I must resort to the term "real-world social network" to differentiate that from "social network" which by default in this context refers to an online service.)  From a mathematical perspective, a real-world social network can be viewed as a graph where the nodes are people and the links represent various types of relationships such as parent, manager, common interest, or friend - the types of relationships are infinite and can overlap and change over time.

Social networks usually can import a starting view of your social network by importing your address book from other sources, such as your email provider.  They typically leverage indirect relationships to create new direct relationships, increasing the connectedness of the social network.  Their user interfaces are designed to most effectively reinforce whatever the shared interests of the network are, whether they be your health, family and friends, professional interests, dating, food, gaming, or gardening.  They usually incorporate viral marketing mechanisms, so if the value they provide is real, they can grow exponentially fast upon reaching critical mass.

They generate revenue primarily by advertising but also by subscription, by purchase of virtual goods (a new hat for your avatar) and services (advancing through a game), through transaction fees for purchases of real goods, or by donation.  By taking advantage of the private information exchanged among members, social networks can create well targeted advertising campaigns with high conversion rates, and correspondingly charge a premium for advertising rates.

How I use social networks
I am not a connector, to use Malcom Gladwell's term for a basic personality type, so I don't invest time in maintaining a large contact database.  I make up for that by maintaining relationships with people who are connectors.  I personally don't find much value in larger, general purpose social networks like LinkedIn and Facebook due to their low "signal to noise ratio" and their constant problems with privacy.  You won't catch me playing Farmville.  I do use those tools occasionally just to study what they are doing with their product, since they are market leading products.  Personally, I tend to use special interest social networks when I can get value from them, participate while I'm interested in the topic, and then drop off again when I'm done.

I've also lead a few startups trying to create new social networks for specific purposes such as the job and recruiting market and maintaining family connections, and we faced a very daunting problem called the "cold start problem".  The problem is that the social network has no value until members join, and members only want to join once the social network has some value.  Basically, how do we get those first users in there before the group has really formed?  There are various solutions to this problem I won't go into here, but suffice it to say, once you get past this problem, you have a thriving social network.  We then moved onto more advanced problems, such as maximizing our total social value (aka social capital), maximizing our revenue per user, and trying to predict and manage our viral growth rates.  Cloud computing can be a great solution for these rapidly growing user bases, especially since their growth curves can be difficult to predict ahead of time even when using refined versions Jurvetson's famous viral growth formula.

What is digital communication?

Before talking about the future of digital communication, I'd like to define precisely what I mean by this term in the context of this blog posting.  Digital communication is the transfer, to or from a sentient being, of information encoded into discrete (not continuous) values, usually encoded as binary data .  In making this definition, I use the phrase "sentient being" because digital communications have been used by other species such as dolphins and apes.  I'm using the words "information" and "data" fairly precisely in this context too, and at the risk of causing infinite dictionary recursion, I'll briefly say that data corresponds to a real world phenomenon, such as bits or qubits on a disk or in memory and can be operated on by a computer.  I'm hoping this definition still works in the coming age of quantum computing as well.  Information is an emergent property of data when it is formatted and perceived in a way that the meaning of the data can be understood by a sentient being.  If you wanted to go further, knowledge is an emergent property of information that provides a way to control or manipulate the real world, and power is the exercise of knowledge in the pursuit of a specific intention, and wisdom is having the right intentions.  But I digress into a fun philosophical territory we could all probably wonder off into for quite some time...

From that somewhat extended definition of digital communication, we can derive some interesting features.  First, the means of information transfer is not important, although characteristics like speed, latency, quality of information architecture, and reliability are important.  Second, the sensory modalities by which information is transfered to or from the sentient being are not important, whether that be by images projected on a computer screen that we look at, sounds played through a speaker that we listen to, or haptics that we feel.  Hellen Keller first learned language by feeling fingers pressed upon her hand.  You could also call that a form of "digital" communication, but a different kind of digit!

The future of digital communication

As digital communication evolves, social networks will always move to the new evolving communication devices and modalities.  Where digital communication goes, so goes social networks too.

Digital communication will likely change in the following ways in the future:
• Communications will move away from email and more towards mobile based applications, specifically those based on the architectures created by Google, Apple, and Microsoft (yes, predicting that MS will pull a rabbit out of their butt).
• Gaming and sex will continue to drive significant amounts of social, digital communication.
• Actual privacy may erode as users voluntarily give up their privacy in exchange for free services they want to use, paid for by advertising, even in the face of legislation designed to protect privacy.
• 3D user interfaces will begin to evolve, eventually not requiring special eye-wear.
• New form factors like the iPad will continue to emerge and communication will move to the hot new platform, as the older platforms die off.  For example, cheap, flexible display devices that look and weigh about like paper.
• Advances in power management and ubiquitous free or low cost, high speed wireless networks will extend these capabilities to a broad reach of the population.
• Augmented reality applications will become mainstream, and drive display devices into more diverse places like goggles, heads-up displays on cars, on walls, desks, or ceilings of rooms.
• Complex hand gestures not requiring direct touch will be used.
• Full haptic, tactile feedback will allow us to feel things with our hands
• Voice interaction will be used.
• Artificially intelligent agents will be used that can recognize facial gestures and vocal inflection.
• Sound induction will allow us to privately project sound directly into your ears (and eventually directly into your brain), not requiring you to hold a phone up to your ear or wear clunky headphones.
• Immersive reality will directly project 3D augmented reality either onto special glasses, contact lenses, directly into the eye, and then eventually (drum roll...) direct cybernetic hardwired connection to the brain.

And ultimately, the future of digital communication is...

If you believe in the singularity predicted by many first rate futurists, then we can't really see past that point because advances in technology make the future too variable to predict.  Sounds like interesting times to me - hope I get to see it.

The future of social networks

Although the job posting that motivated this blog posting didn't ask about the future of social networks, I think that's a worthwhile question and also the hardest of all questions to answer.

Technologies like OpenSocial make it possible for originally separate social networks to interconnect, even though those networks are run by different vendors on different platforms.  This is a good start, but the process will eventually get a lot smoother and more transparent to end users.

We'll get more customizable, social networking web 2.0 widgets we can drop into our blogs or web sites so we can easily build our own, highly customized social networks.

Some large brands will try to drive their market into their own social network, for the purpose of learning from them, but also for the purpose of increasing customer loyalty which translates into greater sales.

Privacy will be a major issue over the coming years, especially as new legislation is introduced both in the U.S. and in the E.U. to limit the manner in which social network vendors can profit from their user's private information.

Advertising will directly support access to the social network of fans, stars, users, customers, customer service representatives, and so on around what is being advertised.

Political races will be won or lost based on how well the candidates are able to leverage social networking and social media.

Don't forget the real world

With all this talk of computers, it's easy to forget that relationships are a real-world, human phenomenon that we directly experience, whether we're communicating with someone in person or through social networking.  Many relationships exist both on and off the online social network service, and the real world network may or may not be close to the online view of the same network.

Wednesday, February 16, 2011

How to create a software startup for \$120

Lately I've been running into more people than usual looking for funding to create a software startup as there's a mini dot com bubble going on again in the Bay Area.  I don't think you need much funding in order to create a profitable software startup, so long as you can get software development done for equity.  In this blog posting I'm going to share how I believe you can create your own software startup for about \$120, in a way that scales big fast and cost-effectively.
1. Come up with a good idea for a software service or product people will want to use, even if they don't pay directly for it.  How you do this magical thing is beyond the scope of this blog posting, but this awesome podcast interview with Professor Steve Blank gives quite a bit of information about the process.
2. Be sure you're ready to be an entrepreneur - do you have enough passion for your quest?
3. Be ready to invest time without any corresponding income until you've got income coming in.
4. Find a key partner or two - partnerships create synergistic effects that allow you to reach well beyond the sum of the individual partners.  But consider it like you're all getting married to each other, so choose well.  If you don't know any partners, post an ad like this one on your web site, and use social networking techniques to help find partners.
5. Agree on how you and your partners will eventually split the equity of a corporate structure down the road, should things happily evolve to that point.  This could be based on the value of the time each partner invests, but in the end, it's what everyone is comfortable with.
6. Among the partner skill sets, you should have software development skills as well as sales/marketing skills.  You can add other functions later as you need them.
7. You'll need a domain - pay \$10 to register your domain.  Do some brand identity thinking before you pick your domain name.
8. Sign up for a free core business software service like Google Apps, where you get 50 free email addresses in your custom domain, scheduling, group chat, docs, public web sites, wikis, and more.  You'll pay some later if you get big or you can move your infrastructure somewhere else if you like.  All the collaborators get accounts, and this scales as you grow.
9. Meet with your partners in person at the beginning to get on the same page about the product vision.  When not in person, utilize multiple communication modes including chat, video conference, screen sharing, free conference calls, and email - be responsive to all modalities of communication.  All this infrastructure is also free.
10. Create a wiki and document archive to collaboratively create and document your entire evolving business plan and technology infrastructure.
11. Hopefully you can file a provisional patent application to protect your new idea and pay the \$110 filing fee.  You can do this by yourself, but you should know that if you aren't familiar with the process, it takes a significant investment of time to educate yourself about how to do this well.  It's worth doing if you can, because it can create significant value for investors down the road, and also prevent others from copying your idea.
12. Do your work on your own equipment anywhere there is a good Internet connection and work space: garage, home, coffee shop, wherever.  You could argue that there is cost in the rent, hardware, network connection, and so on that I am ignoring in my \$120 figure, but I'm ignoring that here because you have to pay that cost anyway.  Go ahead and deduct some of that from your taxes now because you can!
13. Sign up for a free hosted version control system - I like Project Locker.
14. Also get a defect tracking system, agile project management system, continuous build system, and wiki set up.   There are some free choices out there, and some very low cost alternatives as well.  I'll try to come back to this blog posting and edit this to add some of my favorites in these areas too.  In the mean time, you can search for free versions of those tools, and just pick your favorites.
15. In your agile project management system, you and your partners take the vision and break that down into features.  Then work with your developers to turn those features into releases, sprints, and features.
16. In your IDE, use a tool like Mylyn to connect to your project management system and your continuous build system.  You can use the time tracking feature if you like to get a view of how much time each person is putting in, and what your Agile-style velocity is.  This makes it easier to predict your schedules.  Also download the adapter to connect your IDE to your version control system.
17. For server software, consider a free (to get in) cloud-based solution like Google App Engine or Amazon EC2.
18. If you're developing mobile phone software, use the mobile phone you've got, or get the phone you need (I'm not counting that expense since you'll use it as a personal phone too).  The software development tools you'll need are free.
With all of the above, you've got plenty of software development infrastructure (and a bit of startup culture) to build just about anything you want, for just about no cost, and there's a fairly low tax in terms of the time it takes to set up the infrastructure, as well as the ongoing overhead.  It can easily handle many developers simultaneously developing your product, and it sets up the kind of culture that can scale.  Once you're about to get some revenue coming in, then use that revenue to incorporate and start a real business.  Also, the services that you started using for free will start to cost something as you have real users putting load on the cloud, and you must ensure that your revenue covers those expenses.

What I like about this approach is that it gives you a rich, state of the art business and development infrastructure virtually for free.  All you need is the idea, passion, and time.

Now it's quite likely that cash could accelerate your time to market in various ways.  Perhaps it would allow you to pay yourself a salary so you could spend more time on your startup.  Or you could purchase a library instead of building something yourself.  Or perhaps pay a consultant to do some work.  In any event, the point of this blog posting isn't so much to say that you should only spend \$120 on a startup - it's more to set a perspective on the value of funding, whether that funding is coming from yourself or an investor.