Posted on July 30, 2007 in Software Development by Rob Di Marco1 Comment »

Ran across an interview at InfoQ about using poker playing to help with software estimation.  Looking at the planning poker site, it seems a bit gimmicky and hokey and reminds me a lot of the the CRC cards approach (BTW, I think my next job title will be agile consultant).  I have never really done a project using CRC but I don’t think that I, or most of my co-workers, would have the patience for it.  Same thing goes for the poker planning idea.

I’ve never found getting estimates to tasks to be that big of an issue when planning projects.  If you can break tasks down into reasonably sized chunks, I find that good developers are usually pretty good at determining how long it will take.  The big problem with planning projects is trying to prioritize tasks and determine what needs to go into each release, not so much the estimation of how long it will take.

All that being said, I think Tim McCune would love it.  Maybe he can get Yahoo to adapt it.

Popularity: 7% [?]

Posted on July 24, 2007 in Uncategorized by Rob Di Marco3 Comments »

Since I have been talking about Java vs. Ruby, I figured I would give a recent example of where Ruby really solved my problems simply and easily.  My company uses SalesForce.com for their CRM solution.  Our sales, finance, and fulfillment teams have logins that are maintained and managed through the website.  This is a pain for both the users and our IT team as people now have to remember their SalesForce username and password as well as their internal user name and password.

To combat this problem, SalesForce has created a method that allows authentication of users via a SOAP request.  Very cool, solves the problem, so I signed up to implement it.  SalesForce supplies a WSDL documenting the services that need to be supported and you supply the URL that implements the defined services.  Should be simple to connect to our ActiveDirectory server using LDAP to perform the validation of users.

The Initial Attempt: Using Java Web Services…

Our standard development environment is Java 5, Maven 2 for builds, Apache 2 for HTTP(S), and JBoss 4.0.5 as an application server.  I thought it would be a simple exercise to use JAX-WS combined with JAX-WS Maven Plugin for auto-generation of my stubs and the JBoss WS to simply deploy.  First problem was getting the Maven plugin working correctly.  After some trial and error, I got my POM setup correctly and was deploying the EAR.  Unfortunately, I realized that JBoss was assuming that Tomcat was running on port 8080, causing a problem in the WSDL that was being referenced.  So I had to find the JBoss property to tweak to fix that.  Next problem wound up being that the default org.jboss.ws.soap.SOAPMessageImpl did not implement the setProperty method causing an UnsupportedOperationException.  Awesome.  To try to fix that issue, I wound up trying the following (in different combinations):

  • Upgrading JBoss to 4.2.1.
  • Upgrading JBoss WS to 2.0 with JBoss 4.2.1
  • Trying Java 6 as JAX-WS is in the standard JDK with both JBoss 4.0.5 and JBoss 4.2.1

With all of these combinations, I kept running into class loading issues and little help on the web.  After much frustration, I said to hell with this, how can I do it in ruby….

SOAP4R to the rescue

SOAP4R is the best know SOAP library for ruby and the gem is easily installed

> gem install soap4r –source http://dev.ctor.org/download/

Now I could auto-generate my stubs from the WSDL and put in my business logic.

Generating Stubs from the WSDL

In general, the documentation for soap4r is non-helpful, but by looking at the source code and googling around a bit, I was able to get the gist.  From the supplied SalesForce WSDL, I was able to quickly generate my stubs:

require ‘rubygems’
gem ‘soap4r’
require ‘wsdl/soap/wsdl2ruby’
DIR = File.dirname(“.”)
gen = WSDL::SOAP::WSDL2Ruby.new
gen.basedir=File.dirname(DIR)
gen.location=File.join(DIR,”AuthenticationService.wsdl”)
gen.logger.level=Logger::DEBUG
gen.opt['classdef'] = “SforceAuth”
gen.opt['client_skelton'] = nil
gen.opt['servant_skelton'] = nil
gen.opt['cgi_stub'] = nil
gen.opt['standalone_server_stub'] = nil
gen.opt['mapping_registry'] = nil
gen.opt['driver'] = nil
gen.opt['force'] = true
gen.run

 Running this produces seven files:

File Name Purpose
SforceAuthServant.rb Stub class that is used for the implementation.  The server side implementation code will need to go in here.
SforceAuthenticationService.rb If you would like to run a standalone server, this will be the file that you run.
SforceAuthenticationService.cgi If you would like to use a web server (e.g. Apache) and CGI, this will be the file that you use.
SforceAuthenticationServiceClient.rb If you would like to have a client to test your code, this will be the file that you run.
SforceAuth.rb Class definitions for the request object and the response object.
SforceAuthMappingRegistry.rb Class used to map SOAP requests and responses to ruby objects.
SforceAuthDriver.rb Driver class used by the client to call into the server.

 

