Get started as an independent consultant in software development.

Many software developers at one point in their career may wish to go out on their own and start their own software development business. Some do, but the majority usually stays employed for various reasons, including not knowing where to start and how to proceed. In this post, we’ll look at some of the steps necessary to start your own software consultancy. From there, you can choose what path you want to take.

I’ve spent nearly 20 years of a 30+ year career in software development as an independent consultant. What’s in this blog post is what I’ve learned that has worked for me, or other consultants who I have worked with.  

Getting started

You’re ready to hit the ground running and start making megabucks as a consultant. But how do you get started? It’s a bit more than going out and buying some business cards then yelling “I’m open for business!”[1]. There are some things you’ll need to do to make success more likely. First, some “housekeeping”, which is to say, all of that not-so-fun stuff that goes into consulting. Some of this advice here in the “Getting started” section largely applies to folks residing in the USA. Other countries may have different requirements regarding taxes or laws about opening a business.

Make a business plan

Just like at a company, if you don’t make a plan with goals, you don’t know if you’re actually accomplishing what you set out to do. Your plan may be to reach a certain amount of revenue or clients, or perhaps to secure work in a certain specialization. If you plan on incorporating, getting lines of credit, or taking out loans for any reason, you may be required to provide a business plan.

Get an attorney

Get yourself an attorney that specializes in small businesses and sole proprietors. You don’t have to spend a great deal of money, but you should have someone available to field questions, double check documents and contracts, and generally help you on the legal side of things. 

Depending on the type of work you’ll be doing, your lawyer can help you create templates for SOWs (Statement of Work) and other legal documents you’ll need when dealing with clients. Absolutely do not engage with clients without a SOW and a contract. Legal documents such as contracts are there to benefit both parties and clearly define the scope and type of work so there is no confusion. If you’ve only worked for an employer before, you might not have dealt with contracts and statements of work. Your lawyer can show you how it all works and guide you through it.

Get an accountant

If you already have one you like, great! You can probably just continue using her. Taxes can become complex quickly so it’s best to go with a professional. There will be expenses you could deduct as well as other accounting practices you simply won’t know about unless you’re an actual accountant. It’s foolish to spend billable hours on something like filing and paying taxes, when you can be out there billing. 

Start your business

How you proceed here largely depends on where you live. In the USA, you can go as a sole proprietor, LLC, or S-Corp. The type of business you choose affects how you pay taxes and run your business. Your accountant will help you make the choice based on your goals in your business plan. This choice not only affects how you pay and file taxes, but also which clients you may work with. Some large corporations will only work with an LLC or S-Corp, and not a sole proprietor.

Everyday activities

You’ll have expenses, so you’ll need to open a small business bank account. Keep your own money and the money you designate for your business separate, even if you register as a sole proprietor. It’s easier to organize expenses and taxes when accounts are separate. It’s also easier to prove to the tax authorities that you’re paying taxes correctly. 

If you will travel for your business, get a credit card specifically for the business. Use this card for office expenses, marketing expenses, or any business (again, not personal) expenses. Keep receipts to match your bank statements and ask your accountant what is tax deductible. Don’t assume and you use your business credit card to pay for it. Ask first. Tax law changes yearly so what is deductible this year might not be next year. 


Get yourself liability insurance at a minimum. Some large corporations require it. If you like your current auto or home insurer, see what they have for self-employed folks.


This absolutely varies from country to country. In the USA, companies deduct taxes from paychecks for folks who are employed part or full-time. This includes an unemployment insurance tax that now comes out of your own pocket. Once you run your own business you must do all the tax administration yourself. Your accountant should guide you and get you the forms to pay taxes either quarterly (most common) or yearly, as well as an estimate of how much you might pay. Just be sure to pay on time to avoid late fees.

Getting clients 

Marketing and sales

Whether you like it or not, you must market and sell yourself. If you plan on taking on employees at some point, you must sell your company’s services. Invest the time to take at least an intro course on sales/marketing, or do some deep reading on it. As an independent contractor you’ll now have what sales people call a “pipeline” and you need to keep it filled so there are as few gaps in work as possible. 

