Published on

Programming vs Software Development - their difficulties

Authors

About 2 years ago, I started my career as a “Smart contract and web3 engineer” at a Blockchain consulting company.

This meant that I had to start learning some newer technologies like Solidity & ethers.js; especially if I expected to deliver any kind of software that people would willingly pay for.

“Surely that won’t be too hard?” — It was extremely hard, like sailing through the second level of hell.

The 5+ years of experience in Full-stack development that I had accumulated before this were of no use.

Programming Is Easy, But Software Development Is Hard.

Software development is hard because most people usually tend to skip the foundational steps, which is learning to create programs that do things that other people want to pay for, and all the difficulties which that entails.

I come from a background of competitive coding (mainly in Javascript).

But that didn’t teach me anything about developing a software product with the right UX and design choices in web3 applications, optimizing smart contracts or writing code for upgradable smart contracts.

When I started developing our first dApp product (ERC721 based COVID-19 certificates), I felt like a kid who was expecting to write an essay right after learning the alphabet.

Moreover, I didn’t have the luxury of taking a few months break from my business to master these technologies since I had already committed to a deadline, therefore I was only left with one choice — to learn and implement all these technologies in our product on-the-go.

It took me about 2 months to deliver this product.

During that period, I learnt that software development is a very complicated process that cannot be learnt by simply following a tutorial.

In order to be a successful software developer, I needed to not only write code, but also understand how that code works and interacts with the rest of the system.

While it sounds easy, I can assure you that there are only a handful of videos on YouTube that can teach you this skill.

Because understanding the nuances of how different technologies/frameworks operate together is something that can not be learnt by watching a tutorial video — It is something one must learn by doing”.

It required me to familiarise myself with new concepts and terminologies/frameworks.

I spent more time reading through documentation, or watching video explanations to try and fill the gaps in my knowledge rather than writing actual lines of code!

After spending all that time learning, I realised that most tutorials sucked at explaining the actual process of Software Development.

Most tutorials and courses did a great job of abstracting away the complexities of software development by teaching me only the primitives.

They made learning & mastering a language or framework seem very easy — to the point that it made me wonder what the fuss is all about.

There is a huge disconnect between what is shown in tutorials, blogs, courses and what is actually used in enterprise grade applications.

And, in my opinion, this seems to be the biggest reason why it takes people months or sometimes even years to reach the end of their software development cycles.

For example, most Solidity tutorials teach you how to write simple smart contracts, but very few videos talk about the importance of optimizing storage and reducing gas on Solidity code, and how to implement them.

Almost every real-world application would require you to build out the optimized smart contracts in Solidity.

By the time I had made this realisation, I had to go back and re-write almost 100s lines of code within a smart contract project that was otherwise ready to be launched in a month — it was either that, or I would have to spend weeks optimising dApps after delivery which would have been very time-consuming.

The process of Software Development is a combination of a dozen or so important decisions that one needs to make before writing even one line of code.

You have to think about your architecture, UI/UX design, tech-stack, production environment, optimization and even that is barely scratching the surface.

Software Development is a complicated process that requires you to understand various domain-specific concepts, specifications, testing, scaling, setting timelines, designing the architecture and most importantly choosing your “tech stack”.

Since I had no prior experience in developing software, thinking about architecture or choosing the right tech stack; my journey was a little rough.

After going back and forth for about 2 months, and writing nearly 1,000s lines of code, the software development was finally completed…


In conclusion, Programming and Software Development are heavily misunderstood topics.

Difference between their complexities are not understood by inexperienced developers because they usually lack the depth of expertise needed.

It is something you will learn once you dive into the deep end of software development & delivery.


Thanks for reading!