Python Training Part 3 (of 4)

In my ongoing series on EVERY business person should learn a programming language… and that language should be Python…   this is part 3 of 4.   Like prior trainings, this should be done in order.  You should already have python 2.6 installed, and be able to create files and invoke idle from either the shell or the gui.

Today’s lesson is on “classes”… classes are a very important concept in Python (and almost any programming language).   They enable you to write much more readable and useful code…. most importantly they enable you to build complex systems that ‘build on top of each other’ using either member variables of classes or inheritance or both.

A class can be thought of as simply a “container” for one or more “variables” and one or more “methods”.
Those variables are called ‘member variables’ because they belong “in the class”.
Those methods are called ‘class methods’ or sometimes called ‘member functions’ because they (almost always) act on or use the member variables of that class.

An object is an instantiation of a class… e.g. while a class “describes” what are it’s member variables and member functions…   an object is one instance (e.g. one of potentially many) class objects.

Okay, enough mumbo-jumbo, let’s get some hands-on!

1. First, create a file called location_classes.py somewhere in your library include path (C:python26 works)

2. In that file, put the following very simple class:
class Location(object):
    #MemberVariables
    #x    #y    #z
    def __init__(self,x,y,z):
        self.x = x
        self.y = y
        self.z = z

# this is one of the most basic classes possible, it has 3member variables, x, y, z, and one member function called “__init__”.   “__init__” is a special member function that is called when an instance is created.
Now, let’s use it.

3. Next, from within idle, type the following commands

from location_classes import Location
l21 = Location()  #this fails!   In our __init__ we required x,y,z to be set!
l2 = Location(3,4,5)
l1 = Location(0,0,0)
print l2
print l1
print l1.x
print l2.z

#notice the “dot” notation to access your instance member variables (l2 is an instance of class Location)
#notice how l1 is seperate from l2, but both are the same class?
#cool right? 🙂
#you havn’t seen the least of it!

4. Now, change your class code to be as follows:
import math
from datetime import datetime

class Location(object):
    #MemberVariables
    #x    #y    #z
    def __init__(self,x=0,y=0,z=0):
        self.x = x
        self.y = y
        self.z = z
     
    def __str__(self):
        return “X: %f, Y: %f, Z: %f” % (self.x,self.y,self.z)

    def distance(self,destination):
        xDiff = destination.x – self.x
        yDiff = destination.y – self.y
        zDiff = destination.z – self.z
        return math.sqrt(math.pow((xDiff),2) + math.pow((yDiff),2) + math.pow((zDiff),2))

#notice we’ve done 3 things.. we’ve set some ‘default values’ to the __init__ function, we’ve added 2 new member functions __str__ and distance.  __str__ is a special one that defines that classes string representation.   let’s try it!
5. Close Idle, and restart it… (you have to do this, or your classes may not get reloaded correctly).  type the following into the new idle window
from location_classes import Location
l21 = Location()  #this succeeds now!!!
print l21
l2 = Location(3,4,5)
l1 = Location(0,0,0)
print l2
print l1
print l1.x
print l2.z

print l1.distance(l2)  #notice it did the distance math from l1 to l2!  cool right?

#play around with this…
l1.z=55
print l1.distance(l2)

#and try stuff like this
l21 = l2
print l21
print l2

6. Okay, now to learn about including a class into a class… this is NOT inheritance, it is instead, making a class a member variable of another class!   (We’ll learn inheritance later).   For now, update your location_classes.py file to be as follows:

import math
from datetime import datetime

class Location(object):
    #MemberVariables
    #x    #y    #z
    def __init__(self,x=0,y=0,z=0):
        self.x = x
        self.y = y
        self.z = z
     
    def __str__(self):
        return “X: %f, Y: %f, Z: %f” % (self.x,self.y,self.z)

    def distance(self,destination):
        xDiff = destination.x – self.x
        yDiff = destination.y – self.y
        zDiff = destination.z – self.z
        return math.sqrt(math.pow((xDiff),2) + math.pow((yDiff),2) + math.pow((zDiff),2))

