-
Get a monthly update on best practices for delivering successful software.
What are your legal concerns?
If you are a startup or haven’t used an outside firm to develop software for you there are 3 basic documents you need to consider – a Mutual Non-Disclosure Agreement, A Master Services Agreement and a Statement of Work. This is from a business person’s view, not an attorney’s.
Mutual Non-Disclosure Agreement – the purpose of this document is to protect your idea, i.e. your Intellectual Property (IP). If you feel your idea is unique or if you will be discussing proprietary things during initial discussions, this should be executed before sending detailed requirements to the software firm. It should be mutual, because it is likely the software development firm has as much or more IP than you to protect and you want them to use that to your benefit.
You can find sample documents on the internet, just make sure the one you select has all of the standard exclusions, including reponsibilities in the event a court requires one of the parties disclose confidential information.
Master Services Agreement (MSA) – although small one time projects can be handled by a Statement of Work (SOW), for long or ongoing engagements you should have an MSA in place.
Generally, a MSA will include all of the standard legal terms related to the engagement, but none of the specifics of a particular project. This includes definition of who owns the code and IP from the engagements. This is extremely important. Make sure your attorney is involved, ideally one experienced with software development contracts. One way to tell is to look at the IP section. If it doesn’t reflect modern practices that involve incorporating Open Source or low cost proprietary modules into the code, you need to find more up-to-date wording. The software development firm cannot grant you IP for those modules since they aren’t the owners. They can make sure you have the proper "use" licenses and make sure they are implemented in a way that doesn’t jeopardize your IP for the custom portion of the code.
It is imperative that this be defined in the MSA, or in the SOW if no MSA is in place. Not all states handle code ownership the same in the event it isn’t specifically addressed in a contract. Sometimes it defaults to the client and sometimes it defaults to the developer. A firm I was talking with recently didn’t have this defined and the software company decided they should have ownership of the code.
The MSA should also address such things as: type of services to be performed, cooperation responsibilities, project management responsibilities, term, termination procedures, non-exclusivity, fees/payments, non-solicitation, publicity, jurisdiction and survivorship.
If it is likely that you will be working with the software firm on multiple engagements or if they will be involved in ongoing support of the resultant application, you should do the two step process of an MSA and SOW. There are two main reasons for. First, it covers any gaps for work done between or outside of existing SOWs. Secondly, it eliminates the need to include heavy legalese in each SOW. This speeds the approval process for subsequent SOWs and reduces legal review fees. In general, the less legalese in the SOW, the clearer it is for both sides.
Statement of Work (SOW) – The SOW should cover the specifics of the work to be done on a project – the features to be developed, the costs and the governance process at a minimum so that you know if you’re on track as the project progresses and you know when you’re done. It also should include any terms that are different that the standard terms in the MSA if one is in place. If there is no MSA in place, you need to add a more comprehensive Terms section.

When it comes to monitoring servers and processes in production, there is quite a few open source tools: nagios and hyperic are proven solutions for enterprise apps. Monit and god are the favorites of ruby/rails community. God has been around for a few years now and most critical issues with god seem resolved. So, I decided to use that on my project.
If you've worked with any deployment related stuff before, you know that it hardly ever goes as planned. With few machines involved, few processes, file/folder permissions and process permissions, there is bound to be things that will take longer. God is no different. And no wonder you will find wiki/forum posts from folks who've been thru it. I had my share of those and in the end I am happy with the config I found.
Here is a journey as it went:
Continue reading »
I've been working on a project recently that involves a desktop AIR application running (mostly) offline with a local SQLite database. Occasionally the app will synch collected data remotely with a central server that will have an administrative and reporting web front end. Various parts of the AIR application involve filling out a series of multi-choice questions. Considering that the data will be used by two different systems, and anticipating that questions and answers may want to be updated from the admin portal, it seems a good choice to make things as dynamic as possible based on data from the db. It's not a difficult problem to solve, and I've done it a time or two before, but since it's fresh in my head and the code is in front of me, I'm going to use a couple blog posts to document the strategy. The SQL presented is pseudo code and will not actually execute.
Part 1 is getting the database structure in place.
Topics: dynamic, multi choice, programming, questions, table driven
When I was 13, I used to write these monstrous spaghetti code programs in 6502 assembler (even I knew at that tender age that anything named BASIC sucked). I had little craft or wisdom back then, but even I knew that as my programs got bigger and more featureful, they also got more brittle and hard to maintain. There had to be a better way.
At 15 I started taking college courses and discovered the miracle of FORTRAN and PASCAL. These procedural languages had their own problems as they grew, with data structures getting mangled into invalid states as they passed from one procedure to another.
Continue reading »
Topics: OOAD
There are a number of approaches out there for validating the format of a URL input. Looking at the different approaches, the most commonly used and the quick & dirty one was of course the regex matcher approach. This is the regex solution which is easy enough to implement but I m not sure if would handle all the different possible scenarios. Regex is tricky (atleast for me
).
validates_format_of :url ,
:with => /^(http|https)://[a-z0-9]+([-.]{1}[a-z0-9]+)* .[a-z]{2,5}(([0-9]{1,5})?/.*)?$/ix
The other possible solution was to use the URI.parse method to determine if the URL is a valid url. This involves calling the URI.parse method passing in the url and checking if the class for the URI is a valid one.
def validate
begin
uri = URI.parse(url)
if uri.class != URI::HTTP
errors.add(:url, 'Only HTTP protocol addresses can be used')
end
rescue URI::InvalidURIError
errors.add(:url, 'The format of the url is not valid.')
end
end
There’s probably one caveat to the above approach. Sometimes, URI.parse returns a URI::Generic which is the parent of the other URI types in which case even though the URL in question could be a like a valid non HTTP URL, our validation would fail.
The solution I came across most recently was this.
validates_format_of :url, :with => URI::regexp
I think it works great and is probably the best way to validate a URL in rails.