Customizing the Generated Ruby Files to Get A Working System

Of the seven files created, I needed three of them (the client, the standalone server, and the CGI script) needed to be executable.  To get them to run, I needed to set the executable flag:

> chmod +x SforceAuthenticationService.rb SforceAuthenticationService.cgi SforceAuthenticationServiceClient.rb

In addition, because I am using Ruby Gems to manage my dependencies, I needed to add the following two lines to the top of each of these three files:

require ‘rubygems’
gem ‘soap4r

To test the implementation, I started up the standalone authentication server (which listens on port 10080 by default) and called it from the client.

> SforceAuthenticationService.rb &

> SforceAuthenticationServiceClient.rb http://localhost:10080

If all is working, you will get a NoMethodError exception being thrown.  To remedy this problem edit the SforceAuthServant.rb file and on line 15, change the line from raise NotImplementedError.new to {:authenticated => true}.  Restarting the standalone server and rerunning the client will result in success.

Now, I just needed to implement the code to call the LDAP server.  First step was obtaining and installing the Gem for the Ruby net-ldap project.  Validating the username and password was as simple as putting this code into authenticate method for the SforceAuthServant class:

def authenticate(parameters)

ldap = Net::LDAP.new
ldap.host = “ldap.hmsonline.com”
ldap.auth parameters.username[0], parameters.password[0]
if ldap.bind_as(
    :base => “dc=com”,
    :filter => “(sAMAccountName=”+parameters.username[0]+”)”,
    :password => “”
)
  return {:authenticated=>true}
else
  return {:authenticated=>false}
end

end 

Again, restarting the standalone server and using the client (with some tweaks to send the right parameters over) validated that the service was working successfully.

Configuring Apache to use the CGI

Obviously, I want SalesForce to use HTTPS when sending usernames and passwords.  We use
Apache as our web server for SSL.  To get the CGI set up, I made sure that the directory with the files was accessible from the Apache configuration and then added a .htaccess file

Options +ExecCGI
AddHandler cgi-script .cgi

Restarted Apache and I was done.  The whole exercise took about an hour, and that was with me figuring out what was going on.  The soap4r team has done a great job making setting up and and deploying a SOAP service quick, powerful, and easy to manage.

Popularity: 18% [?]

Posted on July 23, 2007 in Uncategorized by Rob Di Marco1 Comment »

Was just reading an article at cio.com that talks about How to Recruit in a Hot Market.  One of the points they talk about is marketing your IT organization, mentioning that some large corporation employ full time marketers for their IT team.  But how is a smaller team to compete?  One overlooked method is how an organization can leverage open source to market their development team.

How Can You Be Marketing A Development Team?

First, everyone should take an hour and read The 22 Immutable Laws of Marketing.  I’ll wait…..

Wasn’t that an hour well spent.  Okay, now that we know what marketing is and what to think about when building a marketing plan, we can dig into marketing your IT team.

When you recruit, you are selling a product.  To be precise, you need to sell to the consumer (the qualified job candidate) that your product is one they should buy (they should work for you rather than working for someone else).  From our previous discussion on building teams, I know that you are looking to hire great developers so they will shortly have multiple job offers.  Heck, they may already have a job and not be actively looking (lack of awareness of your product).  So your competition is fierce.  One way to compete is on price (in this example, by offering a higher salary).  But most discerning consumers are also concerned about the quality of the good and how satisfied they will be with it.  This is where your marketing plan kicks in.

What Must Our Marketing Plan Communicate

We want our consumers, potential hires, to know:

  • That a stellar product exists in the form of a great IT team
  • That it is available to them as positions are available
  • That they will be satisfied with their purchase as others who have bought in continue to enjoy their work.

So how can we let our customers know about our wonderful product.  Well the traditional way is by posting classified ads online.  While that may let some people know of the availability, it will attract only those that are looking for jobs (missing candidates that do not know they should be looking) and does nothing to help with the other two bullet points.

How Does Open Source Help

