Tuesday, May 6, 2008

Starting an Business as a F1 Visa Holder

Hi,

first of all, sorry if I'm not emailing the correct person. But reading your reply to this topic, I think you can counsel me a little bit.

I'm an international student (I have been here for 1 year) and I have a relative, not yet a US resident, but one who said he can help me create a uISV. He somehow owns his how company, but not a uISV. It's not like I don't trust him, but I don't want to be taken advantage of. I'm a proficient programmer but I know nothing in this matters.

My idea is to re-buy the company from him when I will be capable of doing so. 

Do you think it's possible (he lives in Nebraska)? Should I be careful? I mean I don't even know anybody to talk to about this. So I will greatly appreciate your help.

Thanks a lot.

Sorry for the delay in answering your questions.  My e-mail tends to stack up until I scratch out enough time in my schedule to respond.  Besides, your question was interesting enough I actually starting researching H1Bs, F1s, 1099s, etc.,  Here is a summary:

Keep in mind, I am not an attorney or CPA, and the standard disclaimer should apply -- you should seek qualified legal opinions (mine isn't). Unfortunately, you might have trouble locating an attorney to help because this isn't a run-of-the-mill immigration issue.

There aren't any easy, common ways to for a person on a non-immigrant visa to start a company in the US.  Your relative seems to be violating the terms of his non-immigrant visa, but likely the government will never pursue revoking your relative's visa.   

Ok, lets keep going.  I will cover three separate topics:

  1. What the law says (in layman's terms)
  2. What H1-Bs and F-1s do in reality
  3. What I would do

What the Law Says

You say you are an international student, so I will make the assumption that you are currently attending a school in the U.S, on F-1 visa.  You probably already know:

  • Self-employment on F-1 or H1-B  is not allowed.
  • You cannot start an S-Corporation; All shareholders have to be U.S. citizens or Permanent Residents (green card holders).
  • You can invest passively in U.S. enterprises or securities. 
  • You can start a company such as an LLC (Limited Liability Company), but you can not work for it -- your involvement has to be passive.  Ownership of an LLC or any other business presumptively suggests that you have management responsibilities...is working for the company which will put your visa in jeopardy.  
  • From the standpoint of tax law, there is nothing that prohibits a non-immigrant from operating a sole proprietorship.  However, a sole proprietorship operated by an F-1 (or H1-B) visa holder is a gray area, which constitutes unauthorized employment and provide grounds for revocation of F-1 (or H1-B) status.  However, in practice, CIS seems to be uninterested in this issue.

You probably already figured this out, which is why you are looking at a relative to help.  But if he or she isn't on an immigrant visa (green card holder), they may not be in a better legal position to start the company.  More importantly, your relative seems to be openly violating the conditions of his visa. 

Interestingly enough, you might be able to work around the situation with a creative lawyer:

... Often the issue is resolved by having a straw person own the shares, or be the member of the LLC, and the alien visa holder having an option to buy.  LLCs are so flexible, however, that it may be that a creative attorney can resolve this for you quite easily.  (source).

I think this is what your relative is hinting at. 

What H1Bs and F1s Really Do

While most people on non-immigrant visas follow the letter of the law, I could not find one case where an F-1 (or H1-B) visa was revoked because of working outside the conditions of their visa.  Quite the contrary, I found many postings on the Internet relating to filing tax returns and dealing with W2 and 1099s received from consulting (most were small amounts of income). 

Of course, you have to be cautious here.  Most of the advice is given out by CPAs (accountants) who have studied tax law, not immigration law.  The IRS is only concerned that you file and pay your taxes.  They will not report you to the immigration authorities (which is one of the reasons why so many illegal aliens are able to overstay their visas and work for so long without any adverse problems).  

Keep in mind, that this would most likely come to haunt you when you applied for residency or H1-B -- and you really, really need to talk to a qualified immigration attorney. 

What I Would Do (If I Were in Your Shoes...)

First let me digress for a moment. 

You want to start a mISV.  I would give you the same advice I would give anyone who wanted to start an mISV -- don't waste the time and effort trying to register a legal entity until you have a product.  Work on creating a working product first.

How long is it going to take you to write the software?  Six months?  A year?  Why pay $300-$500 for registering your business up front, having to maintain a bank account, filing tax returns, state tax returns, and don't forget telemarketers who sift through government databases... 

Secondly, most mISVs don't make lots of money when they first start to sell a product.  When adjusted for the time spent producing, supporting and marketing the product, most mISVs make income that is usually less that minimum wage.    

My advice:

If I were you, I would work on the product idea.  Get it up to a saleable point and then just sell it directly through a payment service.  They will send you a 1099 at the end of the year. 

Then, if it looked like the product was going to make a significant amount of money, I would suggest that you then form an LLC with at least one member (U.S. citizen or permanent resident) in addition to yourself and designate the other member as managing member ( so you will simply be a passive investor ).  Then you can elect to pay taxes as a partnership and have partnership's profits and losses flow to you.

On the other hand, if you do decide to partner with your relative, I would definitely seek legal advice.  I would only proceed if the the contracts were iron-clad and addressed who has ownership of the product, source code, etc.,

In any event, good luck with your venture. 

Labels: , ,

Friday, April 25, 2008

Wt: C++ Framework Evaluation

I blogged a while back that I was evaluating various web platforms for a my projects.  Well, tonight I began to seriously evaluate the Wt (pronounced witty) C++/Ajax framework.  I've decided not to use the library for one simple reason -- the licensing terms are cost prohibitive.

I had already floated Wt to a client as a possible alternative (recovery plan) to a massive Java/JSF project that was nearly a year behind schedule.  The leads were receptive to the idea so next on my agenda was to seriously evaluate it, generate some applications and mock up a demo.

First, let me say that Wt it is an awesome idea, and it is great implementation.  It leverages boost::asio (asio was included in boost with version 1.35).  Out of the box, it works with apache, fastcgi, or an extremely lightweight httpd server. 

In a nutshell -- you write your application by cobbling together widgets much in the same way you would write an application in Qt.  The underlying technologies (HTML/XHTML, JavaScript, CSS, Ajax, Forms, DHTML, etc) are abstracted so you concentrate on adding, say a button widget rather than coding up an HTML form that contains a button, and code to handle the post... You simply add a button widget to your container class and the HTML, JavaScript and forms are generated automatically at runtime.

While the examples are somewhat terse, they do showcase the possibilities -- with some effort in developing your own widgets, you could have the coding efficiency of Ruby On Rails with the speed of C++.

The framework is licensed in a dual licensing scheme.  They freely grant you a free GPL license.  However, the commercial license is € 599 per year, per developer.  At current exchange rates that is nearly $1000 per year, per developer.   

I don't mind paying for a license, and I often encourage my clients to purchase products like RedHat or MySQL.  That being said, I simply don't like purchasing licenses that expire, where you are locked in. 

What happens when you develop a 1MLOC application and the dollar continues to fall in relation to the Euro, and they want to raise their prices you are effectively a hostage.

What do you do?  Rewrite/port the application at a tremendous cost?  I've seen companies held hostage by framework providers before and really don't want to be in the position. 

Labels: , ,

Wednesday, March 26, 2008

Painless Schedules Revisited

"If it takes one woman nine months to make a baby, all we need is nine women and we will have a baby in one month." -- anonymous project manager.

This is a preview only. Click Download Now to download the template.After being sick and unproductive for the last few weeks, I decided to refocus on getting a shrink wrapped product out the door.  What I needed was a list of tasks, or better yet a schedule to keep me motivated (and maybe I could see tasks I could farm out to other coders).

Of course, I reached for the biggest time management hammer I could find -- Microsoft Project.  I quickly downloaded the Microsoft Solutions Framework (MSF) application development project plan template-- a project template that contains outlines Microsoft's heavyweight process in detail.  When I adjusted the start date to today, the entire project stretched out into the second week of May 2009

The BossThe pointy haired manager in my head shrieked, "No. No. No. That won't do. We must ship sooner."  I sighed and started editing to make the schedule more sane.  At that moment, I became acutely aware of how much more productive a solitary developer can be when isolated from corporate bureaucracies and six sigma philosophies.

  • Project Kick-Off?  Deleted.  I don't need to define project rolls or form a team.  No donuts or bagels for the team.  (-6 days).
  • The Envisioning Phase?  I know exactly what I am going to build and I don't need 44 days to define, review, and collaborate on a vision/scope document (-44 Days).

Now, that pulled the end date into to January. 

I'm feeling the kind of elation that comes from warping the laws of the universe and bending time to my will.  I pause and imagine the possibilities.  I briefly envision myself as a tyrannical project manager, except I hate meetings more than I love telling people what to do.   I press onwards.

  • Planing.  36 days for "User Education?"  Nah, my users are the smartest in the world.  After a few deletes, planning is down to 2 days -- I need a functional spec after all (it is basically written so this is just padding). 

After cutting out the endless meetings and collaboration milestones, I ended up with a schedule that still didn't make sense.  Clearly there had to be a better way...

Now for the Hard Part...

Developers have advocated many different approaches to software guestimation.  Joel Spolsky originally recommended "Painless Software Schedules," (a simple schedule with lots of small tasks in Excel) but has since changed his recommendation to follow, "Evidence Based Scheduling."  Mix in development methodologies such as Agile and the picture gets murkier.

I chose to merge various scheduling/development methodologies into a set of rules I could afford to live with, based around a sliding two week window:

  • Since I'm not good at estimating software tasks down to the minute, I've decided to schedule firm commitments four weeks out (this iteration, plus the next), where I will enter estimates down to the hour.   Past the four week window, I will simply schedule features and milestones. 
  • Firm 2-week iteration schedule.  Every two weeks I have an internal release milestone.  Version 0.0.1 is scheduled for release this Sunday, March 30th.  Version 0.0.2 is scheduled fro April 13, 2008.  Each milestone has specific features associated with it.  According to my schedule, Release version 1.0 will ship the week of May 25, 2008.
  • I've decided to use FogBugz to track my four week estimate window.  I'm basically pulling things off my Project generated Gantt chart and adding them to FogBugz.  I am curious to see how well I do against my timed estimates.

The only unknowns at this point are distribution and marketing, but those will be resolved in time.

Labels: ,

Saturday, March 22, 2008

Google Analytics 101

Today, I'm concentrating on fixing some deficiencies on my web sites.  I've decided to add the new tracking script to all of my web pages (rather than just my blog).

Google Analytics is a free measurement tool that has over 80 report.  I found two solid presentation slide decks that are a fantastic introduction:

... and another one:

Labels: , , ,

Friday, March 14, 2008

The Nicest Rejection Letter Ever

Last week I signed up for the iPhone Developers program. Today (almost a week later), I received a an email from Apple regarding the status of my enrollment. It has to be the nicest rejection letter I have ever received:
Dear Registered iPhone Developer,

Thank you for expressing interest in the iPhone Developer Program. We have received your enrollment request. As this time, the iPhone Developer Program is available to a limited number of developers and we plan to expand during the beta period. We will contact you again regarding your enrollment status at the appropriate time.

Thank you for applying.

Best regards,

iPhone Developer Program

Labels: ,

Sunday, January 13, 2008

Looking Back and Looking Forward

In 2007, I decided to start a uISV/Consultancy.  My goal was (and still is) very simple: generate income from contracting/consulting which will be used to sustain my uISV development efforts.

I would work on the day for clients, and at night I would frantically pound out code.  Six months have gone by.  How well have I done?

Looking Back

Last year (2007):

  • I formed a corporation (Agave Mountain, Inc) in the State of Delaware.  While I believe that most uISVs and consultancies are formed as sole-proprietorships and LLC's, I wanted a corporation and was prepared for the additional headaches (annual franchise tax return in DE, plus a corporate tax return). 
  • I also registered my corporation as a foreign corporation in the state of Minnesota (where I am now).  Your corporation can only be incorporated in one state, and it must qualify to do business (register) in each state it has operations. 
  • I did the above primarily for the following reasons:
    • Most accountants will recommend that you incorporate in the state where you reside.  This is essentially the best advice.  However, I have moved frequently in the past several years for contracting, and within the past several years I have up and moved to/from Texas, Connecticut, Georgia, and most recently Minnesota. 
    • I decided it was easier for me to keep a corporation in Delaware, and just register to do business in a state and withdraw it if I no longer do business there.
    • If I don't do any business I can "put the corporation on the shelf."  I pay the annual franchise tax ($56) per year in DE and the corporation gets older.  A corporation's age is factored into credit decisions.  Additionally, I will be able to jump on business opportunities in the future much quicker and with less  hassle.
  • $24,500+ in trade lines.  Most surprisingly, I now have an Office Max net-30 credit account, and 3 major credit cards, entirely in my corporation's name.  Go figure.
  • My corporation has signed up its first major client.
  • Established a website and blog (this one).
  • I have very little workable code written, only prototypes and unit test code.  I have some simple specs.
  • I've investigated several web frameworks, toolkits, etc., and here is a summary:
    • I eliminated the following platforms/toolkits:
      • Ruby on Rails might have a following, but it has some serious design/installation issues (no shared hosting) and other issues pointed out by Zed's public meltdown.
      • Java is out because I simply don't like it, and never took the time to learn anything more than a cursory look.  If I decide to part out some of the work, Java guys are among the most expensive.
      • Python has some installation issues for a saleable product.  
    • That leaves:
      • ASP.NET/C#/.NET
      • PHP
      • C/C++/FastCGI/WT/Qt
      • a mishmash of Perl, C, PHP, etc.

Goals for 2008

This year:

  • By the end of the year I want to have my product concept designed, constructed, tested, and deployed.  January 1, 2009, I want to be actively selling the product and generating revenue. 
  • My main client will take preference, but every other waking hour is going to be focused on getting a product up and out the door.  Ambitious, but possible.

Labels: , , ,

Sunday, September 16, 2007

Paperless Office - Scan Forward

The easiest way to begin a paperless office is to implement a "scan forward" approach.  The idea is simple: purchase a scanner, and then pick a cut-off date, after which all new documents will be electronic.

The benefit to this approach is that you only scan existing paper records if they're used.  If documents don't get scanned after a year they can be archived or destroyed.

Choosing a Scanner

For obvious reasons, the scanner is the most important component to a paperless office setup.  Look for a scanner with the following options:

  • ADF - Automatic Document Feeder/Automatic Sheet Feeding.  Using a flat bed scanner is tedious since you will have to manually swap out the paper. 
  • Duplex - In addition, you want a scanner with duplex -- the ability to read both sides of documents.  Some software packages are smart enough to merge two one sided scans into a single pdf file, but it is way more convenient if your scanner does this automatically.

I can't tell you how nice it is to load up the scanner with a 25 page, double-sided document and walk away.

I could only find two scanners with these features in my budget: the HP N6010 ScanJet (poorly rated on Amazon) and the Fujitsu S500M.

I ended up purchasing the Fujitsu S500M ScanSnap.  It is a duplex, color scanner capable of 18 pages per minute.  So far it works wonderfully, even with credit card receipts. 

Choosing Shredder

I wouldn't waste too much time dickering about which kind of shredder is best.  The following features are pretty much a necessity for me:

  • "Confetti" cut.  Smaller pieces are better.  
  • The ability to shred credit cards and CDs, and eat staples.  If you can shred a credit card, a few sheets of paper won't bother it.

Also, unless you want to shred as you go, I suggest staged shredding.  I have a plastic file box that I dump papers to be shredded.  When it gets full or enough time goes by, I shred them at one sitting.

How to Begin

Next, start to define and create your own process for dealing with paper.  I would suggest something similar to what I do.

I now open my mail next to a 50 gallon trash can.  I try to throw away as much as possible.  Envelopes, catalogs, flyers, brochures and advertisements are immediately and automatically thrown away.  The application part of the credit card solicitations are separated to be shredded.  Roughly 90% of my mail now ends up immediately in the trash or shredded.

Next take the remaining paper and decide what to do, and then take action.  I view each piece of paper on my desk is something I haven't done yet.  When it is done, it is in the trash or shredded.

  1. Scan an pay bills and invoices (I usually scribble the date and check # before scanning);   
  2. Bank statements and credit card statements should be scanned and reconciled immediately.
  3. For magazines, I will take some time to read them, or set them aside.  I started putting a purge date on the front with permanent marker.  If I don't read them within two weeks they are gone. 

Also, for reciepts:

  • The IRS says you don't need receipts for purchases under $75.  B.S.  Scan them in and save them.  One day you may (possibly) thank me. 
  • Every business purchase receipt is scanned in and organized after I purchase.
  • Other receipts, grocery, gas, restaurant, credit card receipts are thrown away unless it is a major purchase or a reimbursable expense.

Labels: , , , ,

Thursday, June 28, 2007

Painless Software Schedules Part I

Each month, I decided I would dedicate myself to improving one simple area of my professional life. This month I have chosen (drum roll please): software scheduling and estimating. I really suck at it and I need to improve.

As a software developer, I hate schedules. Making them are a pain, and most of the ones I have seen are pretty much worthless.

When I was a contractor at fortune 500 company (I won't name it), scheduling was especially ridiculous. It was at that contract that I learned how not to manage a software project.

I swear, all of this actually happened:

  • When there was a risk of schedule slippage, the manager would have "one-on-one" meetings (that would last 30 minutes or more) with each of the programmers individually. More specifically, these "one-on-one" meetings were also attended by the technical lead which essentially made them a threesome. The lead would produce a list of tasks and slide it across the table for you to look at, while the manager would ask for each task, "when is this going to be done?" The team lead would glare at you and then write down your answer. If you asked which one needs to be done first, he would reply, "they are all important. They all need to be done."
  • When "crunch time" came, the manager would nervously demand twice a day "one-on-one" (threesome) meetings. EVERY DAY. Thankfully this stopped after the 3rd release.
  • To maintain a sense of urgency the manager hid the real release date, and made up a fake release dates. His logic was that even if they slipped he could still make the "real" release date. Unfortunately, this constant stream of unattainable fake milestones and failure sucked the enthusiasm from the permanent employees.
  • The department employed a ticket/bug tracking software that had the ominous feature of producing evil .csv files. These .csv files could be imported into an excel spreadsheet where sanity was replaced with charts. Number of closed issues was something measurable, so it became the yardstick everyone was measured against. This caused some very predictable problems:
    • By itself this wouldn't be bad except that the task, "debug and patch the Hot-plug PCI kernel driver (and back port to the 2.4 kernel)" was measured the same as "misspelled the word disk drive on dialog 3". One task took 3 weeks, while the other took a total of 10 minutes. The developer who debugged and patched the kernel driver was (in the eyes of the management) 1/1000th as productive as the developer who wrote buggy code.
    • More importantly, the most productive code was seen by the other developers as the most adept at creating bugs. Of course, they would be honor bound to report the bug and fix it. On task may result in to other bugs. A developer who was diligent in testing their code before checking it in would get credit for one fix. A developer who broke the build and fixed it would get credit for 2. If their bug fix didn't work and another. Worse, testers were unaware what bugs had been entered, so one bug would be reported multiple times.
    • Developers argued and negotiated with testers to keep unfixed bugs under the table (or press them to enter them as new issues and not reopen existing ones).
    • Developers also would monitor the new bugs and immediately claim the easy ones.
  • Next, the group was reorganized. After two project managers were added, the ratio of developer to manager grew to one manager for every two developers.
  • To coincide with the new project managers, the capabilities of the bug tracking software were "improved," offering even more information for spreadsheets. Not only was each task afforded a due date, but suddenly each task had a scheduled due date (the date that the developer committed to closing the ticket), and last updated date (the last date that the developer modified the ticket). Developers had to respond to new tasked that were assigned to them within short period of time. If they scheduled the due date past the project manager's due date, they had to explain why. Also, each week a spreadsheet presented all of the outstanding tasks where each developer was publically grilled by three project managers in turns. How cool is that?

I really didn't shed any tears when during the second wave of layoffs; I was one of the consultants walked out the door. I took a week off and within another week I was on a new contract with a significant raise.

So now I have dealt with the trauma of being whipped by Excel wielding project managers, how can I improve my estimating to make dealing with clients more of a science rather than a guessing game?

I've decided to utilize the simplest methodology for generating realistic software schedules, namely that espoused by Joel Spolsky. The methodology is relatively simple:

  1. Use Microsoft Excel. More specifically, don't use Microsoft Project.
  2. Keep it simple.
  3. Each feature should consist of several tasks.
  4. Only the programmer who is going to write the code can schedule it.
  5. Pick very fine grained tasks. They should be measured in hours, not days.
  6. Keep track of the original and current estimate. Joel estimates that programmers can become very good schedulers with about one year of experience.
  7. Update the elapsed column every day.
  8. Put in line items for Vacations, Holidays, etc. (for long schedules). Should be a feature for Vacations and such.
  9. Put debugging time into the schedule.
  10. Put integration time into the schedule.
  11. Put buffer into the schedule.
  12. Never, ever let managers tell programmers to reduce an estimate.
  13. A schedule is like wood blocks. (get a bigger box or remove some of the blocks).

Labels:

Wednesday, June 27, 2007

Microsoft Empower for ISVs

About a week ago, I signed up my µISV/Consulting Practice for the Microsoft Empower program, and today I gleefully received a package from Microsoft which contained my new MSDN subscription. In my opinion, this is one of the best offers ever for startup companies. For $375 (just a little under $400 after taxes and shipping), you will receive a thick stack of DVDs which cover the most desirable (and not so desirable) Microsoft software ever produced for an ISV: Office, Visual Studio, Visio, etc.

Of course, there is a catch. You have twelve (12) months to develop a software package and your licenses expire, forcing you to purchase the products retail or stop using them.

In preparation for today's festivities, I reinstalled the Microsoft Media Center OS on my laptop which cured some of the significant performance degradation I had been experiencing (lethargic boots, slow shutdowns, and worse extremely poor battery life). Of course, it took quite a while to eradicate all of the crap that comes bundled with an HP laptop.

After putting the DVDs in the included CD binder, it was time for second phase of my laptop spring cleaning. I promptly installed: Office Ultimate 2007, Visio, Visio for Enterprise Architects and Office Groove.

I uninstalled VM Ware in favor of Virtual PC, primarily because virtual PC doesn't take up any resources until you want start the virtualization software. VM Ware, on the other hand, has services that start at boot up and run all the time. I've already installed Fedora Core 6 and am now installing Vista under Virtual PC.

Labels: