Common Pitfalls in Maintaining Speed of Software Development

Google is known for giving developers difficult and quirky brain teasers during the hiring process. They’re specifically designed to filter out all but the top 1% of coders with the ability to solve complex programming problems.

In the 2013 film, The Internship, Owen Wilson and Vince Vaughan pit their wits against Google’s hiring manager for a chance to win one of Google’s coveted internships. They had to work out how to escape from a blender if they’d been shrunk down to the size of flies and put inside.  To this, Owen Wilson responded, “physics scares me.” He was not what you might call a 10x dev.

The Mythical 10x Dev

Techpedia defines a 10x dev as “an individual who is thought to be as productive as 10 others in his or her field. The 10x developer would produce 10 times the outcomes of other colleagues, in a production, engineering or software design environment.” It’s not hard surprising that every company wants to attract and hire these programmers.

A development team made of these mythical coding unicorns should be able to outperform average development teams by an order of magnitude, potentially leading to massive profits. There’s just one problem with building a business plan around this, it’s completely unreasonable. Regardless, the productivity of a software team is much more contingent on effective practices and culture than any individual’s abilities. Let’s explore this a bit.

Tar Pits of Code

IBM manager Fred Brooks painted a nightmare picture of how software development could go wrong in his essay The Tar Pit. Tar pits around the world contain the bodies of mammoths and sabre-toothed tigers who blundered in, only to find the tar was a death trap; the more fiercely they struggled to escape, the deeper they sank.

Brookes’ analogy was as pointed as it was chilling. An unavoidable by-product of large software projects is system complexity. He theorized that such projects are like tar pits and programmers working on them are in constant danger of being trapped within them. It doesn’t matter how quick they are at solving problems, the rot eventually sets in and development slows to a snail pace.

A Tale of Two Companies

About a year ago, I was entrenched in one of Brooks’ tar pits. It was a small software company who had built their codebase on a sturdy – if a little old fashioned – Java tech stack. On the business side they had some respectable clients, who paid them a lot of money. Not only were they keeping the lights on, there was cold beer in the fridge. Unfortunately, this picture of paradise crumbled as soon as anyone tried to do any actual coding. 

There was no documentation (the resident 10x devs hadn’t written any), and unit test coverage for the entire codebase was less than 5% (because those same 10x devs didn’t know how to do TDD). The codebase was a monolith application, so to test any changes – even one line of code – you had to build the entire application and deploy it.

To top it off there was only one development server. Whenever anyone wanted to deploy a code change, for any reason, they had to holler “deploy to dev” to the entire room and wait for the entire room to give the ok (who said coding wasn’t a spectator sport?).

As a result, productivity was low, very low. Developers with Masters degrees in computer science were writing ten lines of code a day. The rest of their time was spent reading code or reading the server logs. When I was at that company, I couldn’t program my way out of a wet paper bag.

In contrast to this previous experience, I’m now working at a start-up which markets healthcare apps. I’m working entirely remotely, becoming familiar with an entirely new system on the job. The only other guy I talk to is my boss, and communication channels are limited to Slack and Zoom. And I’m doing fine.

There’s no documentation yet but that doesn’t bother me. Firebase enables me to deploy my code with a single command while Node lets me fire it up on my laptop. Chrome dev tools gives me real-time feedback on what my system is doing, meaning I’ve got observability in spades.

What it Takes to Maintain Speed of Software Development

For me, the moral of the previous tale is that tooling and processes matter. Developers often think that their expert knowledge enables them to make even the most cumbersome tools pay dividends. The 2019 State of DevOps report busts this myth, showing that user-friendly tools and processes are just as important for pro devs as they are for end users.

Tooling Up

The fastest software teams use off-the-shelf systems that can be easily learned and require little customization. Developers in these teams can take their toolchain for granted and focus all their efforts on what Martin Fowler called “strategic” software. This is code that enhances the product and makes money for the company.

