Why Coding Takes Time and the Secrets to Nail Software Development Estimations

Justice Ekemezie
JavaScript in Plain English
7 min readJun 22, 2023

--

An illustration of a developer sitting in the center of a clock, representing the concept of time and coding. Discover the secrets to accurate software development estimations in our article.
Photo by Kevin Ku on Unsplash

It’s time to face the truth: coding takes time. While there are numerous articles available online that provide practical tips for better estimation, it is essential to acknowledge and embrace the reality of the time-consuming nature of coding. In this article, we will delve into the reasons why coding genuinely requires a significant amount of time and explore why considering this reality is vital when providing accurate software development estimations.

The fastest a human can type yet is 216 words per minute (wpm)

The current world record for the fastest typing speed is held by Stella Pajunas, who achieved an impressive 216 words per minute (wpm) back in 1946.

Now, you might be wondering, why is this typing speed significant in the context of software development estimations? Well, let’s break it down with some calculations:

While the following assumption may vary depending on factors such as complexity, programming language, and developer experience, let’s consider a useful product consisting of approximately 5,000 lines of code (LOC), including configuration files and written code. However, auto-generated code and templates will not be taken into account.

For experienced developers like us, assuming 5,000 lines as a safe margin where time constraints can be a challenge is not uncommon. This assumption aligns with scenarios where we are contacted as freelance developers or working on a product within a company. In these situations, we often encounter the common question, “How long will this take?”

Based on the assumption of a typing speed of 216 words per minute, let’s calculate how long it would take to type a 5K program. Assuming each line of code consists of approximately 5 words, a 5K program would encompass 5000 * 5 = 25,000 words.

Using the typing speed of 216 words per minute, it would theoretically take approximately 25,000 / 216 = 115.24 minutes to type a 5K program. However, it’s essential to acknowledge that this is a theoretical calculation and in reality, the process would likely take longer due to breaks, errors, and other factors that slow down the typing process.

115.24 minutes translates to around 1.92 hours or approximately 2 hours. But have we considered the time required for testing? How many times have we used console.log statements? How often has our workflow been interrupted? How frequently have we resorted to searching for two additional lines on Google? Suddenly, things become more complicated.

While this information may not be considered as research material, the intention here is to emphasise the difficulties in estimating accurately. Estimating time is akin to trying to predict the future, a skill that very few possess (if anyone does at all). The point is, developing a complete software solution demands a significant investment of time, even for experienced developers who must still pay the price in terms of time.

In software development, time is tangible and significant; you must invest it like money before witnessing any results.

How can we estimate properly? While I may not have all the answers, I can share some tips that have proven helpful to me. By the end of this article, I will also provide a few resources that can assist you in improving your estimation skills. Estimation is a crucial skill that many of us have learned the hard way. Failure to provide accurate software estimates can lead to painful experiences, affecting our reputation and relationships with clients or colleagues.

Principle number one:

1. Do not try to impress your client

When you are asked the question, “How long will this take?” It’s important to resist the temptation to impress your client with an overly optimistic estimate. Instead, take a deep breath, pause, and genuinely consider the factors involved. Ask yourself: What is truly going through your mind at that moment? Many of us feel a sense of responsibility for aspects that are beyond our control. If your immediate thought is, “The client must be expecting this in 3 days, so why don’t I tell them 5 and maybe add or subtract some time?”

This is a common mistake. It’s crucial to shift your focus from solely thinking about the client to considering the project as a whole, recognizing your own limitations as a human being, and acknowledging the complexity involved.

To help you provide a more realistic estimate and avoid the trap of trying to impress your client, consider the following questions:

  1. Have I built something similar before? If so, how long did it take me to complete?
  2. Is there a similar open-source project available that can aid in the development process?
  3. How many people will be working on this project alongside me?
  4. Where will I host the project? How responsive is the hosting service provider? This consideration is particularly important when developing an app intended for deployment on platforms like the Apple Store 😑

2. Factor in External Influences that Can Impact Time

