The Blog at Jumptree, a guide to project management, business, coding and anything else that we can think of.

How to start a company in Maryland

DISCLAIMER: I’m not a lawyer and this obviously isn’t legal advice. This article is about our experiences on incorporating in the State of Maryland.

A smaller disclaimer: We incorporated Jumptree back in 2007—so the procedures might have changed a bit since then.

Also, we worked on Jumptree Project for a long time before we actually incorporated.

In fact, we already had a working alpha version before we decided to start up. Basically we wanted to be sure there was something tangible and not waste money starting something we couldn’t complete.

1. Decide on a corporate structure

There are several corporate structures to choose from—such as a regular corporation, an LLC, a partnership, etc…

If you have no idea what you’re doing then you really should talk to a lawyer or accountant. Or at the very least get one of those legal books or something.

This article deals with how to start a C corporation.

NOTE: There are two types of corporations, C and S. This designation determines how your company is taxed.

Basically in a C corporation, the company is taxed at a corporate rate. While in an S corporation, the profit (or loss) is passed through to the shareholders who then report the income or loss on their own individual tax returns.

By default, when you incorporate you are a C corporation (i.e. a regular corporation). To become an S corporation, you must elect the S status using Form 2553.

Please note there are other limitations to an S corporation and not every company can elect the S status. The laws regularly change on this so be sure you’re up to date.

Also note that you have to elect the S status soon after you incorporate because there’s a deadline for it.

2. The Maryland Checklist for New Businesses

Every state should have an online resource of what’s needed to incorporate. Here’s the Maryland Checklist for New Businesses.

This will give you a basic overview of the requirements for starting a business in Maryland.

NOTE: The Blood Tax (i.e. Personal Property Tax)

Before you startup, please realize this: Every Maryland stock corporation must pay a $300 fee regardless of whether it made a profit or loss—and you have to pay this every year.

So just be prepared to have enough money to pay this fee, or else you forfeit your company.

Some states might not have this tax, while others (e.g. California) has a much higher tax.

3. Check if the name is available.

The first thing is to see if your domain name is available. If example.com is taken, you could try examplecorp.com or example.net but you’ll probably always be upset that someone has the real domain. So take your time on this and find something memorable.

Once you’re sure, call 410-767-1340 to check if the name is available.

Also be aware that this name check only tells you if the name is available in the State of Maryland. It’s entirely possible that another company has this name in another state.

4. Decide how fast you want to apply

As of March 28, 2008 the total cost to startup in Maryland is $120 (a $100 fee + $20 organization & capitalization fee).

NOTE: The aggregate par value of stock (i.e. how much you’re putting into your company) must be under $100,000 or else the fees increase.

Of course if you have that much to invest then you probably don’t need to read this article and should ask your lawyer to handle it!

The regular application process takes 7-8 weeks while the expedited service is done within 7 days but costs $50 more. If you’re in a super-hurry you can go in person and get it done that day for $70 more.

If you go in person, be sure to bring checks as that’s the only way to pay. Since we were in a hurry we decided to just go.

5. Prepare the Articles of Incorporation

Go to Maryland’s State Department of Assessments and Taxation Forms and Applications page to download this form:

Articles of Incorporation for Stock Corporation form and instructions

Follow the instructions and fill out the form.

TIP: For “THIRD: The purposes for which the corporation is formed are as follows.”

We put a “…and anything else allowable by law” at the end of the statement as catchall in case we forgot anything.

TIP: For “SIXTH: The corporation has authority to issue _____ shares at $_____ par value per share.”

The par value is basically the lowest amount for which a share can be sold. To make things simple, we issued no-par value stocks. Also, we stuck to 5000 shares or else the filing fee would increase.

And just because you have the authority to issue 5000 shares doesn’t mean you have to do it at once—we only issued out 200 shares.

DISCLAIMER AGAIN: Seriously, these tips might not suit your business. So if you’re totally unsure what to do, please consult a lawyer or an accountant.

6. The actual day we went to file the papers

The directions are:

State Department of Assessments and Taxation
Corporate Charter Division
301 W. Preston St. Room 801
Baltimore, MD 21201

TIP: Bring quarters for parking.

Stuff to bring:

  1. Photo ID
  2. Checks (or cash) — And just to be safe, bring several checks because you don’t want to mess up and only have one check on hand.

When you get there, you’ll have to first get a name tag by signing in, showing the guard a photo ID, and telling them you’re going to incorporate a business.

Then go to the eighth floor and wait in line to see the receptionist. As I was waiting, I leaned against the wall and accidentally turned off the lights…yeah, that was embarrassing. So just be careful…

Next tell the receptionist what you want to do:

  1. Incorporate a business
  2. Get a certified copy of the articles of incorporation

TIP: Getting a certified copy of the Articles of Incorporation will cost $22 more but banks will need this to setup a corporate checking account.

The receptionist will then give you some forms to fill and tell you to wait in another line.

One form is the expedited application form and the other is an order form. Both of them ask for the mailing address and who’s applying.

