Writing well: a must-have skill that no one teaches software developers

Forget that hip new technology! To take your software development career to the next level, learn... how to write well.

I started writing because the generous community of programmers had helped me by sharing their knowledge freely over the Internet. I wanted to contribute to this incredible trend so I could be a part of something bigger than myself.

Little did I know that it'll be me who gets benefitted the most by pursuing this noble cause.

3 years of writing on the Internet has done more for my career than what 4 years of college education did.

I’ve published 14 articles in the past 3 years while I was teaching myself programming, data science and machine learning. These have allowed me to reach hundreds of thousands of readers around the world, make valuable connections, get a unique job opportunity, work with people from multiple countries and make more money than I hoped.

You signed up for this newsletter because you read one of these articles!

Now, I want to help you become a better writer because I believe it’ll improve your career in a similar way.

The Writing Revolution

We are living through a Writing Revolution where good writing skills can have an immense impact on the life of every ambitious software developer.

In the past 30 years, our world has changed in a fundamental way - Internet has demolished the cost of distributing information.

"It turns days into minutes," Andrew Grove, the legendary CEO of Intel, commented on the arrival of email. "A lot more people know what's going on than did before, and they know it a lot faster than they used to."

Today we have email, Slack, Notion, Github, Twitter, Facebook and a plethora of Internet apps focused on written communication.

For 200, 000 years of human history, speaking and listening was the primary mode of communication. But in the past 30 years, reading and writing has overtaken it as the primary mode of communication.

You are now living in the early years of a Writing Revolution that has changed the way humans communicate with each other.

Traditional education, however, has failed to recognise this human-scale revolution - good writing tuitions are still reserved for students of the liberal arts.

You cannot wait for it to catch up when being a good writer can benefit your career now.

Especially, with the remote-working revolution underway.

The Remote-Working Revolution

Some of the biggest companies of our generation like Facebook, Twitter and Shopify have recently announced a permanent transition to remote working. Inevitably, they have paved the path for entire industries to follow.

Therefore, it's highly likely that your next company will be working remotely.

In remote settings, with little face-to-face interaction, good written communication becomes the key.

Your competitive advantage in a tough job market:

Work-from-home means that the competitors for your next job are not just from your city, they are from your entire country and potentially the whole world. Add economic depression and rock bottom unemployment rates to the mix, and you have a saturated job market.

You need to find a way to stand out.

Being a good writer will help you.

When deciding between a few candidates to fill a position, companies like Basecamp hire the better writer. People of Basecamp have been working remotely for more than 20 years and great writing is a prerequisite for every single position they have.

3 ways writing online boosts the arc of your entire career:

Being a good writer helps you get a new job. A better job.

But more importantly, it helps you do your everyday work better, and therefore, changes the arc of your entire career!

Here are three ways good writing skills boost your career:

  1. Grabbing the valuable attention of people around you

  1. Finding better career opportunities throughout your career

  2. Improving your thinking

Writing articles for software developers on the Internet is an excellent way to acquire these skills.

Publishing articles for software developers

The software development community built the Internet and adopted it before anyone else. Naturally, it is the most mature community on the Internet.

By simply being a part of it, you get to enjoy access to 3 systems, unique to this community:

  1. This community likes to share its knowledge for free on the Internet in the form of articles and tutorials.
    This gives you access to important resources that allow you to teach yourself.

  2. This community knows to surf the Internet to look for solutions when they get stuck or when they want to learn something new.
    This gives you demand for any tutorial you write - no matter how specific. You can be sure there are developers who'll be looking for it.

  3. Most recently, this community has built online publications to make it easier for programmers to share their knowledge. They accept articles from newcomers and share them with their huge audience of hundreds of thousands of developers.
    This means you don't have to be afraid of shouting into the void.

You see - writing isn’t as difficult as it is in our heads.

“But I don’t know where to begin!”

I know all of this is probably not enough to get you to write your first article. You probably feel that you don't know enough to write just yet.

