Red Tape in Programming

This is a bit of a tangent from my previous posts.  I would like to note red tape, political processes, excessive concern with details, and reinventing processes to prevent others from being tricked into wasting time.  In programming and development people can be very particular.  Like artists developers sometimes think in the abstract and find themselves concentrating on the abstraction rather than the task in front of them.

Think about someone working on a car.  They might need to do a simple task like repairing a belt.  Developers sometimes see the way the belt was built, look at the engine and decide they don’t like the way things were done.  In cars most people would understand changing an engine when a belt is broken is really not necessary.  With the level of the abstractions developers deal with at times they sometimes think they can do better.

The Good

First I will speak to the good in this mindset.  Many developers have created great frameworks for the community and have built tools that can make other developers lives easier, though at the same time introducing more layers into the equation.  With all layers and abstractions in development there can be pros and cons.  Good abstractions can let a developer focus on getting the task at hand done without adding excessive complexity.  Bad abstractions can take power away from the developers and cause reliance on buggy systems that don’t always act in expected ways.

If developers didn’t think they could make the wheel better, we wouldn’t have C++, and wouldn’t have Java. We wouldn’t have lambdas, annotations, and other syntactical sugar that makes developing simpler.  We wouldn’t have XML and wouldn’t have JSON format for sending data in descriptive and concise ways that are human readable.  We wouldn’t consider best practices and make choices in development that make more reliable systems such as DRY principles.  We might not be able to compete with other companies because they are leveraging the power of work that has already been completed in the open source community.

There are great things about the many tools available because people see a problem with the current tools, and they find a way to improve them.  The entire development community can benefit.

The Bad

Throughout my career I have seen and even been a part of working on the next new type of frameworks.  I have seen multiple technologies that are similar and follow a similar need.  If I were a building architect I would liken this to focusing so much on material science or how one room is laid out that I would not really ever design the entire building.

In development there is a lot of things that can annoy other developers.  Whether someone uses tabs or spaces like in the HBO show Silicon Valley.  While following a standard is a good thing, sometimes getting too caught up in the details can cause political strife within an organization.  As it was said to me “You can be right or happy”. This highlights the bad in overly strict processes.  Further people that think they are right can be polarized, such that small things become big things.

A while back in a cafeteria I used to go to I think the dishwasher was broken one day.  All the glasses looked like they had some soap scum on them.  While I looked for a clean glass to no avail, another guy walked up picked up a glass and looked at me and said “Nothings perfect in life”.  Development should be considered the same way and it is important to choose battles wisely.

The more open source projects a person or an organization uses the more potential they have for leveraging those projects and also being leveraged as they do not have complete visibility into the code base.  Ideally smart people would be checking these code bases consistently to make sure they are secure and not introducing any malicious code into the system.  This might not always be the case.

The amount of information, frameworks, and open source projects out there is daunting.  Understanding all of them could waste a lot of time.  Organizations are very susceptible to politics within the industry and many times things will be done because that is what is expected and not because that is necessarily the best way to do things.  Political processes shape development and which technology sets we use.

Some organizations favor reuse so they spend money building their infrastructure in a certain technology.  Projects using that technology are simpler to start because they have spent money building libraries for a technology like Java or C# or PHP etc.  So the organization becomes polarized to particular technologies and might have less or no projects of the other technologies.  Developers concerns are at times orthogonal to the organizations.  They need to keep their skillsets up and work on the latest technologies so they are ready for the next big trends.

Developers have political tools as well as business people have political tools.  From a developer standpoint I understand wanting to do things right and the argument that if things are not done right we will pay that in maintenance costs later, technical debt.   Understanding the business point of view also they know that this project might give way to something else one year down the line.  So they might care more about getting things done than making sure everything is completed perfectly.

Both sides could actually use these political arguments in negative ways to destroy projects they don’t like.  If a developer wanted to see a project fail because they have a vendetta against an organization they could make the organization get so tied up in best practices and red tape that they never get anything done.  Vice versa if a business person wanted to destroy a team they could prevent developers from taking the time they need to properly prepare the system and then use that as leverage to get them fired or divert funding to another group.

We all have to believe each other is working for the best interest of the company and the projects.  There is a lot of reasons to do so, the company is paying them to do so and their career and trustworthiness within the industry hinges on this.  Other companies incentivizing, greed, jealousy, and other motivations known and unknown can entice people to act in ways that are not in the best interest of the company.

Anyone starting their own company really should have this realization.  I wish ideally we would all work to each others best interest but that is not always the case.  We live in a world of human nature.  Important to remember that everyone telling you about the next big things or which technologies you want to work with might not be on the level.  Important for leaders to do their due diligence though a certain level of trust is necessary to ever get anything done.

Understand that every person that is added to an organization adds complexity.  Ideally each person added creates a win for the company, a win for the person, and a win for society.  This is not always the case.  Some people that are hired have health problems, are emotionally torn up, or have other problems that are out of control of the company or even the person themselves at times.  Competition is a good thing and results and profits matter to a companies well being.  It would be ideal that we can help society and not leave people hurting as well.  Finding that balance is not always easy, especially competing on an increasingly global market.  The combination of these problems creates friction and considering all the variables it is very difficult to optimize alone.  Some decisions that can be best for a group aren’t necessarily best for an individual so mercy and compassion are needed for those that can be hurt by those decisions.

Conclusion

Basics of what I am getting at here is that development has aspects outside of pure technology and whether the best product wins.  A company that does great PR work might get the business instead of a company with a better product.  Important to remember there is also ways for people to introduce concepts that work like an infinite loop wasting time and bringing a corporate engine to a standstill on efficiency.  This might be more obvious at a corporate level, but this can be done to individuals as well.  Understanding concepts and new technologies is important, just don’t let the abstractions prevent you from achieving your dreams.

If I were to judge two projects, one that uses lots of frameworks and best practices, and one that spent all the time on that building functionality for the business requirement which would I choose?  Both show hard work, both are valuable.  If a project is built out of a good set of frameworks it could be a spring board for leveraging the project in a team friendly way.  If the other project completed all the business requirements yet missed some best practices, I might lean towards that project while still having the developers go back and refine the code so there isn’t a maintenance penalty later.  There is definitely a balance, and mistakes will be made, just don’t let someone get you so caught up in the exact details that you never get anything done.

Bigger team sizes can be more difficult to manage and make sure developers are working efficiently.  Having multiple architects or leads can help enable the developers on the team.  In situations where there is only one architect or lead for a large group of developers that person’s schedule can be taxed to the point they can no longer efficiently review what is happening or properly enable the group to be efficient.

From what I have seen in the industry there should probably be one lead developer per 5 developers.  With great DevOp processes, automated testing, and continuous integration this number could possibly be increased.  Though in my experience I really haven’t been at an organization where all this is perfect yet, many organizations are moving that direction but are not there yet.  Again the pursuit of perfection is admirable, DevOps is important and can help positive change in organizations.  Don’t let the pursuit of best practices bring the primary pursuit of the company to a standstill.

The same could be likened to the US government, process and regulation is important as well as a competitive market place to help make sure those regulations are properly funded.  I like clean water and I like being able to pay rent.

 

 

Published by techinfodebug

Flex and Java Developer, Christian, Art, Music, Video, and Vlogging

Leave a comment