Once you wait your turn, an inspector will examine your Articles of Incorporation and tell you how much you need to pay.

In total we paid:

  • Base Fee — $100
  • Org. & Cap Fee — $20
  • Expedite Fee — $70
  • Copy Fee — $22

Total $212

Then you just wait until they call your company’s name. We only waited about 20 minutes and we were done!

So that’s it. Now you’re legally incorporated!

Stay tuned because in my next series of articles I’ll discuss how to open a corporate checking account, applying for your Employer’s Identification Number, and some other stuff that we learned along the way.

Want a better way to manage projects and collaborate with your team?

Check out our Jumptree Project Management Software »

Active Directory And ASP.NET 2.0 Forms Authentication

I don’t know if I’m just the minority among the ASP.NET developers, but for years, I’ve never had to deal with the Active Directory simply because most projects that I’ve done before were in hosting environments where Active Directory is a luxury to have.

Things are different these days when it comes to support a product like Jumptree Project. Lately, we’ve had quite a few inquires from companies and government agencies where Active Directory authentication is the norm, and such it’s essential for them to link the users in their system with Jumptree together.

So how does a developer—who is not a network admin guru—setup such an environment to develop against Active Directory?

The Hardware

  • Machine A Windows 2000 Server — We will setup Active Directory here
  • Machine B Windows XP Pro — This will be our client machine where ASP.NET 2.0 will be used to authenticate against the Active Directory
  • Router — Connects Machine A and Machine B together.

Setting up Active Directory

Step 1: First you need to configure Active Directory.

Rather than reinvent the wheel, here’s a step-by-step instruction guide by Johannes Helmig that you should follow. Just make sure you reboot the server (Machine A) when you are done.

Step 2: Now to add a user account for our ASP.NET code later to test against. Go to Administrative Tools > Active Directory Users and Computers.

Step 3: Next, expand your domain name and then right-click New > User.

TIP: Copy down the name because you will need it for your ASP.NET Connection String, in my case, it’s NEMOHome.com.

Step 4: The next screen will ask for your first name, last name, full name, user logon name and pre-windows 2000 logo name. Simply entering a name like John Smith or whatever suits your taste.

Step 5: The last step is to create the password for this user account.

Just check the checkboxes User cannot change password and Password never expires for simplicity’s sake and click Finish when you are done.

That’s it for as far as setting up Active Directory goes. Let’s move onto our Machine B where the Windows XP Pro is.

Configuring the client machine

Step 1: On Machine B, right-click the My Computer icon, select the Computer Name tab and click the Change button.

Change Domain

Click on the Domain radio box, and enter the Domain name that was mentioned in Step 3. Click OK afterwards.

Now, you should have everything setup. Reboot the machine and when logging on enter the username that you added to the Active Directory using the domain that you setup earlier.

NOTE: For me, everything seemed to work at first. But after logging in, it started to hang—nothing was loading and the screen stayed frozen completely.

So I had do a hard reboot and use the local machine to log back in.

If that happens make sure you are using the servers IP and not the routers.

Open up your command prompt and do a ipconfig /all and take a look at your DNS IP Address.

In my case, originally, my DNS IP Address was pointed to the router and I had to change the DNS IP Address to the server to get it to work.

To do that, first right-click on My Network Place and find your network card. Then right-click on its Properties and select Internet Protocol (TCP/IP).

Then select Properties and on the bottom, change the DNS Address to your server. Click OK and reboot.

ASP.NET 2.0 Active Directory with Forms Authentication

When it comes down to it, the only tricky part about using forms authentication against Active Directory is about two configuration sections.

  1. ConnectionString
  2. Membership Configuration

Here is a sample of my configuration and I’ll explain it afterwards:

<configuration>
<appSettings/>
<connectionStrings>
<add
name="ADConnectionString"
connectionString= "LDAP://NEMOHome.com/CN=Users,DC=NEMOHome,DC=com"
/>
</connectionStrings>
<system.web>
<compilation debug="false" />
<membership defaultProvider="MembershipADProvider">
<providers>
<add
name="MembershipADProvider"
type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="ADConnectionString"
connectionUsername="NEMOHome.com\liming.xu"
connectionPassword="changeme"
/>
</providers>
</membership>
<authentication mode="Forms">
<forms name=".ASPNET" loginUrl="login.aspx" defaultUrl="protected/default.aspx" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</configuration>

As you can see, the part around the Authentication and Authorization sections are nothing special, however pay attention to

1. connectionStrings

The syntax of Active Directory starts with LDAP:// followed by the domain name that I mentioned earlier in the article. It’s absolutely important for you to get the domain name right.

The second important element is CN= which stands for user container and in my case it’s Users and the rest of the tokens DC are simply substrings of our domain name.

2. Membership

Now in the membership section, first use this provider:

System.Web.Security.ActiveDirectoryMembershipProvider

…then set the connectionStringName to the connectionString.

Also, the connectionUsername and connectionPassword I used is the account I setup earlier. I’ve seen others use a different user for this, but I’m too lazy efficient, so I just used the one I created before.