The explosion in serverless computing, containerisation, and automated pipelines has provided a plethora of commercially available tools for painless feature integration and deployment. State of DevOps findings show 92% of the highest performing software teams use automated build tools. In 2020, there is a wealth of CI/CD pipeline solutions, the most popular being Jenkins, Azure DevOps Services and CircleCI.

Accessible Knowledge Bases

The State of DevOps also found that easy internal and external search improved productivity. Internal search covers documentation, ticketing systems and easily navigable company codebases. External search includes Google and go-to sites like Stack Overflow. Good documentation and efficient project management frameworks, mediated by tools like Confluence and JIRA, increase developer productivity by over 70%.

Trust and Respect

A final point is psychological safety. Developers solve problems most effectively when they are working with people they can trust and respect. Like Thor and his hammer, a dev with the right tools can move the world.

Tricks to Being A Better Developer

The daily routine in the world of any Developer rarely ever reaches a point of tranquility. It takes real passion and drives to be able to seize each day, ready to take on the trials and tribulations that always find a way to pop up and take precedence over the usual workload. It barely even leaves most Developers any time to sharpen their skills.

Over an extended period of time, that often leads to Developers slowly losing their zest. That typically leads to a degree of laziness, which in turn leads to mistakes being made. The good news is that there are ways for a Developer to ensure efficiency on his part. Allow me to highlight some of them.

It’s About Having The Right Mindset…

Willingness: Test the Code

There is nothing wrong with a Developer testing his own code. I feel the need to state this because there are many out there who feel that testing should solely be in the hands of other teams. There is a gratifying element that comes from Developers that are able to at least assist with quality assurance. Bugs are obviously going to happen after all, and they are nothing to be embarrassed about.

Perspective: View End-Users as Customers

Developers must realize that their job isn’t to simply complete the tasks that are at hand. That’s because the end-users should be seen as customers. Customers are counting on the Developers to solve issues to make different aspects of their lives more manageable. Empathy plays a huge role here.

Open-mindedness: Open to Experiment

No one responds well to negativity. This is especially the case for a Developer that is quick to say “no” to projects or new ideas. Though it may seem like a way to back out of time-consuming commitments that may end up breaking, it also closes the door to creativity and innovation.

Dedication: In Oneself, the Team, and Towards the Product

Developers that aim to be more efficient are expected to have an innate need to learn more- whether through conferences, seminars, or other methods. They should feel the need to stay up-to-date on ever-evolving technologies. As such, they are also expected to be true team players. Communication skills play a crucial role when it comes to sharing insights, because it may change the way other team members are doing their tasks while working towards the common goal(s). Also, while developing products, it’s important to put security first while coding, for the sake of reducing the risk of cyber threats.

…And Being Conscientious.

There are bound to be bugs in the codebase, and there are many ways to get started on finding them with log data management software. However, it’s still in the best interest of everyone to keep some precautions in place while working on code.

Good Housekeeping

Code segments should be easy to read. Otherwise, they may be more prone to harbor bugs. So it’s important to keep the code clean and up-to-date, so it would actually be read more often instead of glossed over. On that note, it’s essential to be consistent with formatting, especially with indentation and spacing. Even outside of coding- with any form of documentation- consistency helps keep things easier on the eyes.

Sentence Structure

It saves time to spend some extra time writing comments in the code using complete sentences. Yes- with capital letters and punctuation. The same applies to spelling in the comments, and with identifiers. It saves time and energy for the next person that has to go through it.

Organization

Shortcuts rarely ever work out in the long haul, because it only creates confusion. This applies to many scenarios, such as when Programmers cut and paste code patterns (and modify key elements) to save time. That only leads to a mess to read. Another mess is when too much code is placed within a logical grouping of code, such as a function. Bottom line is that if there are more than 3 layers of indentation- there’s too much in that block. That’s just as much an offense as functions with long parameter lists.

The state of being in a positive mindset, coupled with conscientiousness is what all Developers should embrace in order to be more efficient on the job.