Is remote pair programming productive? Yes!
I have been successfully pair programming remotely almost every day for the last 3 years. It is very much like local pair programming with some minor differences.... OK. Some major differences, too.
Major
Instead of sitting down with your partner and sharing the same monitor and possibly the same keyboard, the screen will need to be shared virtually. There are many options including GNU Screen, iChat, Skype, yuuguu, yugma, and TeamViewer. Also, something like Google Talk or Skype should be used for voice chatting.
Minor
You know when you are talking on the phone that your attention is more focused on the conversation than when you are locally talking to someone? The same happens in remote pair programming. It is very intense and productive because both developers are extremely focused. You really need to remind yourself to take breaks, switch navigators, and go to lunch!
Topics: agile, Pair Programming
Pathfinder Development is sponsoring midVentures Launch, the Midwest's largest startup conference. The event happens September 28th, 2010 at the UIC forum. Aside from ferocious networking with Venture Capitalists, angel investors and other entrepreneurs, what does it offer? From the website:
Introduce your new product or service to an audience of industry professionals as part of our LAUNCH track. We’re accepting 25 companies for the chance to jumpstart start their product, to whom we’ll supply a 6′ table at the exhibition floor, a targeted audience of industry professionals, bloggers, media, and fellow entrepreneurs, and 3 minutes of stage time. Any company that has debuted a new technology application can launch it in the showcase.
Think your venture is better than the rest? Apply for COMPETE, where we’ll be selecting the top 25 start-ups to be judged by our expert panel. If you are accepted, then you’ll be given a table on the exhibition floor for free. The first round of judging is done à la science fair, with judges intermingling with attendees to watch your pitch on the exhibition floor. The top five will then be selected for a 3 minute pitch in front of the audience and the panel of judges, where they will undergo a second round of judging. The top five startups will take home over $100,000 in prizes courtesy of our sponsors.
One of the prizes is $5000 in work from one of the premier software product development shops in the U.S. -- Pathfinder Development.
So be there or be square. The startup scene in Chicago is heating up. Come and be a part of it.
Topics: funding, Startups, Venture Capital
Barcodes are the all-important middlemen of the modern retail experience, yet they remain almost completely invisible to consumers. Of course, the moment the flow breaks down and the code becomes unscannable, both purchaser and cashier quickly decide the whole thing is annoying and obsolete.
Nevertheless, barcodes are invaluable for passing around information. Although we usually associate them with products, they can actually encode any kind of data. Naturally enough, the more information you want to encode, the more dense the code graphic has to be, and the more you have to start worrying about the potential for slow and/or incorrect scanning. Most barcodes are the one-dimensional type you see on products and ISBNs, whose implementation dates back to 1949; they are widely supported but also prone to error. QR ("Quick Response") codes, created in 1994, are much more robust - they include error-correction (so you can smudge or obscure the code and it will still work), and are designed to be scanned very quickly.
Topics: Ruby on Rails