def vectorTo(origin,destination,speed):
    if speed==0:
        return origin
    dist = origin.distance(destination)
 
    dx = (destination.x – origin.x) / dist
    dy = (destination.y – origin.y) / dist
    dz = (destination.z – origin.z) / dist

    x = origin.x + dx * speed
    y = origin.y + dy * speed
    z = origin.z + dz * speed
 
    return Location( x, y, z )

#a boat is defined by its length, width, height, type-code and position and heading (point boat is moving towards)
class Boat(object):
    #Member Variables
    #length = 0    #width = 0    #height = 0    #boat_type = 0    #position = Location(0,0,0)    #heading = Location(0,0,0)

    def __init__(self,boat_type):  #makes boat_type required
        self.length = 0
        self.width = 0
        self.height = 0
        self.position = Location(0,0,0)
        self.heading = Location(0,0,0)
        self.boat_type = boat_type

    def move_towards_heading(self, speed):
        if (self.position.distance(self.heading) <= speed):
            print “Will arrive”
            self.position = self.heading
            return True
        else:
            #move towards goal
            self.position = vectorTo(self.position, self.heading, speed)
        return False

## Notice We’ve made a function (vectorTo) which is used in a new member function of class Boat… (move_towards_heading)…
### Notice that the Boat class has 2 member variables that are a Location type!  And that the move_towards_heading updates the position vectors of the Boat class!  Cool right?

7. Let’s play with our new boat! 🙂  From python idle command line type:
from location_classes import Boat
ab = Boat(1)  #a boat of type 1
ab.heading = Location(5,5,5)
print ab.position
print ab.position.distance(ab.heading)
ab.move_towards_heading(1)
print ab.position
print ab.position.distance(ab.heading)

ab.move_towards_heading(speed = 1) #note that i said speed=1 here, but i didn’t have to, I could have just said 1, but I wanted to show you how in a function call you can specify which parameters are what…

print ab.position
print ab.position.distance(ab.heading)

ab.move_towards_heading(1)
print ab.position
print ab.position.distance(ab.heading)

#can you see our boat moving?  I can!   It’s moving!!!!

8. Okay, time to learn about inheritance!   We need TIME!  Time, I say, time! Make your location_classes.py file look like this:

import math
from datetime import datetime

class Location(object):
    def __init__(self,x=0,y=0,z=0):
        self.x = x
        self.y = y
        self.z = z
     
    def __str__(self):
        return “X: %f, Y: %f, Z: %f” % (self.x,self.y,self.z)

    def distance(self,destination):
        xDiff = destination.x – self.x
        yDiff = destination.y – self.y
        zDiff = destination.z – self.z
        return math.sqrt(math.pow((xDiff),2) + math.pow((yDiff),2) + math.pow((zDiff),2))

def vectorTo(origin,destination,speed):
    if speed==0:
        return origin
    dist = origin.distance(destination)
 
    dx = (destination.x – origin.x) / dist
    dy = (destination.y – origin.y) / dist
    dz = (destination.z – origin.z) / dist

    x = origin.x + dx * speed
    y = origin.y + dy * speed
    z = origin.z + dz * speed
 
    return Location( x, y, z )

#a boat is defined by its length, width, height, type-code and position and heading (point boat is moving towards)
class Boat(object):
    #Member Variables
    #length = 0    #width = 0    #height = 0    #boat_type = 0    #position = Location(0,0,0)    #heading = Location(0,0,0)

    def __init__(self,boat_type):  #makes boat_type required
        self.length = 0
        self.width = 0
        self.height = 0
        self.position = Location(0,0,0)
        self.heading = Location(0,0,0)
        self.boat_type = boat_type

    def move_towards_heading(self, speed):
        if (self.position.distance(self.heading) <= speed):
            print “will arrive”
            self.position = self.heading
        else:
            #move towards goal
            self.position = vectorTo(self.position, self.heading, speed)
        return self.position
 
class Location4d(Location):
    t = datetime.now()
    def __init__(self,x,y,z,t):
        super(Location4d, self).__init__(x,y,z)
        if t > 0:
            self.t = t

    def __str__(self):
        return “X: %f, Y: %f, Z: %f, T: %s” % (self.x,self.y,self.z,self.t)