After talking to my college friends, I understand how intimidating it can be for students in tech to start writing online. Even when they understand the benefits of doing so.

So, I created a short email course to help them.

I'm sure it can help you too.

My course: Clear Writing, Clear Thinking

Clear Writing, Clear Thinking is a 6-lesson email course designed to help young developers start their writing journey - Clear Writing, Clear Thinking.

I have purposefully kept the emails short and dense - each one being just 3 minutes long.

There are 6 such emails.

As a subscriber to the Build to Learn newsletter, you will automatically be onboarded to the course for free.

You should get your first email within the next 24 hours.

Look out for one with the subject - “Grand Purpose: Why writing well is so awesome”. You will receive it from my personal email - `nityeshagarwal@gmail.com`.

Let me know what you think about it by replying below.

Talk soon!

Expect "equal pay for equal work" at your remote job

Tough questions you can ask the HR of a remote company that offers you reduced Cost of Living (COL) based salaries

Almost all the knowledge jobs have become work-from-home in this sudden pandemic. Societies, companies, employees and job-seekers - all have been caught in this sudden shift in the way of working.

Big companies like Twitter, Shopify and Facebook have announced that they are adopting remote work for good. It's inevitable that this will pave the path for other companies to follow suit.

But along with this they might also make location-based compensation the norm.

Cost of Living (COL) based compensation: Remote companies often offer “competitive salaries” based on the “Cost of Living” in the employee’s local market. To understand what this means, imagine a remote company with 2 engineers who do similar work - one lives in California and the other in Panama. According to this philosophy, the company will pay the Panama engineer less salary than it pays the California engineer even though they have equal responsibilities.

I strongly believe that this is wrong. It disrespects the age-old slogan of “Equal pay for equal work”.

Companies can obviously save easy money using COL-based compensation scheme. Which is why their hiring departments have been trained over months, if not years, to defend it.

This puts YOU at a disadvantage as a future employee.

I’ve been doing some research on this subject for the last few weeks. And, I have come up with a list of tough questions that you can ask your future employer who offers you a reduced salary and cites the COL philosophy.

I compiled them into an article that you can find on my website —

You should expect "equal pay for equal work" at your new remote job

This newsletter contains 12 tough questions against COL-based compensation. Along with this, I’m going to tell you what inspired me to ask these questions so that you may go deep into them if you want to.

Tough questions against COL-based compensation:

Question: How will you know that all the lousy work doesn't get passed on to you because it is justified in terms of 'returns on investment'? Will you be okay if the coolest projects were assigned to your peer just because he lives in an expensive city?

Question: Even if there’s an HR Policy against it, how can you be sure that your extremely well-meaning manager wasn't thinking about it when they assign you a project that you don't like? Wouldn't they be making a wise decision that is justified in terms of returns of investment? Can you be sure that they won't?

Inspiration: Remote by DHH and Jason Fried and Basecamp’s compensation philosophy

Basecamp is a company that has been fully remote for more than 15 years now. They pay everyone at their company in the 90th percentile, or top 10%, of the San Francisco market rates, regardless of their role or where they live. 

They have also written a playbook on how remote companies can function. It’s called Remote: Office Not Required. I read it before I joined my first remote job 6 months ago.

Here’s an excerpt from it:

Your star designer out in the sticks is just as valuable (maybe more so) to the team as those working from the big-city home office. Make sure she feels that way.

By the same token, as a remote worker, you shouldn’t let employers get away with paying you less just because you live in a cheaper city. “Equal pay for equal work” might be a dusty slogan, but it works for a reason. If with regard to compensation you accept being treated as a second-class worker based on location, you’re opening the door to being treated poorly on other matters as well.

“Other matters” is important here. It can include the work that you do in your entire career!