Most tech people hope to avoid any sort of marketing and sales activity but this is a huge mistake. It doesn’t matter if you are a full time employee or an independent consultant. Employees must market themselves for raises and promotions while consultants do it to land the next gig. Both do it to become recognized as a highly competent professional, and possibly an expert. Your work only speaks for itself after someone else knows about it.

The best way to get clients is through word of mouth. Word of mouth is the most personal way to market yourself or a product. This is because you’ve built up enough trust that someone else will vouch for your expertise or product’s quality. So call upon your professional colleagues who you’ve worked with in the past to see if there are any contracts in your area of specialization. Check in with colleagues of previous employers to see if there’s any contract work at those places.

Social networking

Here’s another to file under “like it or not, you must do this”. It’s social networking. Everybody wants to see some sort of online presence before they are willing to pay for a product or services. Publish a website with at least some information about you and your specialization. You might want to combine it with a blog (more on that below). Twitter and LinkedIn are popular online spots for people to research companies and individuals, and highly recommended for visibility. Both are also easy ways to communicate with potential customers via direct messages.

Public speaking

Public speaking is a great way to showcase your skills as well as tell the world that you are out and available to take on business! Speak about the area of expertise that you want to work in. Start at user groups and meetups, then submit to other conferences as well. Nowadays, there are many options for speaking virtually as well, which often leave a nice recording you can use to promote yourself. Pro tip: Don’t forget to actually tell people that you’re accepting clients during a talk. If the audience doesn’t know, they won’t approach you for work.


Blogging is similar to speaking, but to state the obvious – it’s just written down instead. The nice thing about blogging is that you can make a post about a topic, particularly if it solves a problem, then hand it out as a “free sample”, so to speak. This works out great when others need help overcoming that same problem. You can point them in the right direction, then follow up with your newly learned sales and marketing skills to land the gig solving this problem. Blogging is a great way to show off your expertise as well as communication and writing skills. 


Participate in an OSS project or start your own. If you have written a utility that proves useful in different scenarios then consider making it OSS and charging for support by the incident or better yet, through an SLA (Service Level Agreement) with various pricing tiers. Your attorney can help you create an SLA.


If you have the budget then consider sponsoring software development events. This can be in the form of an actual sponsorship or simply buying branded swag (pens, stickers, etc…) and passing it out with business cards while you’re networking.

You are networking, right? This is imperative. If you do not have established professional relationships, the whole “word of mouth” thing goes out the window. If you want to be successful, you must curate professional relationships regardless of whether you are consulting or a full time employee. 

How to set consulting rates

There are several things to consider when setting your rate to ensure you aren’t charging too little or too much. The goal is to bring in more money than you spend. However, as a self-employed person, you must pay for your own health insurance, liability insurance, unemployment taxes, and other expenses such as office supplies and travel expenses. All of this goes into the cost of doing business. (Often abbreviated as COGS, Cost of Goods Sold. You are the goods.) You are no longer paid for vacation, sick days, or holidays. A good estimate is to reduce your overall billable time in weeks from 52 weeks to roughly 40. 

You will often have down time in between projects. Of course, the optimum situation is to keep your project pipeline flowing so that one job stops just when you’re starting the next (see Marketing and sales). But this doesn’t always happen, and as an independent contractor, you must account for this yourself. In large consulting shops, it’s called being “on the bench”.

When you’re on the bench, it’s a great time for keeping up with new technologies or learning new things. You are now the employer to yourself, so you’ll be eating the cost of training materials as well as giving up billable time to learn. However, don’t count on being able to learn on the job. Consultants are expected to know what they’re doing before they start new projects.

It can cost a lot of money to be a small business or self-employed. Make sure your rates cover it, including bench time, while also providing for you to live.

Final Thoughts

Financial security

What happens if you don’t get clients and go for a few months without work? The common suggestion is to save approximately 3 months worth of living expenses for those times where you might not be working. The stress of not being able to pay bills makes it a lot harder to also run a business well. Since you no longer have a steady income you must learn to live with variable income. Making sure you have some money held for such occasions eases this burden.