## notice we added a new class Location4d, and it inherited Location!   up till now, we’ve been inheriting “object” which is actually a very base class that gives us ability to call super  ( we didn’t have to do this, we could have called  class Location()  but then we wouldn’t have had access to the super function, which can be really helpful. )

### Also notice that since we inherited from Location class, that we actually have an x, y, z already as member variables, and we added t  (time!).

### We’ve over-ridden the __str__ function (by having defined ou own) and added to the __init__ function (using super)

#### let’s play with it.

9. In your command shell  (idle) type the following:

from location_classes import Location4d
l4 = Location4d(0,0,0,0)
print l4
l3 = Location4d(4,5,6,0)
l4.distance(l3)
l3.distance(l4)
#  notice we called the distance function?   how you say?  simple, we inherited not only the member variables, but also the member functions!   Cool right?

10. What else can you do with classes?
Turns out you can do a lot just with these few things I’ve showed you… but there is so much more too!  Creating classes of classes of classes, you could model the universe!
Most libraries you use will start with a class as well!  So knowing how to ‘instantiate’ a class instance is key  * you did this many times when you said l4=Location4d(0,0,0,0) for example!

So, here’s your homework!!!

Create a new class called Rectangle…  make sure it inherits from Location or Location4d  (your choice… yes, deep inheritance is possible, as is multiple inheritance..e.g. a location and a location 4d… although that makes no sense here).

Now, write a member function to return the area of the rectangle.

Now, write a member function to ‘move’ the rectangle from one position to another position at a given speed.

Now, write a program that asks for length and width and prints the area of the rectangle.

That’ll do it!  Enjoy!

Business Use of Patents and Provisional Patents

The raging debate about Patent Trolls and what can and should be patented might lead one to consider, what is the business purpose of a patent?  Particularly if you are a startup (very early stage, perhaps pre-funded) with little cash, little time, and a need for focus, the question of patents, to patent or not, seems to be somewhat common.  This post is a summary of my advice and knowledge on the topic, as I recently provided to a new company called Basedrive who are working on their business plan as part of The University of Texas Longhorn Startup class and program.

Here is my advice…

1. First, don’t be a Patent Troll:

A Patent Troll is someone who patents something with no real intention of building it, so that later they can ‘claim royalties’ or sue big companies for ‘stealing their idea’.  This approach is not something upon which to build a true entrepreneurial business; and such loopholes should be looked on with great skepticism.

2. Don’t do patent searches…

If you are thinking of writing a patent, and are worried if your patent is truly novel or not, you may be tempted to ‘search prior patents’.  DO NOT DO THIS!   You will be required to list all the patents you looked at, and this could taint you or your ideas… further, you WILL likely find something similar.. but it’s not your job to know this, or if yours is “different enough”.

IF YOU THINK IT MIGHT BE UNIQUE, do not search… just move to step 3, below.

3. Decide if $130 (or so) is worth spending or not…
For $130, all in total amount, you can file a provisional patent.  (See Patent Fee Schedule)

So, what would a $130 Provisional Patent buy you for your business?
a.) You can put the words “Patent Pending” on your product.
b.) Investors will see you as ‘better’ than companies without a patent pending.
c.) It can lead to a real patent in the future, with a priority date equal to the date you submitted the patent (or earlier).

The downside?  None.  In order to claim the priority date by means of your provisional patent, you need to file the final patent within 12-months of submitting the provisional; but this is not a bad thing… even if you don’t write the final patent in the 12-months, you can still write the final patent later with no penalty. (just no claim on the provisional).

If you need to buy food, don’t spend the $130… but otherwise, I say do it.. at least for 1 thing!

4. What is Patent-able/What to write?
So, what do you patent?  My best advice is to focus on some implementation detail that you do that helps your product/service be unique.  Got no technology?  Don’t bother writing a Patent (IMHO).

What kind of technology?  Hardware?  Yes.   Software?  Yes.  Both?  Ideal!

Even if your use of the technology is in software, I suggest writing the patent as though the software could be implemented “into a device”… (thus covering both hardware and software).  This might require creative thinking, but it might also get you the patent later!