Why you should dive deeper into this:

  • It amazes me to see how ahead-of-the-curve Basecamp’s founders have been regarding remote compensation. Check out their remote compensation article to understand how they handle other areas of compensation like bonus, raise, insurance and some juicy benefits!

  • Their book - Remote - is a must-read if you are transitioning to working remotely. Basecamp guys have been at it successfully for more than a decade and they shared their secret recipe in this book.

Question: How does cost of living based compensation take into account the differences in government spending accross countries? Shouldn't the employees be compensated for this difference?

Inspiration: Government Spending, Our World in Data

Public spending enables governments to produce and purchase goods and services, in order to fulfil their objectives – such as the provision of public goods or the redistribution of resources - like social protection, education and healthcare.

Recent data on public spending reveals substantial cross-country heterogeneity. Relative to low-income countries, government expenditure in high-income countries tends to be much larger (both in per capita terms, and as share of GDP), and it also tends to be more focused on social protection.

Large public spending means better public school infrastructure, better hospitals and lucrative social protection schemes like the following:

If you want to pay people to create an equal standard of living for all your employees, why not compensate them for the very significant differences in government spending too?

Question: What happens if I relocate to a lower paid region? Will I be compensated differently?

Question: What happens if I was living in a cheap city and decide to move to a more expensive one?

Question: What happens if I choose to be a digital nomad changing cities every couple of months?

Question: What if I choose to get an official address in some expensive city while I actually live in the suburbs?

Inspiration: My tweet exchange with CTO of Basecamp and CEO of GitLab

I replied to DHH’s tweet about Facebook that I included above -

And DHH retweeted it (!) -

And then I got a public explanation from CEO and founder of Gitlab -

(Frankly speaking, these were my greatest moments of using Twitter. :p)

Question: What's included in "Cost of Living"?

Question: More importantly, who defines it? Should it be the employee who is actually incurring these costs? Or should it be the employer who is paying the employee?

Inspiration: The following tweet thread -

Other tough questions:

Q: Who dictates the proportion in which I should be spending my money?

Inspiration: A Macbook costs the same throughout the world. The same NASDAQ stocks are priced the same on a global market. It doesn’t make sense to have my entire salary reduced based on cost of living if I want to spend it buying such globally priced items.

Q: Where does the leadership in the company live?

Inspiration: This article from the CEO of Help Scout. Leadership in companies that offer COL based compensation, often live and work in high-wage markets but they might feel differently if they were subject to lower pay for the same work.

Q: How do you account for the costs of reduced opportunities that employees, who don't live in primary talent markets, incur?

Unless a company is ready to give satisfactory answers to all such questions, it should default to “equal pay for equal work”.

Traditionally, large American or European companies have outsourced labour to cheaper markets in South-East Asia to cut costs. Countries like China, India, Bangaladesh and Indonesia have become the hub for cheap manufacturing and cheap software engineering.

Remote companies that try to go with COL-based compensation are simultaneously trying to hire from a global candidate pool and reap the benefits of outsourcing.

They are trying to have their cake and eat it too.

Put simply, you should only accept the reduced pay if you are comfortable with being treated as outsourced labour by your company.

There are tough questions against “equal pay for equal work” in remote settings too. I have addressed them in my article and tried to give some thoughtful answers to them.

I have also speculated on how remote compensation and remote work will play out in the future, in my article.

I won’t talk about them in this newsletter because it has already become too long. You should check out my complete article to read more —

You should expect "equal pay for equal work" at your new remote job

Finally, please share this article with your friends and family because it might just help them negotiate a better compensation deal with the HR of their remote company.

Most of us will probably not get truly equal pay anytime soon but I believe that there's value in setting expectations.

That’s all from me for now!

I have started regularly posting my thoughts on LinkedIn and Twitter. So, feel free to connect or follow me there! :)

Clean code and the practice of programming

"Should I be descriptive or can I be lazy?"

When you are teaching yourself, it's easy to pick up bad habits or style because you don’t have someone checking your work. You don’t have many reference points for clean code because not many books/courses directly address these.

