Category Archives: Freelance

Freelancer PSA : Do not tell the client you are going on vacation

I think most freelancers originally worked as an employee at some time in their lives. As an employee, it becomes a habit (by necessity) to tell your employer that you are planning to take a vacation, or you need sick time, or family leave.

Once you become a freelancer (contractor), please keep this in mind: your client is not your “employer”. Any arrangement between the two of you requires your consent, not just theirs. It is “just my opinion”, but you should not feel a need to justify your schedule to a client, unless you’ve signed a contract which says you will do some specified piece of work for some specified hours during some specified time period.

Here is one example: A client hires you to complete a project in July of this year. Once the work is done, your relationship with them is officially finished. Don’t feel you need to tell them “I have a vacation scheduled in September”, just in case they might need you again at that time. That is none of their business! Once you start doing things like that, it plants a seed in the client’s mind that you will be available unless you warn them otherwise!

However, if you detect some expectation that they might be planning or assuming that you will be available for future work, you may want to caution them that you will not be available going forward without an agreement in place. For example, suppose you finish your batch of work, and the client emails you something like “We may need help in creating more content in the fall of this year.” You can send an email back saying “I am not sure of my availability at this time. Please send me an email with further details when you are more sure of the schedule and the amount of work needed. If I am available, I would be happy to help you.” You might want to mention a retainer agreement at this time.

Suppose the client thinks that they might need you for additional work in September. In that case, they should make an agreement with you in advance that you will be there for them – this is a “retainer”. So, they pay you $$ in advance so that you carve out time which is reserved for them – and the agreement specifies that you keep the money whether or not they use your services. Remember, they are reserving your time with the payment. You could have been working for someone else during that time period, if you had not reserved it for them. You should not be losing money because you set aside time to work for them but they were too disorganized to make use of it.

So, if you finished your work in July, and the client signed off on it, they have no right to send you an email at the end of August which says “We need you for work in September.” It’s actually kind of rude to do this. They’d be making an assumption that you are twiddling your thumbs, waiting for new work from them, which is generally not the case for freelancers.

Two of the things you need to do as a freelancer is to “manage client expectations“, and “set boundaries“. Boundary-setting means the client doesn’t get to know if you are on vacation, giving a work seminar in a remote location, or anything else. It is not their business. (I am speaking from a USA-centric point of view, fwiw).

Managing client expectations, in this respect, just means that the client sometimes needs to be reminded that you are not an employee. Managers who are only used to working with employees sometimes forget that contractors are not machines that are instantly available. Sometimes, they are used to pressuring contractors to behave like employees, with the implication that they will not give them future work unless they are always on call, respond to emails instantly, etc.

It is up to you how you respond to such pressures, of course. In the long term, my belief is that you are better served by pushing back when clients start to act like your “boss” – because they are not! There’s a risk that this client might “fire” you, and get someone else to bully (good riddance!). Hopefully, though, they will learn to be respectful of your time.

Do you need a portfolio to get a software job?

Of course, you don’t need a portfolio of projects to get a job in software. I’ve gotten all my jobs without a portfolio, and I’m betting the vast majority of software developers are in the same situation.

Assuming that is true, then, is it worth the trouble to build a portfolio?

I came across one very good case study in the freeCodeCamp forum. A Brazilian started studying computer science in 2014. Later (2017), they finished studying at freeCodeCamp, and with some help from their portfolio website, they got a full time job as a full stack developer. This is especially notable because they had some very finicky requirements: only remote positions, only doing full stack or back end work, and so on.

How much was the portfolio a factor? It seems to have been helpful, but it didn’t seal the deal. The person said that they got plenty of interviews, but the result was always: “Great portfolio, but we need someone with more experience”. After this happened too many times, they stopped emphasizing their portfolio work, and instead began to focus on soft skills (knowledge sharing, consistency, meeting deadlines, etc). When they finally got a job, they said, “The person who hired me mentioned that the reason they wanted me over someone they knew and/or had more experience was basically because i paid attention to their job announcement and had proof that i was a self learner.”

That’s a nice anecdote. It supports the idea that a portfolio can help get your foot in the door. I’ve found some threads on Hacker News where hiring managers make claims that they both do, and do not, pay attention to developer portfolios when hiring.

Here is a list of “developer portfolio” links on HN over the years:

(1) Hello HN: I am quitting school for freelance, here’s my portfolio (Dec 7, 2010)

(2) Ask HN: With nothing but an open-source portfolio, how to start job-hunting? (Feb 4, 2017)