For extra financial security, consider creating a source of backup income through investments or passive income streams. If investing, check with a financial advisor. For passive income streams, YouTube, Tiktok, and Udemy are popular platforms. Of course, you must invest some up-front time for this, so you might want to do it after hours while you’re still employed to get a good start. These won’t return megabucks right away, if at all. But they will supplement a small portion of your income (about 1-5%). Weigh the time against what you reasonably think you’ll get in return.

Consultant’s mindset

Get into the “consultant’s mindset”. There’s going to be a lot of time that you must spend on the boring details of taxes, scheduling, paying bills, finding work, and everything but working on the cool stuff you prefer to work on. So make sure you track not just working hours but other hours so that you know exactly how many hours you’re spending on non-revenue generating tasks. This will also help you adjust your billable rates. Once something becomes too time consuming or burdensome, you can then justify the expense of hiring someone else to do those things (e.g., a sales person, office assistant, bookkeeper, etc…). Being an independent consultant is a constant balance of your billable vs non-billable hours.

[1] I know someone who did this. He simply bought business cards and set up a landline (early 2000’s). He expected that “If you build it, they will come.” It didn’t work then. It won’t work now.

Resources for learning .NET | A .NET Learning Path

For those who are new to .NET, this is a quick guide to get started to becoming a .NET developer and start you heading in the right direction. Of course, you’ll want to dive deeper into many of the topics in this post. 

Where to start

It can be daunting just looking at all the technologies and languages that are out there to dig into. For those who want to code in .NET, a good place to start is by learning about the software in the .NET family. This will give you information on what is available and why you might want to use it (see “more links” below). 

Next up: pick a language: C#, F#, or Visual Basic. Once you’ve got a grip on the language, focus on one or more areas of development specialty: backend, web, desktop, cloud, or mobile. A common path is something similar to this: language-> speciality (e.g., UI or backend) -> adjacent technologies (e.g., Azure, DevOps, Product Management). You will likely need to know some of the surrounding technologies to varying degrees. So you’ll need to learn them concurrently while learning your chosen language. As this happens, you may find that you enjoy specializing in one or more areas.

Consider what kind of products you want to build, or what you want to do with a programming language. Do you want to build web or mobile apps, or focus on mega-computing in the cloud? Remember, you’re not marrying these choices, it’s common to move around and work in one area then another.

Choose one (or more) from each row in the following graphic:

You might run into confusion about some of .NET’s naming, for example, .NET Framework vs .NET (also called .NET Core). .NET’s history reveals why, but the gist of it is that .NET Framework is the original .NET from the early 2000’s. What’s called .NET now was .NET Core when it was released in 2014. .NET (Core) is a more modern version of the .NET Framework. There is some overlap between the two as well as some incompatibilities. So unless you have a specific reason to start with .NET Framework, go with .NET (sometimes referred to as .NET Core). 

More links:

Learn a .NET language

.NET Supports multiple languages, including C#, F#, and Visual basic. C# is the most popular and most samples and learning material online are in C#. However, Visual Basic has roots that go back before .NET, and there are some high-paying career options available for developers who can work on legacy VB systems. Both C# and VB are object-oriented programming languages that can be adapted to a variety of computing scenarios. F# is a functional programming language and is a good niche to work in solving interesting problems, particularly in finance, data analysis, or scientific endeavors. 

While working and learning in .NET, you’ll find that understanding general principles of programming, building digital products, software development, and the like will help you become a better .NET developer. Additionally, knowing programming concepts such as Object-Oriented Programming (OOP), since C# and VB are OOP languages. Some helpful resources that apply to .programming but aren’t part of .NET are as follows:

A great way to learn to code is by reading code just as much as writing code. Comb through some OSS projects at the .NET Foundation and try to read the code from popular projects. You may even want to contribute to some yourself if you can. 

More links:

Specializations and .NET Adjacent Technologies

There are many other technologies that work with .NET that you should familiarize yourself with. Knowing database design basics is a great skill if you write enterprise software. UX design, product management, Agile  & Scrum. Many .NET full stack developers use JavaScript libraries for the user interfaces such as Vue, React, or Knockout. Full stack and web developers need familiarity, if not proficiency, with HTML, CSS, and JavaScript