So, I want this newsletter to be your reference point for building your intuitions about beautiful code and good programming practices.

Here are 4 guiding principles that I personally follow to keep my code clean:

  1. Don’t settle for “it runs”.

  2. Write for readability - code is read more often than it is written.

  3. Explicit is better than implicit.

  4. Duplication may be the root of all evil in software.

These should help guide you when you are making decisions about designing your code.

I also want to share some more specific, actionable pieces of advice.

5 simple, actionable, good programming practices:

  1. Put some thought into choosing your variables’ names -
    Don’t be lazy with long descriptive names. Remember, most IDEs can autocomplete your variable names.

  2. Create new functions whenever necessary
    It is easy to understand the syntax of writing functions in your favorite language. But it takes practice and some sense of design to learn when to break the code into functions. You need to write small functions with descriptive names that do only one thing.

  3. Document your code and write helpful comments
    Remember, “documentation is a love letter that you write to your future self.” :p

  4. Be consistent in your coding style
    Consistent coding style is good coding style. It makes it easy for someone (including you, yourself) to dive into your code and read it in the future.

  5. If it breaks, assume that it’s (probably) your fault
    You are likely to spend a majority of your coding time banging your head over broken code. In those moments, you will inevitably try to shift the blame to your IDE, compiler, environment or your machine. But you should remember - It's not the computer, it's you. Only when you do that, will you be able to diagnose and get to the heart of the problem (even if it is some problem with the machine).


Here are the 2 books that really helped form my own intuitions:

  1. Bob Martin's book Clean Code

  2. Brian W. Kerninghan’s book - The Practice of Programming

"The purpose of style is to make the code easy to read for yourself and others, and good style is crucial to good programming."

-Brian W. Kerninghan in his book - The Practice of Programming

I have written and published a detailed article about this called - Writing Clean Code and The Practice of Programming: Actionable advice for beginners. Check it out if you want to read a more detailed version of this newsletter!

Thanks a lot for reading! This was the Build To Learn newsletter and you can subscribe to it here.

If you think that coder friend of yours might find this newsletter useful as well, please forward it to him/her. :)

Also, if you have other such best principles that you follow, please let me know by replying to this email or reaching out to me on either Twitter or LinkedIn.

Finally, if you liked what you read, please hit the hardly-visible heart icon below. It will help in improving the visibility of this newsletter on Substack - the platform that hosts Build To Learn :-)

Teach yourself using a cool guided project

Advance your Python programming skills by building a Whatsapp Chat Analyser

Finding ways to apply your knowledge after the learning process essentially means that the learning happened without much sense of a destination. All we were trying to do was amass all the knowledge we could, in the hope that it would come of use in some distant, mystical future.

Doesn't that feel like procrastination?

With Build To Learn, I want to approach learning by giving projects the primary importance

When you try to make something, you discover a hundred things that you don’t know. You discover things that you thought you knew but don’t really know. You trip over things that seemed so simple that you didn’t even pay attention to them. You fill the gaps in your learning.

Also, it is super fun and adventurous!

But there are a few problems with using this approach to teach yourself:

  • It’s hard to be structured because you are both the student and the curriculum designer

  • You aren’t sure if you are too much out of your depth

  • You get lost trying to find resources to teach yourself

That is why I have created a guide for you that you can use as a roadmap to help yourself build something cool - a Whatsapp Chat Analyser!

Okay so here's my project idea:

When chatting with a close friend, have you ever wanted to know -

  • the number of messages sent by each of you

  • your the average length of messages

  • who texts first and the first text in each conversation

  • your chatting time patterns - hourly, daily and monthly

  • most shared website links

  • most common words that each of you use

Wouldn't it be cool if you wrote a program that would just calculate all this stuff for you?!?

And what will you learn by doing this project?

Here are some textbook skills that you will pick up:

  • File handling

  • String operations in Python

  • Functions

  • Modules

  • PiP and using 3rd party packages

  • Regular Expressions (RegEx) in Python