(3) Ask HN: What portfolio items are most impressive to you when hiring developers? (May 25, 2017)

(4) Build your portfolio by working on interesting projects (Mar 28, 2015)

(5) Show HN: My first portfolio site – Full Stack Engineer (May 15, 2015)

(6) Ask HN: Does a college degree hold more power than a strong portfolio? (Jun 5, 2015)

(7) Ask HN: Beginning freelance web developer: no clients – portfolio? (Apr 29, 2011)

(8) Ask HN: What makes a great freelance portfolio? (Jun 9, 2014)

If you’re planning on building a portfolio, I think you’ll want to thoroughly read each of the threads above. Below are some informative snippets that will give you a general idea of what I discovered.

In this HN thread, user ivanzhao presented his portfolio as an example of his skills. He got some feedback, both harsh and helpful, from the crowd at HN. Critiques recommended that he validate his site, that mouseover events are not usable on mobile devices, and that the site was not responsive. He got several remarks from users who said they’d probably never hire him based on their distaste for his portfolio, but there were also several remarks requesting his contact info and a rate! Note that this dude is the founder of Notion – so he went from quitting grad school in 2010 to founding Notion (circa 2013), which is a pretty cool story!

In a different thread, a high school student had worked on “open-source projects to create a portfolio demonstrating proficiency with a range of tools, languages, services, and paradigms”. The student wondered how this corpus could be leveraged to get a job. a-saleh indicated that he found starter jobs using family and friends (apparently no portfolio was involved). kafkaesq recommended accepting student work, even if it’s “for peanuts”, and trying to aim for work that can go into a portfolio. chetanbhasin said “Luckily, for most Software engineering roles, a good portfolio is far more important than an obscure number for the years you have worked.” ps5 gave support for having a portfolio, saying “Build and host a web app that uses some real-time public-facing data… That’s how I got a job as a very junior developer.” innocentoldguy confirmed this: “My company recently hired a young student right out of high school. What made him stand out was a few apps he had published on the App Store…” DEinspanjer expressed interest in looking at the student’s portfolio if it included work in Angular. eli said that they’ve hired “several people with no formal experience, but some awesome open source work.” So there are several posts in this thread which suggest that a portfolio project is useful for entry-level or junior-level positions. Other people in the thread suggest that it’s far better to get a college education rather than aim for work straight out of high school. The entire thread is definitely worth reading if you are looking to break into software development or web development, even if you’re not a high school student.

In another HN thread, someone asks “What portfolio items are most impressive to you when hiring developers?” Now things get more interesting! kasey_junk asserts “The best devs I know dont have portfolio pieces. They tend to work on problems that the people employing them pay a lot of money to prevent being public…So for me portfolios are for junior devs & graduate students looking to leave academia…” Later, they said that they mostly use “network based hiring” (i.e. it’s not what you know, but who you know!). corobo indicates that they do find portfolios useful when hiring, and concludes “Associated blog posts that explain how your code works and why though? I’d put your name to the top of the “get this person in” list on the spot“. edoceo appears to find portfolio projects useful when hiring and says “I’ll also look at your wiki and issues, to evaluate communication.

In this other HN thread, iandanforth says they’re hiring and would definitely like to see a code portfolio in evaluating candidates. And here’s a comment from yet another HN thread where portfolios are discussed: eranation says they pay attention to portfolio work when hiring for a specific task or language, but are more interested in seeing a breadth of experience (CS degree) when the work involves algorithms and data structures. In the same thread, morgante says that as a hiring manager, they consider someone with a strong portfolio and a CS degree to be a stronger candidate than someone without the portfolio.

A contrary opinion comes from tptacek, a user with a good reputation at Hacker News. He says, “If you’re aiming for the most lucrative work, the conversation you want to be having with prospective clients has very little to do with anything you’d put on a developer portfolio, and a lot more to do with (a) being able to speak the language of business (ie: making a credible benefits-focused pitch and understanding how ‘customer service’ principles apply to our kind of work) and (b) being able to tailor a case study or two to a client.” That doesn’t sound like total condemnation of having a portfolio, though… Just that it’s not the #1 thing to focus on.

It could be that I have a little bit of a bias, but my impression is that the software community does consider a portfolio to be a plus when looking to hire a developer, especially for freelance and/or more entry-level work. If you have no trouble getting work, then it may not be worth putting the time in to build a portfolio. If you feel like you could use a boost in your job search, but can’t figure out what kind of project to work on, you may want to read through all the above links at Hacker News! You can also take a look at my list of potential portfolio projects for some ideas to get started.