Building software takes more than writing code. Software must be compiled, assembled, and shipped in whole or part. It must be tested to verify it works and works with other software. Some developers move into DevOps and work with Docker, Kubernetes or other container technologies to assist in building, shipping, and managing software. And of course – someone has to manage the developers and product. Some developers move into product design or management.

A really important tech for programmers is the cloud, so consider Azure or AWS as a viable backend for .NET software, as well as software written in other languages.

As you learn to write code, get yourself setup with a GitHub account and learn the basics of Git and GitHub if you haven’t already. GitHub & Git aren’t programming languages, but rather tools for managing your code called Version Control Software. Every programmer needs some type of VCS regardless of the languages they write in. GitHub is the most popular, and is a great way to showcase your portfolio so you can land that job!


This is in no way a comprehensive list, but rather a nice place of mostly free resources to start. There are hundreds of free or inexpensive courses on Udemy. The ones here show ones that are popular with high ratings, but do explore their course catalog and choose which works best for you. Pluralsight and LinkedIn Learning are also popular video learning platforms for .NET. 

I write a .NET newsletter filled with tutorials, tips, tricks, and fun stuff:

Books, magazines, and book subscriptions (some free, some not):

YouTube/Streaming Channels:

Get yourself hooked into the .NET ecosystem by joining Twitter and searching for folks tweeting under the following hashtags. Don’t forget to check out other popular programming related hashtags you see while looking for these.

Dotnet, c#, .NET, .NET Core, Programming, Software Development

Find and follow people on Twitter and connect on LinkedIn with those who are working as developers and  Developer Advocates. Developer Advocates (aka Avocados 🥑), are in the people at various tech companies who help and mentor and teach others in the tech industry. They’ll help you succeed

Join LinkedIn and connect with those in the industry. Don’t be afraid to post to people who know you’re new and are looking for guidance. Most folks are happy to connect with newcomers and provide some programming or career advice.

In the meantime, if you don’t have one, get yourself a mentor. A mentor gives guidance and answers questions about the topic agreed upon. It could be general career advice as well as technical advice. 

Consider taking software development classes at a college if possible. Online or in-person, it doesn’t matter. Classrooms give structured direction with a knowledgeable person who is often an expert (as always there are exceptions). Unfortunately for many, formal classes are cost prohibitive. However, many great universities now offer free software development classes online. 


Showing up is half the battle. And now you’ve got enough goods to get started, so get out there and do it! In addition to what’s here, Use Google, YouTube, and Bing to search for books, courses, blogs, videos and other learning materials. Twitter is an excellent place to ask questions and get a variety of responses from around the world. And keep in mind, you won’t learn all there is to know from visiting the links in this single blog post. You must make a concerted effort and frequently practice to become a competent software developer (i.e., reading and writing code) even more than you need to watch videos or read books.

Use ViewModels to manage data & organize code in ASP.NET MVC applications

The concept of the ViewModel isn’t just for ASP.NET MVC, as you’ll see references to ViewModels throughout the web in articles and blog posts about the MVC, MVP, and MVVM patterns. Those posts and articles can center around any number of technologies such as ASP.NET, Silverlight, WPF, or MVC… This post will investigate ViewModels as they apply to the world of ASP.NET MVC.

What is an ASP.NET MVC ViewModel?

In ASP.NET MVC, ViewModels allow you to shape multiple entities from one or more data models or sources into a single object, optimized for consumption and rendering by the view. The below image illustrates the concept of a ViewModel:



The purpose of a ViewModel is for the view to have a single object to render, alleviating the need for UI logic code in the view that would otherwise be necessary. This means the only responsibility, or concern, of the view is to render that single ViewModel object, aiding in a cleaner separation of concerns (SoC). Concerns are distinct aspects of the application that have a particular purpose (i.e., concern), and keeping these aspects apart means your application is more organized, and the code more focused. Putting data manipulation code in its own location away from the view and controller, enforces SoC.

Using ViewModels in MVC for finer granularity and better SoC leads to more easily maintainable and testable code. Remember, unit testing is about testing small units.