When the ActiveDirectoryMembership provider connects to Active Directory, it uses the account whose credentials are specified on the connectionUsername property (note the lower-case n, which is different from the connectionStringName property).

If you specify the connectionUsername property, you must also specify the connectionPassword property, otherwise an exception is thrown.

If you do not specify account credentials, Active Directory uses your ASP.NET Web application’s process account.

From MSDN

And that’s it. Go to your login page and log in as usual and you will see, everything works as expected.

NOTE: By default, User.Identity.Name in this case equals to your login username. So your username in this case it’s user@domain.

This is called the UPNs format. If you don’t like it and want to simply have the user type in their username without the domain, then in your membership configuration, add

attributeMapUsername="sAMAccountName"

This is called the SAM-Format.

Conclusion

Overall, not bad eh? Hope this guide helps those ASP.NET developers who are trying to get started with Active Directory. I’ve attached the test source files here for you, modify as you see fit.

ActiveDirectory.zip (4 KB)

As of now, Jumptree Project Management does not yet support Active Directory authentication. It will be included however in the next v1.2 release.

Want a better way to manage projects and collaborate with your team?

Check out our Jumptree Project Management Software »

Effective Project Management: The Change Order Form

Back when I was consulting, the one thing that would give me cold sweats at night was expecting to get a call saying the clients wanted some changes to be made.

And I hate changes…well, not actually hate but maybe a really strong dislike…

The main reason is because of all the wasted time that was spent prior to that. All that time spent on negotiating the contract, workflow-ing the specs, drinking Starbucks…and of course let’s not forget hours actually spent working on the original requirements.

Now I don’t blame the client—because that’s what consulting is all about.

As their guide, it’s your job to figure out what they want. But unfortunately a lot of times they aren’t sure either.

That’s why contracts, requirements, specs, and all that stuff should never be considered the Holy Grail.

Of course it’s hard not to get personal because you spend so much time on it that it’s like your baby and someone is telling you, “Um…yeah…something’s wrong with your kid. It’s gotta change!”

Change order forms to the rescue!

There are four important elements of a change order form.

1. Description of Change — explain exactly what’s going to change. Is it a new feature? Is it a change from an existing requirement? If so, are other requirements affected?

2. Reason for Change — you must understand exactly why the client wants something changed. This lets you anticipate any other roadblocks that might occur. It also gives you a better understanding of the business-logic of the project.

3. Time and Cost — the most important thing to remember is the give-and-take nature of the change order process. Changes will come at the expense of either time or cost—and most of the time both.

4. A Signature — a change order is basically an extension to a contract. It must be signed—and preferably by the person who signed the contract.

This will save your butt (or at least your job) if you’re ever questioned about why these changes were made—especially if your client all of a sudden hires a new project manager because the old one was using corporate funds to…um…never mind.

So get it signed!

Here is a sample change order form:

Change Order Form (38 KB)

How we use Jumptree Project to track changes

1. We have a global category called Changes. Anything that’s even remote a change will get selected as such.

Global Categories

2. Next we create a discussion about the changes that want to be made. Here we will discuss with the client how their changes will affect the cost and timeline of the project.

Change Discussion

3. Once the client agrees to the changes and the extra time/costs, we then fill out the change order form, upload it, and ask them to sign it.

Upload Change Order Form

4. After the client sends it back to us, we delete the original file (in Step 3), and then scan and upload the signed change order form to the first post. We also add [Signed] to the title.

Signed Change Order Form

5. We’ll also add all the tasks that need to be made—note that clients can only see published tasks.

Add Tasks

That way, your team will know the context of the changes and you’ll be able to better monitor them as well.

Related Discussions

6. And finally, when all the tasks are closed, we’ll close the discussion—finalizing the changes.

Want a better way to manage projects and collaborate with your team?

Check out our Jumptree Project Management Software »

Jumptree Project v1.1 Update Released!

The v1.1 update of Jumptree Project introduces a bunch of new and highly requested features, such as:

  • SQL Server 2005 support
  • Calendar with Date Localization
  • Files Management
  • Publishing Tasks
  • Multilingual Support
  • Enhanced Batch Updates
  • URL Proxy
  • Print Layout
  • UI Improvements
  • Speed Increases

This is a free upgrade for existing customers, so please login and follow the update instructions.

If you have any problems, please email us at support@jumptree.com or visit our Forum.

Preview: Jumptree Project v1.1

The major coding for Jumptree Project v1.1 is now complete and we’re entering the testing phase now.

In addition to SQL Server 2005 support and Files Management, there is now batch editing for tasks, discussions, and files.

We’re also excited to announce the most requested feature: a Calendar!

Projects, Milestones, and Tasks will each have their own calendars and the Dashboard will have a calendar that displays everything together.

Here’s what the Dashboard Calendar looks like (click to enlarge it):

Jumptree Project Calendar

As for full internationalization, we decided to push it back to a later upgrade as we want to implement support for localized language packs as well.

Jumptree Project v1.1 is a free upgrade for existing users.