If your company either sponsors an interesting open source project or, at a minimum, encourages developers to submit patches and improvements back to open source projects, it can serve to notify the development community about what your team is doing and the quality of work that is going on.  It makes people realize that there is something interesting brewing in your company and can easily drive people to your site (a fair percentage of requests to Health Market Science’s home page come from http://jackcess.sourceforge.net/).

Now Leverage Your Superstars

Now that people can look at a bit of your work, you can encourage your team to speak at conferences and user groups about the technologies.  Again, it helps to spread the brand name for your IT team, make potential candidates aware of what you are doing, is rewarding to your current team, and costs little to nothing.

In a future blog post, I’ll talk about how to find projects to open source and how to try and sell it to superiors (I know that I have not been as successful in the selling as I would have hoped, but I do believe it matters). 

Popularity: 9% [?]

Posted on July 19, 2007 in Uncategorized by Rob Di Marco3 Comments »

Ever thought of working at a startup?  Reading TechCrunch articles and wishing that you could be part of the fun?  Wondering what information you need to make a decision?

When considering joining a startup, here are the questions that I want to satisfactorily answer before making a decision.

Position Questions

  1. Will I be able to effectively partner with the other team members?
  2. Will I get along personally and professionally with the other team members?
  3. Do the other team members have complementary qualities to me or will we all be trying to fill the same? 
  4. Can we develop a shared vision?
  5. Can we disagree in a constructive manner?
  6. How will I get started at the position?  Would there be a trial period?
  7. What will be my roles and responsibilities in the short, mid, and long term?
  8. What will I be responsible for and what will other team members be responsible for?
  9. How much influence will I have over product and company direction?

Compensation Questions

  1. How will I be compensated?  How much cash (both deferred and non-deferred), equity, and bonuses.
  2. Is the equity being offered fair for my position and the state of the company (take a look at this hiring plan equity suggestion from Venture Hacks)
  3. How many outstanding shares are there and how many have been dispensed?
  4. How long will salary be deferred?

Company Questions

  1. Who do you think your competition is, both in the short and long term?
  2. How will the company differentiate itself from these competitors?
  3. What is the marketing plan to raise awareness of the product?
  4. What is the product development plan?
  5. When will releases occur and what will be in them? 
  6. Are the schedules reasonable from both a technology and market view?
  7. What is the upside opportunity for the company?  How likely is that upside to be realized?
  8. How much protectable IP will be available?
  9. How good is the current team?
  10. What gaps exist on the team and when will they be filled in (e.g. VP Marketing)?
  11. Where will the company be located and is there a plan to move as we grow?
  12. How susceptible is the company to changing fads in the VC marketplace?

Financial Questions

  1. What is the financial projections for the company? 
  2. What will the cap tables look like after all investment is in?
  3. What will be my equity position, taking into account preferred shares already granted and those that are planned for future investment?
  4. What are the revenue opportunities and when will we start seeing revenue?
  5. What is the proposed exit time frame?
  6. Who would be potential acquirors?

Introspective Questions

  1. Do I feel comfortable with the timing of taking this position?
  2. Do I have the support from my family?
  3. Am I more scared of failing or of missing a great opportunity?

Popularity: 14% [?]

Posted on July 9, 2007 in Uncategorized by Rob Di MarcoNo Comments »

Much has been made about Yahoo and Google’s attempts at next generation social networks.  In addition, companies like News Corp and NBC/Universal are trying to build a YouTube competitor.  Despite having good funding sources, I’m pretty skeptical about these companies (especially the News Corp/NBC video site) ability to create a truly popular and innovative social network.

First, you have the Innovator’s Dilemma (any current or potential entrepreneur NEEDS to read this book) problem; big companies are great at producing evolutionary improvements to technology, but have a really, really hard time creating innovative products.  This stems from a couple of factors including:

  1. Great Expectations Lead to a Fear of Failure– Google is expected to release great products.  If they try to release an innovative social network and it bombs, just think of the newspaper headlines.  “A Real Google Bomb” .  ”Google Losing the Magic Touch”.  Everything has to be damn near perfect before you can go into a public beta.  Also, the application has to be comprehensive from day one.  Myspace.com had the luxury of focusing on making a product useful for bands to self-promote before being a place for any idiot to create a site.  Facebook.com could focus on making a place to try to scope out cute chicks before becoming a development platform.  A Yahoo or Google would not have the luxury of having those growing pains.
  2. Competing Priorities – Think about the now famous Peanut Butter Memo at Yahoo.  Even at a large company, there are only so many projects that can be a priority for development, marketing, corporate, and operations.  To justify the investment costs across the company for a major new innovative product is often too risky.  For the News Corp/NBC Universal video company, the competing priorities that the focus is trying to maintain a legacy business model (television sponsored by advertising) as opposed to a better user experience.
  3. Legacy Systems – Both Yahoo and Google have social networks already.  How do they put something new out there without pissing off legacy customers?  Very, very hard (maybe impossible) to do.
  4. Bureaucracy  – At any company, the bigger it gets, the more approvals it takes to make any kind of product or release.  These take time and make it harder to respond to customer needs.  The impact when trying to build a community site is gigantic.  Unless you can be nimble enough to quickly respond to the community, you may never reach critical mass.
  5. Too Many Cooks – I think this could be a huge issue for the News Corp./NBC Universal site, but it is a factor with any big company.  When too many people feel that they need to add their input about product direction, it tends to slow down development cycles and reduce innovation potential.

If a next generation social network is to be built, my bet would be on Google/Yahoo acquiring it (a la YouTube) rather than building it themselves.

Popularity: 5% [?]

Next Page »