Along with better coding practices, there are many business reasons demonstrating why you might consider using ViewModels:

  • Incorporating dropdown lists of lookup data into a related entity
  • Master-detail records view
  • Pagination: combining actual data and paging information
  • Components like a shopping cart or user profile widget
  • Dashboards, with multiple sources of disparate data
  • Reports, often with aggregate data

The above scenarios are common to a wide variety of applications, and deal with more complex data than basic CRUD forms-over-data page (e.g., a simple 1:1 mapping to the db table). For example, providing a list of states, and ensuring that the state that matches the state of current customer, means that you need to either provide two sets of data or a single set of customer/state data combined, as shown in the image below.



Some scenarios such as a lookup table representing states in the USA, could easily work with either ViewModels or a ViewBag/ViewData object, so there is some potential overlap at times. It’s up to the application architects and developers to decide what works best with their exact use case.

Creating a ViewModel

Although a ViewModel consists of multiple entities, at its core a ViewModel is still just a class – and one that doesn’t even inherit from anything special, as many MVC classes do.

Physically, ViewModels can exist in different locations, listed below:

  • In a folder called ViewModels that resides in the root of the project. (small apps)
  • As a .dll referenced from the MVC project (any size app)
  • In a separate project(s) as a service layer, for large applications that generate view/content specific data. (enterprise apps)

Since a ViewModel is just a class, the easiest way to get started using one is to create a new folder named ViewModels and add a new code file to it.

To create the CustomerViewModel ViewModel, add the Customer and StatesDictionary types as properties to form one CustomerViewModel class. In the example below, the CustomerViewModel class contains the newly defined properties.

public class CustomerViewModel 


    public Customer Customer { get; set; }

    public StatesDictionary States { get; set; }

    public CustomerViewModel(Customer customer)


        Customer = customer;

        States = new StatesDictionary();



Generally, ViewModels contain the word “ViewModel” as part of its name; however, the conventions at work here are for consistency in code readability, since other classes in MVC state their intents in their names as well (e.g., names of controllers, action methods, etc…use conventions in their names).

The StatesDictionary class is a simple Dictionary object containing two type parameters of type string. The class also contains the definitions for all the members in the Dictionary (i.e., the state data). The only property in the StatesDictionary class is the StateSelectList, which is an object that Html Helpers use with to render an HTML <select> element that displays a listing of states. The type Dictionary<string, string> in the StateSelectList property maps to the state abbreviation then state name, respectively.