8 Awesome YouTube Channels for Developers To Subscribe To

Do you know how sometimes you go on YouTube with the intention to extract a bit of info, then end up being pulled into the rabbit hole of irrelevant videos? Don’t waste time on worthless content! There are lots of great channels you can easily follow, to further enhance your knowledge in web development.

Have a look at these channels:

LevelUpTuts

Level Up Tuts channel

The “tuts” are short for tutorials. We like the channel because the tutorials are very easy to understand, and the production quality is spot-on. Each tutorial is in-depth, and though basic for the most part, they do a great job simplifying the most complicated concepts. The videos on this channel are created, recorded, edited, published, and maintained by Scott Tolinski.

The Practical Dev

The Practical Dev channel

This is the brainchild of the one and only Ben Halpern. On Twitter, @ThePracticalDev raked in quite a sizeable following for providing countless coding resources, commentary, and lots of humor to help lighten things up for overworked Devs. The Practical Dev is freshly making a splash on YouTube, and it’ll for sure be exciting, so subscribe and stay tuned!

Derek Banas

Derek Banas

Derek has a loyal following of over 600K subscribers, who adore him because he creates tutorials based on their requests. His wealth of knowledge is astounding. There’s a little bit of everything covered in his channel, from Python, to Java, to Android Development, UML, XML, and more. How he finds the time to do all this is beyond us- but thank goodness he does!

Google Developers

Google developers

Okay, maybe this one is a given, but I can’t not include them on this list. This channel offers lessons, talks, news, and best practices encompassing all the goods. This includes Android, Chrome, Polymer, Performance, and more (even iOS). And in typical Google fashion, everything is presented very nicely, and is easy to grasp.

The New Boston

The New Boston

Like Google Developers, The New Boston is up there when it comes to a variety of content to their vast following. You’ll find a series of playlists on their channels covering topics such as Node.js, Java, Android Development, and more. We particularly like the fact that their videos aren’t crazy long. The content is concrete and compact.

Ask A Dev

Ask a Dev

 

It has been a while since a new video has been uploaded by the team, but much of their most recent content is perfectly relevant. You’ll feel like the featured Developers are right there in front of you, teaching you how to get started on building chatbots, Slack apps, Alexa apps, and more. Skim through their videos, and see what sparks your interest.

CSS-Tricks

CSS tricks channel

 

There is an upside and a downside to this channel by Chris Coyier. The downside is that a video is only uploaded once a month. However- it ends up being one heck of an information-packed piece. Most of his videos are actually screencasts that (obviously) feature CSS tricks, which are very easy to follow along with. Check it out!

Adam Khoury

Adam Khoury channel

 

The tutorials by Adam have over 25 million views, and it’s not for nothing. By watching his videos (and with a little bit of elbow grease) most anyone would quickly be able to master development technologies like JavaScript, PHP, SQL, HTML, CSS, ActionScript, and more. If you like what you see on his YouTube page, you’ll find even more tutorials on his website, DevelopPHP.

These are all fantastic accounts you can extract a lot of valuable information from for free on YouTube. And if you feel you need additional supplemental material, there’s always the Coralogix blog! Our blog covers a broad range of topics including C# Development, Enterprise DevOps, Log Analytics, and more.

Top 3 Time-Consuming Annoyances for Developers

Developers, Data Scientists, and Software Engineers alike have a lot in common when it comes to their jobs. They are in high demand, get paid well, and are amongst the most respected in the companies they work for. On the flip side, they also share many of the same annoyances.

The annoyances I’m referring to has nothing to do with sitting all day, unrealistic expectations, or people not understanding exactly what it is that they do. I’m talking about bigger things. Things like trying to make sense of poor documentation, or other people breaking their code.

Three of the biggest offenders (in terms of being time-consuming annoyances) are definitely troubleshooting/debugging; ricochets from customers; and scaling clusters.

Troubleshooting and Debugging