20 portfolio project ideas to make your resume shine

If you don’t have much software development experience, and you’ll be looking for a job soon, you want to do everything you can to make yourself an attractive candidate for the positions that you’re interested in. That means polishing up the resume.

Want your resume to shine? Think about adding a “side project” to it.

A side project can be any software that demonstrates your skill. It doesn’t have to be super complicated, like the next Facebook or whatever. It’s just there to give hiring managers help in evaluating what you can do.

Unless you’re a masochist, you should focus on a side project in an area that interests you. If you create a project that builds a robot buggy using the raspberry pi, that’s definitely pretty cool… but if you’re going to be applying for web developer positions, you may lose out to someone else whose portfolio demonstrates web programming experience. So don’t go for something that’s got a million bells and whistles if it doesn’t interest you. Work on a project that you like. That way, it will be easier to work on it, and get it finished. And it will be more likely to lead to a job that you like.

If you’re having trouble coming up with ideas for side projects, here is a list of 20 different ones to help you get started, including links to example sites:

(1) A to-do list. Examples: https://todoist.com/ or https://www.rememberthemilk.com/

(2) A slugify tool: https://blog.tersmitten.nl/slugify/

(3) An online stopwatch, timer, or alarm clock. For example: https://www.online-stopwatch.com/

(4) A web shop which displays images from Amazon: https://docs.aws.amazon.com/AWSECommerceService/latest/DG/EX_RetrievingImages.htmlAmazon has a lot of APIs and SDKs – pick one that interests you and build something!

(5) A tic-tac-toe game https://playtictactoe.org/

(6) A simple login page which uses the Google login or Facebook login API

(7) A tip calculator e.g. https://www.calculator.net/tip-calculator.html or http://www.itipping.com/tip-calculator.htm

(8) A URL encoder or decoder https://meyerweb.com/eric/tools/dencoder/

(9) A histogram generator which plots a histogram from some input, e.g. https://www.socscistatistics.com/descriptive/histograms/ and bonus points for taking input from a Google Drive spreadsheet.

(10) A MadLibs game site, for example http://www.madlibs.com/

(11) A hangman game site https://en.wikipedia.org/wiki/Hangman(game)

(12) A web scraper https://www.webscraper.io/

(13) A site which consumes the MediaWiki API e.g. https://www.mediawiki.org/wiki/API:Picture_of_the_day_viewer

(14) Build an “echo” chat bot https://www.codersbistro.com/blog/chat-bot-microsoft-bot-framework/

(15) A word counter service https://wordcounter.net/

(16) Something like MindMapper https://www.mindmapper.com/

(17) Build a REST API that takes a zip code as input and returns the average income for that zip code using https://catalog.data.gov/dataset/zip-code-data

(18) A word cloud generator https://www.jasondavies.com/wordcloud/

(19) A URL shortener https://bitly.com/

(20) A bookmark (URL) manager https://pinboard.in/

As you develop your side project, think about the following things:

(1) Use version control from the get-go. Having a git commit history with informative comments demonstrates that you care about code maintenance.

(2) Plan things. Create a README and if possible draw some wireframes.

(3) Write unit tests.

(4) Maybe add documentation using a wiki.

(5) Include code documentation such as Javadoc.

(6) Keep a consistent naming convention.

(7) Use consistent tabbing/whitespace/source code formatting.

(8) Avoid code duplication. Copy/paste is lazy and leads to unmaintainable code – refactor!

(9) Think to yourself – is the code maintainable, organized, and easy to understand? If not, refactor.

(10) If possible, use a continuous integration (CI) system for deploying to a hosting service.

(11) Use tools to compute code coverage and code complexity.

(12) Validate user inputs and handle exceptions nicely.

(13) Do not ignore security! Have you avoided SQL injection and cross site scripting attacks? If this is a web app, make sure it’s secure by using HTTPS.

(14) Work together with someone else, if possible, to show you can work on a team.

(15) Be able to demo your software live during an interview.

(16) Be able to talk about it comfortably and answer questions about your design and coding choices.

(17) Avoid surprise bugs during the demo – make sure you have performed QA on your application.

Once you finish one project, you will probably want to start on another one. Over time, you’ll be able to show prospective employers a portfolio of working projects. This won’t guarantee you a job, but it will probably give you an edge over other candidates.