What do you write for a provisional?  SIMPLE:  Just write in plain English how your technology works, and how it might work in software or hardware.  Simple, plain, English.

You will also need 1 drawing.  1.  not 2.  1.  Simple block diagram is ideal, showing the system.

Now, go to uspto.gov and SUBMIT IT YOURSELF!   No need to pay a lawyer to submit or review a provisional patent.  JUST DO IT!

5. Should you file a final, full patent?

Maybe.  But not yet.  Not until either: a.) you can easily afford the $8,000-10,000 for a lawyer to do it right… or  b.) your business really needs it for some reason [e.g. to increase your stock’s value even more by having full issued patents ].

When you do a final patent… simply get a lawyer to do it.  Simple.   A real patent lawyer.  You don’t want to do a final by yourself.  Just give the lawyer your provisional as a starting place, and off you go!

6. So business value?
Yep.  Provisional = Obvious.  It’ll help you stand out and raise money and look good. (that’s it really).
Final full patents… = Less Obvious.  It MIGHT help you raise more money at a better price, it MIGHT protect you from getting sued [because you could counter-sue], it MIGHT help you go after someone who is infringing on your patent (doubtful)…

So, Provisional = Yes.  Final = Doubtful (IMHO).

So, get to it!

Python Part 2: Learn a Programming Language.. dang it!

Continuing in my series where I try to convince you to learn a programming language… let me just say that Python can be used for a large number of very useful analytical things… like analyzing sales data, analyzing survey data, and much, much more!  

Without further ado, here is Part 2, to the “Quick Python Training by Harlan” series.
Here’s the link to part 1… (prerequisite is required): http://fastai.com/blog/2013/10/18/why-everyone-should-learn-programming/

This week you will learn: Intermediate Python…   Libraries, Dictionaries, Lists, Time, and more.

You will also learn about files, paths, and such…  here we go!

  1. First, you will need to be able to run python from a command line… on a PC, click Start->run->CMD   then in a command shell, type cd c:python26  <enter>  (or the path to where you installed python), then type python.exe   (you should be at the shell).  type quit() to exit the shell.
    1. on MAC, just open the terminal, and type python, and it should work.
  2. Now, we need to learn how to make a file that python can run…   from command line type:
    1. notepad hi.py (PC)  or    on mac.. do vi hi.py  
    2. in notepad type: print “Hello!” then alt-file-save alt-file-exit.  
      1. on mac, type i  then type print “Hello!”, then press escape, then type :wq  <press enter>
    3. now, from your command line type python hi.py
      1. SEE THE OUTPUT! 🙂  you just made a python program !
  3. Okay, next let’s do some FILE INPUT OUTPUT to learn about libraries.
    1. make a file called  helloname.py  that looks like this:
import sys, os, glob

from optparse import OptionParser, make_option
import csv

def main():
    help = “Read the name of person and print hello persons name”
    args = “usage: %prog -n = name”
    parser = OptionParser(args)
    parser.add_option(‘–path’, ‘-n’, dest=’name’, help=’name of person’)
    (options, args) = parser.parse_args()
    name = options.name

    print “Hello”, name

main()

#run this with python helloname.py -n Harlan

    4.  Now, lets do some outputting to a file!   make a new file called helloname_to_out.py

import sys, os, glob

from optparse import OptionParser, make_option
import csv

def print_hello_name_to_file(name):
    afile=open(“namefile.txt”, ‘wb’)
    afile.write(“Hello %s!” % name)
    afile.close()
    return afile

def main():
    help = “Read the name of person and print hello persons name”
    args = “usage: %prog -n = name”
    parser = OptionParser(args)
    parser.add_option(‘–path’, ‘-n’, dest=’name’, help=’name of person’)
    (options, args) = parser.parse_args()
    name = options.name

    file = print_hello_name_to_file(name)
    print “done check the file”, file

main()

#run this with python helloname_to_out.py -n Harlan

   5. Time to play with time… try this file: hitime.py

import sys, os, glob
from datetime import datetime

from optparse import OptionParser, make_option
import csv