ariel assaraf quote

It’s only natural and expected for bugs to pop up here and there, and Developers know to devote some time each day to track down and fix the defects. In some cases, bugs can be found and squashed in a matter of minutes. Oftentimes however, coders end up extremely frustrated as they spend many hours of development time trying to find the issues. The counterproductive feeling that stems from the extensive time lost gets very disheartening. Sometimes, Developers even end up going so deep into debugging, that they forget what the original bug even was.

Then there are the times that Developers don’t even know where to start looking. According to Yaniv Levin of Panoply, it can even be seen as “A bottomless pit, an abyss, the void… If the system is slow, just about anything could be the problem. It could be poor data modeling, improper indexing, network issues, storage hardware — basically anything.

Ricochets from Customers

Despite tireless attempts by teams to unleash perfect products to their customers- that doesn’t always quite end up being the case. Bugs have a way of slipping through the cracks, and making their way into production. That leads to endless ricochets from customers (who figure it might just be a quick fix.)

dev ninja

The constant correspondence and repeating of oneself has a way of bogging down Developers that are trying to iron issues out with minimal distractions. The main thing most people forget to keep in mind is that it takes a lot of time to publish new versions of software, even with the slightest fixes.  

Scaling Clusters

Multiple data scans are required to achieve convergence for scaling clusters. That may not seem like a big deal for smaller databases, but it’s a whole different ballgame for the larger ones. There is also the added risk of what may come to be for under-provisioned resources. Aside from obviously being far more expensive of a process, it also becomes far more time-consuming and cumbersome, especially for data scientists.

In the case of relational database management systems that need scaling, additional proprietary is required- when then opens up another can of worms for Devs to deal with. The annoyances in this case include extensive downtime, and additional configurations that would be needed to make changes.

The Solution: Continuous Delivery!

With continuous delivery, reaction times to internal and external stimuli are quicker. This is a major plus for companies that rely on their release infrastructure on a daily basis, as deficiencies are uncovered and resolved in a surprisingly efficient manner. This saves companies and their Developers weeks (or even months) of grief. A DevOps culture is an enabler for versions of the product to be sent to production at high quality and speed.

We weren’t kidding when we previously wrote about how machine learning is revolutionizing log analytics. It saves time, money, resources, and yes- sanity. Although continuous delivery and DevOps methodologies tend to be a harder sell for companies that lean towards dated traditional methods, it’s absolutely worth it once you can overcome the barriers to adoption, for the sake of efficiency at the very least.

With continuous delivery by their side, Developers can go back to doing what they do best. Creating and enhancing awesomeness.

This is what your developers are doing 75% of the time, and this is the cost you pay

https://www.slideshare.net/Coralogix/this-is-what-your-developers-are-doing-75-of-the-time-and-this-is-the-cost-you-pay?utm_source=slideshow&utm_medium=ssemail&utm_campaign=post_upload_view_cta

Following our last post on how log analytics and code analysis tools are becoming all the more essential in the world of complex and distributed systems, this post will introduce 5 amazing facts on exactly how much time is spent on debugging and code fixing in the software industry.

1) On average, a developer creates 70 bugs per 1000 lines of code (!)

2) 15 bugs per 1,000 lines of code find their way to the customers

3) Fixing a bug takes 30 times longer than writing a line of code

4) 75% of a developer’s time is spent on debugging (1500 hours a year!)

5) In the US alone, $113B is spent annually on identifying & fixing product defects

So if you thought that your developers are spending their time on making your dream a reality… you better think again, most of your budget is spent on debugging, and when debugging takes a lot of time, versions are delayed.

We found a great (and very simple) illustration of what happens to your revenue when a product release is delayed (credit to initialstate.com)

All in all, it is apparent that R&D and QA are spending ever-increasing timespans on finding and solving problems on software systems, which are getting more complex by the minute.

In our next post, we’ll discuss ways to reduce these long resolution times and budget spending.