If you want some real world experience, I’ll be honest and tell you that I never had a portfolio of projects that helped me get a job. I came to software development as a STEM graduate (not computer science), and I relied on that background to help “ease” my way into dev work. In fact, it was not easy! I found that some computer science majors are very skeptical of people who make lateral moves into software. They assume the worst about your coding style and competency. When I look back, I wish someone had suggested to me that I build some small projects that would have helped to demonstrate my abilities, especially when finding my first job. I think my job searches would have been easier.

which is better: full stack, frontend, or backend development?

The answer is “whatever you like”.

To make sure we’re on the same page, a frontend developer is someone who is comfortable doing user interface work – the “front end” of a software application is the part that the “user” sees. For example, a frontend dev creates your login screen, or writes code to make requests to a server for data that is displayed to the user.

A backend developer usually writes programs that run out of sight of the user, but are just as vital to the application. For example, their code accesses a data store, or implements business logic.

A fullstack developer is comfortable doing both sorts of tasks.

For context, the software being written may not necessarily be a web application that runs in the browser. Rather, it could be used to create an executable that runs on the desktop. It could be an app which is installed on a mobile device and which connects to a server in the cloud. The idea is the same: there’s a piece which is shown to the user, and a piece which is hidden.

There is an advantage to being a fullstack developer. There seems to be more demand for fullstack devs, these days. Part of that is because some managers have bought into the idea that if they hire a fullstack dev, they can have “two for the price of one”. They’re looking for a bargain.

This can work out, but there are some caveats.

The workload has to be reasonable so that a single developer can do it all in the allotted time. So if you genuinely have only enough frontend and backend work to fill a single person’s time, then it makes sense to hire one person having both skills. Otherwise, your developer may very well burn out before the job is done, leaving you in the lurch.

In addition, the fullstack dev must be skilled enough to get both kinds of work done. If they aren’t, it may take a lot longer to get the task done than if two specialists had been working on it. This is a problem if you’ve got hard deadlines! It can also mean that your “bargain” wasn’t a bargain at all. You might wind up paying the same, or more, for the same work that could have been done by two more specialized devs.

Good managers know this. That’s why there’s still plenty of demand for developers who specialize in frontend and backend work.

It’s probably best to go into fullstack development only if both frontend and backend development interest you. Unless you’re interested, it’s going to be difficult to stay motivated and learn the new skills that keep you competent and employable.

If you’re having trouble finding a dev job, and you think it’s because “only full stack devs are getting hired!”, think again. You should probably look at your job search process before you decide to train for full stack work in a panic.

how can I increase my wages? – part ii: niching down

Forty-eight percent of respondents to Stack Overflow’s 2018 developer survey described themselves as “full-stack developers”! That’s a lot of full-stack devs out there!

Many developers love their work, and are perfectly happy that they are paid anything to do what they love. However, just because you’re getting paid to do what you love doesn’t mean you don’t need or want more money! Money is like a road: it helps you get where you need to go. It helps you get where you want to go. When you’re sick, it can pay for health care expenses. If you’ve got a family, it pays to put the food on their plates, go on vacation together, send your kids to college. Even if you don’t have responsibilities, it pays for fun stuff – whatever you like to do when you’re not coding!

I would argue that there’s no such thing as “too much” money. After all – you can always give your money away if it causes you problems! So, maximizing your income seems like a no-brainer, as long as doing so doesn’t impact you negatively in some way.

You can increase your wages simply by asking for more. But what happens if you’ve asked for “more” many, many times, and people keep telling you “no”? Then the problem may be that the value you provide is not worth what you are asking.

One possible answer is to drill down into a niche area. Adding a subspecialty to the skills that you’re offering can be the thing that makes a higher paying client find you appealing. But, how do you choose a niche? And how do you get experience in that niche if you haven’t already worked at it? It’s a catch-22.

Looking back at that Stack Overflow survey again can help! Scroll down and look at all the commonly used technologies… Hopefully, you will have one or two of those under your belt, and maybe more. Now look at some of the less commonly used techs. For example, under the databases section, we see that MySQL is the most popular database. Chances are that you have experience using a MySQL database, either with a hobby project, with a current client or job, or sometime earlier in your career. That’s great! But look down the list a bit more, and you’ll find there’s quite a long tail of databases listed. For example, we see things like Neo4j, Cassandra, and Google Cloud Storage listed.

Drilling down, of all 100,000 developers taking the survey, 3.7% said that they use Cassandra. At first glance, that doesn’t seem like a lot, and you might think you are better off experimenting with PostgreSQL or SQL Server. However, 3.7% of 100K is 3700 devs. And that’s just a small fraction of all the devs in the world. So there’s definitely a market for people with Cassandra skills. In 2017, 3.1% of respondents said they worked with Cassandra. It looks like there might be an uptick in this skill.