It is common for individuals to overlook or disregard other ongoing projects they have in their pipeline. If you are still working on a project and considering taking on another one, it is essential to take this into account. The reality is that time comes at a cost, and juggling two to three projects simultaneously becomes increasingly demanding.

Therefore, carefully consider whether you are currently engaged in another project or if you anticipate onboarding a new one during the development phase of the current project. Additionally, assess your availability. Are you planning to travel soon? Are you dealing with personal commitments or caring for an ailing family member? It requires genuine effort to thoroughly evaluate these factors before providing an estimate.

When you genuinely consider these external influences, it not only enables you to establish a more accurate time frame but also fosters a stronger relationship with your client.

A lost contract is better than a ruined relationship in your career.

It is crucial to prioritise open communication, manage expectations, and uphold professionalism to maintain healthy and long-lasting partnerships with clients.

3. Involve your client in every development stage

Once you have accepted the project, it is crucial to involve your client in every stage of the project’s life cycle. This level of involvement is important because, as humans, we tend to show more empathy and understanding towards things we can relate to and comprehend.

When important stakeholders are in constant communication with the development team, they remain informed about the progress of their application. They may even start to feel like they are part of the development team, which can foster a sense of shared responsibility if unexpected delays arise.

For instance, if you encounter challenges while integrating a third-party API and the customer support is not responsive, it is vital to communicate these obstacles to the project manager or client. Transparently sharing the challenges you face keeps them informed and allows for collaborative problem-solving.

Communication skills play a crucial role in this aspect. It is not uncommon for developers to focus solely on their technical expertise while neglecting the importance of soft skills. However, these soft skills define your personality and are the human aspect of being a developer.

Soft skills are the human part of your job as a developer.

Therefore, alongside honing your hard skills, remember to develop and enhance your communication skills. Effective communication helps build stronger relationships, fosters understanding, and ensures that both you and your client are on the same page throughout the development journey.

4. Improve your decision making speed

Being able to make timely and informed decisions is crucial in software development. A complete product consists of various features and milestones, and as a developer, you may have already outlined these milestones and their respective order.

However, it is not uncommon for a particular milestone, such as milestone 2, to present difficulties due to lack of experience or the need to acquire additional knowledge. Many of us, including myself, have fallen into the trap of getting stuck on a challenging feature and refusing to move on until it is completed. But is this the most effective approach?

To optimise your productivity, it is important to be flexible in your approach. Avoid taking yourself too seriously and instead, review the milestones and switch to other tasks when you encounter difficulties. By doing so, you allow yourself the opportunity to make progress in other areas. This flexibility in task management brings a mental reward of seeing continuous progress, which can motivate and energise you to tackle challenges more effectively.

Remember, being able to adapt and make decisions swiftly helps you maintain momentum and avoid getting bogged down by a single roadblock. Embrace a flexible mindset, celebrate achievements along the way, and keep moving forward with confidence.

5. Engage in Personal and Intentional Self-Development

If you identify areas for improvement in your personal skills as a developer, it is crucial to acknowledge and address them proactively. Be intentional about the aspects you need to work on and take the necessary steps to enhance your abilities.

As promised, I will provide links to some personal research I have conducted that can be helpful to you. Feel free to explore these resources at your convenience.

Before you conclude your reading, consider giving me a follow on medium if you enjoy reading articles like this. Additionally, I am active on Twitter and would be delighted to connect with you there as well. Thank you for reading, and until next time, stay productive! 🤟

Resourceful links

Software development effort estimation — Wikipedia

Why are software development estimates regularly off by a factor of 2–3? | Hacker News (ycombinator.com)

Software Development Estimation: A Quick Guide (projectmanager.com)

More content at PlainEnglish.io.

Sign up for our free weekly newsletter. Follow us on Twitter, LinkedIn, YouTube, and Discord.

--

--

I illuminate concepts with code and prose 👨‍💻. A Software Developer and Technical Writer 📝 , React, Typescript, PHP | Core contributor to @envless