public class StatesDictionary


    public static SelectList StateSelectList


        get { return new SelectList(StateDictionary, "Value", "Key"); }


    public static readonly IDictionary<string, string> 

        StateDictionary = new Dictionary<string, string> { 


    , { "Alabama", "AL" }

    , { "Alaska", "AK" }

    , { "Arizona", "AZ" }

    , { "Arkansas", "AR" }

    , { "California", "CA" }

    // code continues to add states...



Data that lives in small lists and infrequently changes, like the StatesDictionary class, exists in all types of applications. In real world applications, you’ll find a variety of methods for dealing with lookup data such as a list of states – often XML files and SQL tables. You can replace the code in the StateDictionary method to use entities from Entity Framework, read data from files, or any data access code that you require.

After creating the ViewModel, the next steps are to instantiate it in a controller and return it to the view.

Getting the ViewModel to the view

Starts with the controller…

Sending a ViewModel to the view for rendering will work the same as when dealing with a model. Since it’s just a class, the view doesn’t know, and doesn’t care, where the model or ViewModel came from. You can create the instance of the ViewModel class in the controller, or resolve it if using an IoC container. Remember that just as you would do with views, you should keep controllers clean of unnecessary code, meaning that only code that fetches the model or ViewModel belongs here, and little more.

public ActionResult Edit(int id)


    Customer customer = context.Customers.Single(x => x.Id == id);

    var customerViewModel = new CustomerViewModel(customer);

    return View(customerViewModel);


Then the view renders the ViewModel…

In order for the view to know what object to use, set the @model keyword to point to the ViewModel, just like you already would with a regular model.

@model FourthCoffee.Web.ViewModels.CustomerViewModel

Because the Customer object is a property of the ViewModel, you’ll see the model.Class.Property syntax to access the ViewModel data, similar to the following line of code.

<div class="editor-label">

    @Html.LabelFor(model => model.Customer.FirstName)


<div class="editor-field">

    @Html.EditorFor(model => model.Customer.FirstName)

    @Html.ValidationMessageFor(model => model.Customer.FirstName)


@* ...View code continues rendering properties... *@

Additionally, you can edit the Edit/Create views so that the DropDownList containing a list of the states will display, and display the correct state matching that of the customer.

<div class="editor-field">    

    @Html.DropDownList("state", new SelectList(StatesDictionary.StateSelectList, 

                       "Value", "Text", Model.Customer == null ? "" : Model.Customer.State))

    @Html.ValidationMessageFor(model => model.Customer.State)


As you might have noticed, using a ViewModel is just as easy as using the ViewBag or ViewData objects. ViewModels, however, provide those extra benefits like being easier to test and optimize.

Checking the results

After a user navigates to the /Customers/Edit/1 URL in the browser, the Razor view engine renders the CustomerViewModel similarly to the following screen shot.


The State DropDownList displays the states and the current state for that customer, as expected.

Digging Further into ViewModels

Because ViewModels render pre-manipulated data that no longer have those 1:1 mappings between model classes and database tables, you’ll need to do create mappings yourself. You can manually map small ViewModels, but this will quickly become burdensome when mapping larger classes, especially when working with parent-child-grandchild, multi-level, or complex data. This is where a tool such as AutoMapper comes into play. AutoMapper will let you fluently setup mappings between ViewModels and models more easily than doing so manually, or writing your own mapper.

Here are some tips for using ViewModels:

  • Put only data that you’ll render in the ViewModel.
  • The view should direct the properties of the ViewModel, this way it fits better for rendering and maintenance.
  • Use a mapper when ViewModels become complex.

Some tools that can help assist you in generating POCOs (Plain Old CLR Objects) for models and ViewModels are:

POCO Generator

EF POCO Templates

In addition to these tools, you can use MvcScaffolding to create actions and views based on ViewModels. MvcScaffolding, invention of ASP.NET team member Steve Sanderson, gives you more power in creating CRUD, repository, unit test and other templates quickly and painlessly. Check out Steve’s Multi-part series on MvcScaffolding here. MvcScaffolding works with ViewModels as well as models.

You should always prefer using a ViewModel rather than instantiating multiple models and putting that manipulation code in the controller.


ViewModels help you organize and manage data in MVC applications when you need to work with more complex data than the other objects allow. Using ViewModels gives you the flexibility to use data as you see fit. ViewModels area generally a more flexible way to access multiple data sources than models + ViewBag/ViewData objects.

Further reading: Comparing the MVC and MVVM patterns along with their respective ViewModels

Download the code!

Stats, data, and answers, as to why there are so few women in technology fields.

Women today represent an abysmal percentage of the population of most STEM fields (Science, Technology, Engineering, and Math), and that number is shrinking, rather than expanding. At the same time, fewer young women are entering the STEM workforce than in previous years.

Why are women leaving STEM fields?

Researchers have been gathering volumes of data as to the why there are fewer women are staying in, or entering STEM fields, and from that data we can see many issues that cover a spectrum from that need to be addressed:

  • Sexism: overt and subtle (hostile macho cultures)
  • Harassment, threats, or potential or actual violence toward women
  • Childcare
  • Financial Independence
  • Gender Stereotyping
  • Work-life balance

Considering the number of challenges, addressing the lack of women in technology is a multifaceted phenomenon with no single solution, with each matter deserving attention. The primary goals of this post will focus on demonstrating…

  1. Incidents of sexism at industry events, and online conversations, and their link to the decline of women in STEM fields.
  2. The effects sexism has on women and the STEM industries as a whole, both now and in the future.
  3. A call to action to drive awareness and take a proactive stance in promoting women friendly STEM workplaces, conferences, schools, and meeting places.

By understanding these influences women in technology, particularly in software development, we can take corrective and proactive stances, in the retention, engagement, and attraction of top female talent.

Incidents of sexism are major contributors to a declining female STEM workforce.

The National Center for Women In Technology describes sexist incidents [.pdf] in various ways including,

“experienced/observed exclusionary cliques, unwanted sexual teasing, being bullied, and homophobic jokes”.

Consider that  between January and October 2011, women reported 20 sexist incidents to the Geek Feminism Wiki, with some common themes: 

  • Several talks at tech conferences contained pornographic style imagery, or sexual imagery.
  • Multiple presentations referenced women in a derogatory or demeaning way, (e.g., “women can’t program”, “women are stupid”) or by overt or subtle objectification of women.
  • Overt harassment, inappropriate touching, and groping are still commonplace at technical conferences.

Roughly one incident every two weeks this year means that this happens more than we’d like to think – and that’s only the reports from a single website.

Exclusionary, offensive, incidents at conferences, along with threats, violence, and harassment, against women in technology (and women in general) are simply not isolated occasions. They have profound implications that directly impact the declining numbers of women in technology. The Washington Post outlines some statistics demonstrating this, in a study on interactions between men and women during online chat sessions.

“A 2006 University of Maryland study on chat rooms found that female participants received 25 times as many sexually explicit and malicious messages as males. A 2005 study by the Pew Internet & American Life Project found that the proportion of Internet users who took part in chats and discussion groups plunged from 28 percent in 2000 to 17 percent in 2005, entirely because of the exodus of women.” [emphasis mine]

Those numbers have barely improved, five years later. Additionally, the participants in this study belong to a general online audience and not solely the STEM fields, so one must consider the fact that STEM fields are male dominated, resulting in a larger amount of sexist behavior.

Though not the only reason, the numbers show that in software development specifically, sexist and overtly offensive behavior (both online and off) is one of two key factors as to why women are leaving technical fields as reported by ABC News. This article quotes Laura Sherbin, director at the Center for Work-Life Policy, who published a study in the Harvard Business Review titled “Reversing the Brain Drain in Science, Engineering, and Technology”. Laura goes on to explain the primary reasons women leave STEM fields…

“The top two reasons why women leave are the hostile macho cultures — the hard hat culture of engineering, the geek culture of technology or the lab culture of science … and extreme work pressures”

Sherbin also highlights just how critical and surprising the numbers are, even to researchers.

“The dropping out was a surprise to us. We knew anecdotally that women were leaving these careers. We didn’t expect to see the number 52 percent.”

To reiterate: 52% or just over half, of the female STEM workforce leaves because of hostile macho cultures.

Let’s do the math:

  • Assume the average tech conference has 300 attendees.
  • The average turnout of females at a technical conference is at about 15%, or 45 women in this example.
  • 52%, or 23 of the women at that event will leave the industry[1].
  • At a rate approximately of 26 events per year affecting 23 women each time, 598 women will be subjected to a hostile environment each year[1].

The cost in human terms and individual well-being is immeasurable.

A look at the negative effects and human cost of sexist behavior in STEM fields.

Considering the above numbers, try out this thought exercise, showing the implications of sexist incidents on women in software.

  1. Think of the names 23 women developers that you work alongside, have worked with, or know. Try it without looking at social networks, checking address books, etc…
  2. Think about these women. Are they your coworkers? Presenters you admire? Are they women with whom you enjoy having technical conversations, perhaps at conferences, code camps, or over social networks?
  3. There’s essentially a 50/50 chance, or the same chance as the toss of a coin, that those 23 women won’t be developers for much longer.

Once they’re gone, can you name 23 more women to replace them? It won’t be the younger girls entering the field.

The consequences have a stifling effect on younger girls wanting to enter the technology fields before they have a chance to start. Numbers show that a huge impasse in attracting young girls into the STEM fields, is a serious lack of women role models in those fields. Less women staying in the field means fewer role models for young girls, which in turn means fewer STEM girls overall.

It’s not just about sexist incidents though, subtle sexism can bleed into the everyday atmosphere of in tech fields and cause the same amount of negative barriers. While the day to day activ
ities of most technical women might not vary much from that of men, as far as actual programming, sitting in meetings, mundane business tasks, etc… What do differ are the interactions between the sexes, as well as both overt and subconscious behavior that manifests as sexist incidents, though primarily non-malicious, and most often subconscious. For example, here are some commonplace scenarios where subtle sexism happens in companies large and small[2][3]:

  • Men who repeatedly ask only the women attending meeting to take notes, or get coffee, when the woman is not a secretary or in a similar role.
  • Colleagues that routinely ignore women during meetings, or a female states an idea that is promptly ignored, then raised again by a man who gets the credit. (in a consistent, frequent, pattern)
  • Women, rather than men, are routinely stuck into “softer” positions, often to answer phones. Management gives women more remedial tasks that are clearly not aligned with their job description or what they were hired to do.

The sentiments above are detailed in a report by Level Playing Field Institute titled “The Tilted Playing Field: Hidden bias in information technology workspaces”  [.pdf]. Reading about recent events and stories of everything from demeaning comments, to outright harassment, stalking, and groping, are still commonplace in the tech industry. I must agree that I’ve personally been privy to a number of these types of scenarios, but that’s not all…

When an incident at a conference happens, I inevitably get a call or email from a female colleague who has just given up, and is now looking at non-technical career alternatives.

If we are to keep our technical industries healthy, and full of diverse creativity, things must change, and soon. So what can you do?

A Call to Action: Drive awareness and take the lead to promote diversity in STEM fields.

Below are just some of the things you can do to drive diversity and promote women in STEM fields:

Drive awareness.

It may seem obvious, but without awareness, it’s impossible to know there’s a problem.

You can drive awareness by blogging, tweeting, or otherwise telling your story, or commenting on blogs to show your support. The Level Playing field’s report shows a real lack of awareness in populations at large. The more blog posts, articles, and events, mean more information people can use to take proactive stances to create technical communities and workspaces that are welcoming to everyone.

Be proactive.

  • Does your company have a diversity and inclusion policy? Even if you work for a small business or startup, a formal policy of inclusion fosters a welcoming environment for everyone. If you company doesn’t have one, get involved and ask your HR department to work on one with you. Don’t let your policy be a paper form of lip service, make it part of how you do business.
  • Does your HR department have a clear open door policy, with a trusted employee to listen to concerns?
  • Attend women in technology events. Hint: Take your favorite gal developer with you. At the Code Camp NYC 2011 WIT luncheon, a healthy mix of men and women joined in for a productive, round-table discussion.
  • Ask technical women work on a joint talk with you for a user group or code camp, and invite them to technical events.

Awesome guys like John Zablocki and coworkers like Joe Healy, Peter Laudati, and Brian Prince, are just a few of the many guys I see at WIT related events.

Presenters & conference organizers:

Speakers can use the Windows Phone 7 app content guidelines, or the Android app marketplace rating guide when s/he’s not sure what material should be considered offensive.

Organizers can create written guidelines to ensure a harassment-free environment for everyone at your conference, user group, or other meeting.

CodeStock 2010 set a perfect example to follow by embracing a WIT centered theme, including a female keynote speaker (*ahem* that would be me 🙂 ).


I would love to see every company behave as MS DPE East does, and I hope that you, dear readers of this blog, will step up to foster an environment in your workplaces and homes that support and celebrate women and diversity in STEM fields.

Should an incident occur at an event you’re attending, take corrective action as soon as possible. If you’re in a conference session and you feel offended or uncomfortable, walk out calmly, and write down exactly what you feel is offensive or inappropriate. Take the evaluation to the conference staff, and ask that they check out the session in question.

[1] The numbers in this sample represent one source of reports, so the actual numbers are much higher. Additionally, the number 23 is rounded from 23.4. Also assuming a single track conference, which is fairly common.

[2] These aren’t just manufactured scenarios – they’re real life stories from female contemporaries.

[3] As for large companies, my experiences at Microsoft DPE have been great!. I work on an highly functioning team with awesome people who celebrate diversity in technology and are quite supportive of each other.