But the guide is not a textbook. So along with them, you will also develop intuitions about good programming practices like:

  • The importance of readability of your code and coding style

  • When and how to break your code into functions

  • How to go about debugging your code (when you want to bang your head against the wall, instead)

  • How to look things up on the Internet - use Google, use StackOverflow, read documentation etc.

  • Understand the need for different data structures and when to use what

If you are intrigued as well, head over to the guide:

Advance your Python skills by Building a Whatsapp Chat Analyser: a Guided Project

Thanks a lot for reading! You can subscribe to the Build To Learn newsletter here.

If you liked this and want me to do more such guides please let me know by replying to this email or reaching out to me on either Twitter and LinkedIn.

Also, you can let me know your thoughts, opinions, comments or questions the same way! I would love to answer them. :)

If you think that friend of yours might find this newsletter interesting as well- It would be awesome if you could forward this newsletter to him/her.

Also, if you liked what you read, please hit the hardly-visible heart icon below. It will help in improving the visibility of this newsletter on Substack - the platform that hosts Build To Learn :-)

Fantastic Programming Project Ideas and Where To Find Them

A beginner-friendly version

Hey subscribers,

The task of getting good project ideas is difficult. Its probably the biggest hurdle that prevents us from building stuff. Right?

But aren't you tired of project suggestions like ToDo list app, ecom website and the Titanic dataset?

I have discovered 4 sources for getting good, unique, even cool project ideas —

I have written a detailed article on how they can help you easily discover new, cool ideas. It’s called “Fantastic Programming Project Ideas and Where To Find Them (a beginner-friendly version)”.

The article includes 5 ideas from each of the above source to demonstrate how easy it is to pick them up.

Here’s one from each:


A simple notifications app that lets you select messaging apps that you want to block notifications from when the frequency of notifications exceeds 1 every 3 seconds.
And tricked yourself to learn - Android development


Analyse Spotify's Worldwide Daily Song dataset,

This dataset contains the daily ranking of the 200 most listened songs in 53 countries from 2017 and 2018 by Spotify users. It contains more than 2 million rows, which comprises 6629 artists, 18598 songs for a total count of one hundred five billion streams.

Spotify's Worldwide Daily Song dataset

And find answers to:

  • How long do songs "resist" on the top 3, 5, 10, 20 ranking in your country? Which songs are the outliers?

  • Which countries have similar tastes in music?

  • How long time does a top ranking song takes to get into the ranking of neighbor countries?

Data Is Plural

Analyse How couples meet and stay together. It is a survey of 4,002 adults, 3,009 of those had a spouse or main romantic partner. It even has follow-up surveys that were implemented one and two years after the main survey, to study couple dissolution rates.

An analysis can reveal answers to the following questions:

  • Do traditional couples and nontraditional couples meet in the same way? What kinds of couples are more likely to have met online?

  • Have the most recent marriage cohorts (especially the traditional heterosexual same-race married couples) met in the same way their parents and grandparents did?

  • Does meeting online lead to greater or less couple stability?

  • How do the couple dissolution rates of nontraditional couples compare to the couple dissolution rates of more traditional same-race heterosexual couples?

  • How does the availability of civil union, domestic partnership or same-sex marriage rights affect couple stability for same-sex couples?

Do check out the article for more such ideas. It has 4 goldmines of project ideas and 20 cool project ideas for app development, web development, Data Science and Machine Learning.

I published this article a day ago and I’m SO excited with the response that it has received that I just wanted to share it with the subscribers of this newsletter!

Achievements (YAAY! :D):

Thanks a lot for reading! You can subscribe to this newsletter here.

If you think that friend of yours might find this newsletter interesting as well- It would be awesome if you could forward this newsletter to him/her.

Also, if you liked what you read, please hit the hardly-visible heart icon below. It will help in improving the visibility of this newsletter on Substack - the platform that hosts Build To Learn :-)

Loading more posts…