def print_hello_name_to_file(name):
    afile=open(“namefile.txt”, ‘wb’)
    afile.write(“Hello %s! ” % name)
    now=datetime.now()
    afile.write(“It is now: %s” % now)
    afile.close()
    return afile

def main():
    help = “Read the name of person and print hello persons name”
    args = “usage: %prog -n = name”
    parser = OptionParser(args)
    parser.add_option(‘–path’, ‘-n’, dest=’name’, help=’name of person’)
    (options, args) = parser.parse_args()
    name = options.name

    file = print_hello_name_to_file(name)
    print “done check the file”, file

main()

#run this with python hitime.py -n Harlan

   6. Okay now time for some lists!  Let’s learn these in idle!  start idle in windows start->run->idle   or mac: from terminal type: idle
      #okay, now you can type stuff into idle to go along… and learn about lists
      firstlist = [1,2,3,4]
      print firstlist
      print firstlist[0]
      print firstlist[2]
      print firstlist[4]

      #now try this
      list2=[1,2,”3″,”hi”,[“a”,”b”,”c”]]
      print list2
      print list2[3]
      print list2[4]
      print list2[4][2]

  7. now then, on to dictionaries
        dict1={1:’one’,2:’two’,3:’three’}  
        print dict1
        print dict1[2]
        print dict1[0]
   #and an advanced one
       dict2={‘numbers’:[1,2,3], ‘letters’:[‘a’,’b’,’c’], ‘name’:”Harlan”, 5:’Five!’}
       print dict2[5]
       print dict2[‘numbers’]
       print dict2[‘numbers’][0]

   8. finally, lets make our own library and import it!
   #in notepad make a file called: namefromfile.py
import os
 
import os
 
def getname(afilename):
    afile = open(afilename,’r’)
    namelist = afile.readline()
    names_in_list = namelist.split(‘ ‘)
    if len(names_in_list) > 1:
         name=names_in_list[1]
    else:
         name=names_in_list[0]
    return name          

   #save this, now make a new file called   hinamefromfile.py
import sys, os, glob

from optparse import OptionParser, make_option
from namefromfile import getname
import csv

def main():
    #help = “Read the name of person and print hello persons name”
    #args = “usage: %prog -n = name”
    #parser = OptionParser(args)
    #parser.add_option(‘–path’, ‘-n’, dest=’name’, help=’name of person’)
    #(options, args) = parser.parse_args()
    #name = options.name

    name = getname(‘namefile.txt’)

    print “Hello”, name

main()

  #run this with: python  hinamefromfile.py
 

9. OKAY HOMEWORK TIME!!!  This will require research… which is a MAJOR part of any programming language!!!  but you have the basics to do this!

first, create this file called “harlansdictionary.csv”, it should contain the following
Hungry,Honkin Hungry
Angry,Mad As Hell
Happy,Gleed Myself
Sad,Sobbin Myself

Now, write a program that takes any sentence, and replaces any word found in the first column, with Harlan’s version on the right.  For fun, feel free to add to the dictionary!

NOTE: you must load the dictionary fresh on each time the program runs!
HINT: you might use    import csv   (research it!)  will help a lot.
HINT2: you might use dictionaries
HINT3: you might use split() function as in today’s teaching.

YOU CAN DO IT!
   

Why everyone should learn a Programming Language & How to learn Python!

I think everyone should learn a programming language.  It teaches the importance of order, of ‘proper’ order.  It teaches good planning skills.  It teaches discipline.  It teaches self-learning… and IT IS PRACTICAL!    You would be surprised how often it could be helpful for you to know how to program something up real quick!

So, which language should you learn? My opinion: Python!   Specifically Python 2.6.    I will be posting here in my blog a mini-series of how to learn python.  This is part 1 of 4:  Basic Python

Python Basics  “Hello World”,  If I am Cool, “Hello World”,  Forever “Hello World”, 100 “Hello Worlds”.

This whole thing should take you no more than 30 minutes….

1.  Download and install python for your MAC or PC:  (just use the installer!)
http://www.python.org/download/releases/2.6/

2. NEVER BE AFRAID TO SEARCH THE DOCUMENTATION!!!!
http://docs.python.org/2.6/index.html