Finally a word from somebody who knows what they are talking about! I've read a lot of wild claims regarding the comparison of Canvas to Flash and even wilder predictions.
Tom Preston-Werner has actually converted a great Flash application, the GitHub Network Graph, to use Canvas instead. For one, that gives him credit to talk about the topic and he does so well at his post about the experience. IMHO it's the most sober cross-section of considerations related to these two technologies. Really, read it if this matters to you, you'll find a conclusion in it unlike most catch-phrase-throwing-time-wasting posts on this topic.
From my first opinion on using HTML5 in RIA from two years ago, the situation changed little in terms of standardization, but implementations of HTML5 have leapt in quality. Having said that, I agree with Tom's conclusion completely. So what Canvas can't deliver yet, I'll deliver it in Flash.
As my final word, I would like to share another, much deeper insight in software development strategy coming from Clifford Hall, author of PureMVC, who has 25 years of experience in the business. Ideas explained in his post remind us that there is a bigger picture that we should drive our attention to in order to put an end to the Sisyphean task of making these choices.
My wife has been a Venture Capitalist (VC) for some sixteen years. She's spent a goodly amount of that time in the Chicago area. In that time, the startup scene has changed tremendously. Back in the 90's most of the IT activity was around Fortune 500 companies, of which there are quite a few in the Chicagoland area.
The few startups that did percolate back then were facing dual handicaps -- there was a dearth of startup talent in the Midwest and most VC's held the opinion that to be successful, startups had to move to the coasts (preferably the west coast and within easy traveling distance of the VC's office). Even the VC's located in Chicago had to travel to the coasts to find interesting startups.
Fast forward 15 years and the scene has dramatically changed. There's both a deeper talent pool of technical and other skills that have startup experience. Partly
that's because there have been enough startups and small entrepreneurial companies in the Chicago area over the intervening years to build an experienced cadre of people who relish the startup environment and aren't afraid of flying free of the stultifying stability of the corporate paycheck.
But beyond that I've been impressed by the overall entrepreneurial culture I see in the IT community in Chicago. Everyone is working after hours on their business idea. It reminds me of the industrial revolution, in some ways, as expressed in the following quote.
The greatest invention of the nineteenth century was the invention of the method of invention.
-- Alfred North Whitehead
In much the same way the greatest innovation in the Midwest is a culture and spirit of innovation. Witness that Pathfinder Development is working on products for seven(!), countem, seven startups at the moment. Exciting times.
Topics: Entrepreneurship, Startups, Venture Capital
An interesting investment concept that ended in 2007. From the fund description:
The UX Fund is an investment experiment inspired by Jeneanne Rae and the Design Council. We believe that companies that deliver a great user experience will see it reflected in their stock price.
The fund is comprised of 10 companies that we feel do great user experience. We invested $50,000 USD (about $5,000 in each company) on November 1, 2006. Shares must be held for 1 year.
Did the fund make money? You can find the results here.
Since Pathfinder Development focuses on software based product development I get 40-50 inquiries a month from people who are looking for design and development help. This ranges from people who just have an “idea” to people with detailed requirements and screen mockups. Though most applicable to startups, regardless of the stage there are a couple of things we look for first:
1. What problem is your application solving?
2. How does your product solve the problem?
3. Why and how will people beat a path to your door for your solution?
4. What are your market differentiators (and are they sustainable)?
5. What is the market size?
6. What is your revenue model – how will you get paid and how will revenue scale over time – this needs to be specific, even if a guess - how many users or licenses and what is your revenue per user or license.
7. What will it cost to design, build, operate (legal, accounting), support, market/sell – support should include both providing customer service and continually enhancing the product to keep it ahead of the competition.
Forget how cool you think the application is. Think about who’s going to buy it and what they are willing to pay.
Continue reading »

I recently read a copy of The Design of Design by Frederick Brooks, author of the classic title The Mythical Man-Month. Brooks offers, in a series of short essays, perspectives and principles of design that will be as relevant and thought-provoking tomorrow as they are today.
I particularly liked his insight that design involves optimizing resources other than money. For example:
In team design, Brooks offers the advice of naming scarce resources so everyone is aware of them and how they can change. For example, if getting to market quickly becomes the top priority, time will take precedence over cost or extended function as the premium resource. It's important that everyone be kept on the same page.
Brooks offers that a key motivation for studying design is the fact that many designs are done by designers who are not the actual users of the product. Add to the mix the complexity of new technologies and geographical distribution of teams and methodology becomes relevant to outcome. Brooks challenges entrenched approaches that no longer work and offers a myriad of perspectives to improve one's approach to designing complex systems.
Topics: Design, design research
Having using Acl9 for some time, it was refreshing to see RailsCast's Ryan Bate's take on authorization: CanCan. Ryan put together a webcast for CanCan that you can checkout here. There have been some nice additons since this initial release so do checkout the latest documentation on GitHub. I won't go into what I dislike about Acl9. It's a good system, with a nice DSL for defining permissions. I'll just talk about some of the things I've enjoyed about CanCan. If you haven't explored the library, you should.
Continue reading »
Topics: rails authorization cancan ruby
Note: this is an OSX tutorial.
About every application with customers needs to send customers email. Some are newsletters, others are invoices, sometimes the application needs to send an alert. One thing is certain though - testing is a pain. I'm talking cross-client testing. Sure, it's easy to look at a webpage in IE7-8, Firefox, and Chrome - but it isn't as much of a no-brainer when it comes to looking at html emails in Yahoo, Aol, and Gmail. This post should help you do that.
Topics: email, html email, openssl, sendmail, Testing