But, you say, why not broaden your skills with PostgreSQL? There’s clearly far more demand for that skill than for Cassandra.

Well, there’s nothing wrong with doing that, of course. But there are a few reasons that something less popular is a wiser choice.

First, a skill that is common to a very large pool of developers becomes commoditized. You won’t stand out from other devs if you have experience with PostgreSQL. You will if you’ve been using Cassandra. No doubt, many clients or hiring managers will skip right by “Cassandra” on your resume. However, for the client who absolutely needs a developer with that skill, your resume will be exactly what they’re looking for.

Second, when skills are hard to find, (and I don’t mean skills like “playing the nose flute“) you can often charge more for them. I don’t have solid proof of this. However, ZipRecruiter claims that the average salary for a “Cassandra developer” is $122K/year. In contrast, the average salary of a “MySQL developer” is $104K/year. I don’t want to use those figures as definite proof of what I’m saying because I don’t know how ZipRecruiter got their data, and I’m sure there are lots of other factors involved in salary comparisons. Also, I don’t think there’s a job title such as “Cassandra developer” or “MySQL developer”. However, it does give you some indication that there’s more money sloshing around for those who have rare skills.

A little research like I’ve done above can give you an idea of where the trends are going, and what skills might be hard for employers or clients to find. If something looks appealing, it can be worth investigating the technology. Can you add it to one of your side projects, so that you can say you’ve got experience in it? You don’t have to become an expert. You can explain to a potential client what your experience is, and let them decide whether that is enough.

Niching down” is one way to get yourself a pay increase.

how can I increase my wages?

As a fullstack developer, you ask, what additional training can I do to increase my wages?

The advice below applies whether you are a full-time employee (FTE) or a freelancer.

I’ve got some bad news for ya. As a software developer, you’re used to solving problems with technology. This problem, however, is not technical in nature, and the answer isn’t, either. You may not want to hear this! The answer to increasing your wages is in sales, marketing / public relations, and – here’s the kicker – just raising your rate!

But how can I just unilaterally raise my rate, you ask? Well, there’s a whole course about that called “Double Your Freelancing” (I’m not an affiliate, and I make no money if you click on that link!). I suspect you can learn from that course. But I don’ know, to be honest: I haven’t taken it! And I’m sure there’s a lot more to it than the name, but that name gives you a place to start: just raise your rates. Here are some quick tips that can help.

Suppose you’re a freelancer, and you only have one client. You’re afraid to raise your rate with the client! You do everything they ask, without complaint, because you’re afraid they will drop you, and use someone else.

Here’s where the sales and marketing come in. You should spend at least 20% of your time marketing yourself to get another client, and at a higher rate than what you currently charge. As your freelancing career matures, you will probably spend more than 20% of your work time on marketing and sales, but for now aim for 20%. You’ll put in the work to find good clients who pay more, and you’ll build your reputation so that they can find you.

The same applies if you are a full-timer. Shop yourself around. Do the work to get interviews at other companies when there’s no pressure to take a new job – you are just testing the water. Make positive contacts with other developers at other companies. When there are openings at their companies, you want to be the person who comes to mind to fill that role. The beauty is that you don’t have to take any position if it’s not right for you. But it gives you more freedom and more options.

When you have more options open to you, you don’t have to be afraid, and you don’t have to tolerate low wages.

I’m going to be honest with you, though. I was in the situation where I had exactly one client. When I was first hired by him, he asked me to do a few things that were fairly difficult – for example, find and fix a race condition in a complex (and awful) Android code base. I did that at a very low price because I was new to freelancing, fairly new to Android programming, and I just wanted to get some experience under my belt.

Well, over the years I kept taking work from him. He started asking me for other kinds of work – web development (backend and frontend), database work, systems administration. I felt like I should be paid more, but I felt really awkward asking for an increase.

I finally announced a 20% increase for new work, and my client did not complain one peep.

A few years later, I was still limping along with just one client. I’ll talk about that later. But I finally decided that the client work I was doing was not worth the trouble. I’ll talk about that later, too. The end result, however, was that I announced another rate increase, by about 40%. The client grumbled and mumbled, but they agreed.

The point is the same, though. I was willing to lose the client over this rate increase because I had other income. This is why you should always have a back-up plan when demanding a rate increase. You control your rate, but not everyone will pay you what you want. If you ask for a rate increase and your client balks, you need to be able to say “bye”, or it just looks like a sad bluff.