3. Breeze through a few of these Python Training Slides.. (just go through quickly….  you only learn programming by doing… so go do #4 ASAP!)
http://www.slideshare.net/ahmetbulut/programming-with-python-week-1
http://www.slideshare.net/ahmetbulut/programming-with-python-week-2
http://www.slideshare.net/ahmetbulut/programming-with-python-week-3
http://www.slideshare.net/amiable_indian/introduction-to-python
http://www.slideshare.net/amiable_indian/introduction-to-python-part-two

4. Do the following code in a file for practice… and do the homework below.

print “hello world”

a=1

print a

a=”b”

print a

b=5

print b

a=b

print a

message=”harlan is cool”

cool=True

if cool:

    print message

cool=not cool

if cool:

    print message

cool=not cool

if cool:

    print message

dancer=True

if cool and dancer:

    print message

    

if cool or dancer:

    print message

#while True:

#    print “hello world”

#for i in range(1,101):

    #print i, “hello world”

name=raw_input(“what is your name?”)

print “hello %s” % name

number=raw_input(“how old are you?”)

if int(number) < 5:

    print “you are younger than 5”

elif int(number) < 25:

    print “you are younger than 25”

else:

    print “you are older than 25”

    

”’Homework

Due by next week… write a program that prints    ___ is an even number…

   for every number from 1 to 1000.. then asks user to put in any number

      checks if it is even, and if so.. prints  __ is an even number

       if not prints ___ is NOT an even number.

       * bonus points if you handle 0 correctly!

”’

SPIN Selling for Engineers: How to teach Engineers to Sell!

“Wow, that was so cool, it really works!” – University of Texas Engineering Undergraduate

This was the general sentiment this week when I demonstrated the SPIN Selling technique to a group of undergraduates (mostly engineering-types) who are studying entrepreneurship at The University of Texas in the 1 Semester Startup Class (now called Longhorn Startup).  I volunteered to demonstrate the approach on their very first sales call (yes they are really that far along, and I’m so proud of them!  They have overcome the first and second hurdle of entrepreneurship: 1. Selecting a Target Market.  2. Getting over their Fear.).

So what is SPIN Selling?  And why is it a great technique for Engineers?  Read on My Friends!

First, SPIN Selling is a technique originally developed by Neil Rackham.. in his book SPIN Selling.

If you don’t like reading, this site has a nice summary of the book on 1 page: http://wolfram.org/writing/howto/sell/spin_selling.html
However, I’ll also summarize SPIN Selling in my own words below with one major tweak: from the perspective of an Engineer trying to make his/her first sale…
  1. SPIN Selling is great for engineers because it is an easy to understand acronym: S=Situation Questions, P=Problem Questions, I=Implication Questions, N=Need-Payoff Questions
  2. One of the best approaches to sales naturally emerges by “following the process” which, following processes is easy for engineers to do.
    1. This process is one of ‘connecting to the client’, ‘understanding their needs’, and ‘fitting or not fitting your product to satisfy their true needs’….   if you can connect the dots for the prospect: the sale is just a natural thing!
      1. And they’ll want to buy from YOU specifically, not necessarily because your product is superior (a concept Engineers need to not focus on), but because you understand them best, and have built a rapport with them through “the process”.
  3. The Process:
    1. Ask a few “Situation Questions” to get them thinking about their business, not yours: Initially on the call or in the meeting, simply ask how his/her business or life is going and uncover the specifics of their business as it might relate to your product. 
      1. Examples:  How is your business going?  How do you measure success?  What kinds of files do you use?  Who are your clients?  etc.
    2. Ask a few “Problem Questions” until you uncover a problem you might be able to solve: Basically try to uncover what problems they have (not if, we all have problems)..  Focusing on Throughput or Cost (throughput questions are ones of ability to deliver product/service, or inability to get new clients/customers)… cost is cost and headache (mental cost).  Obviously, focus on those areas which your product/service might solve…
      1. Examples: Do you feel you have plenty of clients?  Do you have any major cost problems?  Are you able to fulfill all your orders on time?  What is preventing you from being more successful today?  What gives you the biggest headaches today?
    3. Ask enough “Implication Questions” such that they agree that the problem is serious: Try to get them to see the light that the problem has real consequences.  To understand, for example, that those extra costs are cutting in to margins, which slows growth.  Or that the lack of enough customers means you are wasting resources from under-utilization.
      1. Examples: Do you agree that the lack of customers means you are under-utilizing your fixed resources?  Do you agree that the extra costs you are incurring is hitting your bottom line, and that extra cash you could have had would be useful to help you grow?  Do you agree that your headaches might be making you distracted on other issues?
    4. Ask enough “Need-Payoff Questions” such that they agree a solution has real value.  Need-Payoff sort-of restates the Implication question in such a way that a solution has real value.  Once they agree to real value… then, and ONLY THEN, can you pitch your product/service…. and it will be in their terms…  
      1. Examples: Do you agree that getting rid of that headache would let you be more productive at other more important things?   Do you agree that your increased productivity is worth real value?  In hours per day?  In Dollars per day?  Do you agree that being able to get more customers has real value?  In Dollars per Customer?  Do you agree that reducing costs impacts the bottom line directly?  In real profit dollars?
    5. Now, and only now that they agree there is real value in a potenial solution, are you permitted to pitch your idea… AND ONLY PITCH IT IF YOU CAN GIVE THE PAYOFF (or a part of it) THEY AGREED TO IN STEP 4.  If not, continue with Steps 2-4, until you can or until they hang up!
      1. The pitch should be short, just 3 slides (more on this next time): Benefits, Tech, Price.
      2. Don’t talk to the slides, talk to how YOUR PRODUCT might help solve THEIR PROBLEM… And point back to those NEED-PAYOFF questions you asked.
    6. Finally, Ask a few “Qualifying Questions”, and then “ASK FOR THE SALE”: You need to “flip the conversation” to be more about potentially fitting them to your business….   Now, they need to SELL YOU!
      1. You truly want it to seem like buying your product/service means belonging to an exclusive club.. and only some people are PERMITTED TO BUY!
      2. You questions now are “Qualifying Questions”… here is some good ones:
        1. We want to work with ‘thought leaders’ and ‘early adopters’, how forward-thinking about new stuff is your company?
        2. It is important that we work with companies of just the right size, how big is your business?
        3. We want partners who will become our reference customers, if things we work together to solve your problems, would you be willing to be a reference customer?
        4. Alright… it seems like we might be a good fit… it also seems that OUR PRODUCT/SERVICE will really help SOLVE YOUR PROBLEM and has a REAL DOLLAR IMPACT TO YOUR BUSINESS… 
          1. ASK FOR THE ORDER!!!!
            1. How many units can we sell you today to see how well this works?  or  
            2. What size initial order can you place today to test our ability to deliver?  or
            3. Who in your organization needs to sign off on this deal?
    7. Level Up!
      1. Regardless of the answers to step 6… be sure you try to “level up”.
      2. Often-times in a big sale, it takes many approvals and other folks to help decide.
      3. Leave EACH MEETING with a date/time for the next meeting and try to “level-up” the meeting….  TRY TO ATTEND ANY APPROVAL MEETINGS IN PERSON.
      4. Bring up all you have learned about their problem and the NEED-PAYOFF in REAL DOLLARS! (I hope you took notes).
And that’s it my friends!
Go out and sell!  But remember, only sell IF you can make a real dollar impact… if not, trust me, you don’t want them as a customer…. they won’t be happy, and neither will you.

How to Avoid Fistfights with Co-Founders: Founder Equity Split Suggestions

Fistfights with Co-Founders can be avoided!  Here are some tips for founding your company with partners, such that later on, when things get complicated (like founders quitting, etc.), ya’ll don’t kill each other.   Nothing feels more frustrating than a founder that quits, and takes a bunch of stock with him….  A big benefit of this method is also: many VCs will prefer this type of structure (vesting)!  And.. the IRS might prefer it too… so, here goes!

  1. First, decide who is bringing “value” to the company at this point… (like who is bringing ‘the idea’, or ‘some tech’, or contributing ‘some gear’, or contributing ‘some money’).  If nobody is bringing anything, skip to step 3.
  2. Set aside 10-30% of stock to give to people who ‘brought something’ to the team…   Rule of thumb: 5% for money or stuff, 10% for tech, 20% for idea.
  3. Now take the remainder (90-70%) and set that aside to distribute evenly to the whole team for “work on the business plan prior to formation”.
  4. Okay, now assign the remainder amount evenly with all founders (example 7 founders, 70% means 10% per founder).
  5. Next assign the ‘brought something’ extra stock to the given founders (example idea will have 30%, tech guy has 20%, and the rest have 10%).
  6. Agree on a vesting term (3 year, monthly vesting is common).
  7. Now, write a VERY short Memorandum of understanding with everyone’s name, the date, signature places, and most importantly the vesting terms.
  8. Pick a CEO!  (the 1 person who shall be the CEO and in the drivers seat!  All other roles could be identified too, but the CEO role is a must.).  It does not have to be the idea guys, but it’s nice if it is.

Here’s an example Memorandum (note: I’m not a lawyer, and this wasn’t written by one: use at your own discretion).  (names are made up, except mine)

Memorandum of Understanding

We, who plan to found company ______ each agree that when this founding occurs we will split the shares of the company as follows:
   Joe Smith:  30%, Whom we agree shall be the CEO of the company.
   Frank Toe:  20%
   Alan Man:   10%
   Harlan Beverly: 10%
   Sally Jenson: 10%
   Erin Klause: 10%
   Jessica Stower: 10%

We agree that these shares should have a vesting period of 3 years, whereby vesting happens evenly, monthly, over a period of 3 years.  the company shall have the right to any stock not vested in the event that any founder leaves the company (voluntarily or involuntarily).  We, agree that this vesting shall begin on this day ________.

Signed,
______________________________, Date ______________
______________________________, Date ______________
______________________________, Date ______________
______________________________, Date ______________
______________________________, Date ______________
______________________________, Date ______________
______________________________, Date ______________

That’s about it!

Now, get it done right, so that you don’t have to fight!

Later on, when you actually found the company (as in incorporate), this document will go away… and be replaced with real shareholders agreements and so forth.

Great Products Need Little Marketing

Do truly great products need a lot of advertising help? Will lots of advertising expense overcome a bad product?  I intend to find out, at least in one vertical: video games.

The presentation below is a presentation I gave which outlines my research goal and motivation around how products succeed in the marketplace.  Specifically Product Conception Quality, or how well a product is conceived during the Fuzzy Front End of product development, is a moderator on product success controlling for advertising expenditure.

What do you think will be the answer of my research?   Will products that were better conceived perform better in the marketplace when we control for ad spend?  Or is it purely a factor of how hard companies ‘push’ their bad products?

Do you have a Purple Cow?  Or are you shoving a Normal Cow down peoples throats?

Engaging Social Posts that Don’t Suck

Social Posts onto Facebook and Twitter are important for companies… they serve many purposes, but first and foremost of those purposes should be ENGAGEMENT.

What the heck is engagement?  This picture should tell the story.. or click it or the presentation below to learn more.   Engagement, as you can see, leads to success… which is what Business is supposed to be about.

So, how do you write engaging posts on Facebook, Twitter, Pinterest, and so forth, without them sucking?
Well I’ve put together a little training presentation on just that.

Enjoy!  Comments welcome!

How to Do Google Adwords and Google Adsense Marketing Right

I was speaking to my students this week at http://stedwards.edu, and realized I have never posted this short training on Google Adwords I put together.

It’s a quick read and I think highly useful… so check it out!
http://www.slideshare.net/hbombers/how-to-do-adwords-and-facebook-marketing

Slideshare is Cool!

You will see a number of new blog posts coming up today, all because I recently decided to post every personal training presentation I could find in my old inbox.

I hope you will find some of these useful.

You can see all my presentations here:
http://www.slideshare.net/hbombers

Meanwhile, I am continually impressed with Slideshare: http://www.slideshare.net/

They somehow have figured out a way to really make it easy for people to upload Powerpoint in a useful way to share with the world.

Let the knowledge be unlocked!

Who’s with me?

What PPT have you uploaded recently?