DEV Community

What Not to Do as a Programmer - My List After 2 Years of Working In Teams

Haseeb on July 19, 2019

There is a lot of content out there discussing what you need to do to become a good programmer. What concepts you need to understand, what technolo...
Collapse
 
dploeger profile image
Dennis Ploeger

Great list and absolutely true. I saw most of these points especially on seniors and I say that considering myself a senior as well. 😉

Also, I cannot stress 8 and 4 enough! I'm trying to work with a "make yourself replaceable" attitude: document stuff, engage and empower the team members, communicate. There's nothing worse to be called up when on vacation.

Collapse
 
scottishross profile image
Ross Henderson

Making yourself replaceable makes you irreplaceable because no one else will be that type of developer.

Collapse
 
dploeger profile image
Dennis Ploeger

Hm? What do you mean?

Thread Thread
 
scottishross profile image
Ross Henderson

By being the member that is fully communicative, documents impeccably write code for everyone else, you are much harder to replace. :)

Thread Thread
 
dploeger profile image
Dennis Ploeger

Ha! That's why it's working so good. 😂

Thread Thread
 
ludamillion profile image
Luke Inglis

The team I'm on is about to lose someone who manages to be both. He's an amazing developer who can do stuff twice as fast as the rest of us but also documents and shares everything and doesn't hesitate to help anyone.

We hate to lose him but the plus is that he's the kind of guy who is leaving everything we need to get up to speed.

Thread Thread
 
haseebelaahi profile image
Haseeb

I think he's probably doing the best both for you and himself, you'll be able to function effectively even without him and he'll always be remembered as a good guy in the company who laid foundations for everyone.

Thread Thread
 
gezzy4reall profile image
Brano

Mr Haseeb... Please, can you help make a list of this ?

"What one need to do to become a good programmer. What concepts you need to understand, what technologies you need to learn, what tools you have to know..."

Thread Thread
 
haseebelaahi profile image
Haseeb

These are all very open-ended questions which a lot of people have tried to answer over the years. I'll surely share my opinions when I think I have something solid and productive to add.

Collapse
 
analizapandac profile image
Ana Liza Pandac • Edited

Awesome list Haseeb 👏👏👏

I am guilty of some of the points that you included here especially no. 1, 2 and 3 but I'm working on that 😌

If I may add one thing, it will be:

Do not be limited by your role or job title.

Just because your title says you're a frontend engineer, backend, etc, it does not mean that you should limit your team or project involvement in that specific area only.

Participate in the team discussion when there's a new feature, an issue occured and you're all coming up with the best solution.

Trust me, you will gain a deeper knowledge on the project, it's overall architecture like how the API is structured. Because even though you don't have a lot of experience on that area, you can provide a different perspective on how to approach the problem.

What you suggested may not be the solution but your insight can help your team members look at the problem in a different way, they can build upon it to come up with a better solution.

Collapse
 
analizapandac profile image
Ana Liza Pandac

In my personal experience, there were times where the answer came from a different source. For example, there was a time where we experienced several server downtime in a day, our backend engineers initially thought it was caused by an unoptimized code and so they optimized it but still the problem keep occuring. It was not until I suggested that maybe it is a DDOS attack and it was actually a DDOS attack.

Another time was when I was the one facing a problem on the frontend, our iOS engineer came up to me and suggested me "why don't you do this instead". He came up and suggested me a brilliant idea which we used to come with the solution. I was really grateful to him for that, it saved me a lot of time.

Build on each others ideas.

And speaking of that, here's a quote from Isaac Newton which I believe is relevant to that idea.

"If I have seen further than others, it is by standing upon the shoulders of giants."

Collapse
 
haseebelaahi profile image
Haseeb

Yep, this is a very good example. I am sure your confidence and the feeling of belonging to the team went high after participating in something that was out of your job description. It's these little things that help us stay motivated and move forward!

Thread Thread
 
analizapandac profile image
Ana Liza Pandac

You're totally right, participating in those kind of discussions also add some sense of camaraderie among our team since I know that I can always rely on them and they can rely on me during challenging situations.

Collapse
 
lyriczonna profile image
Lyriczonna

Hmm... Word! @Newton's quote.

Collapse
 
haseebelaahi profile image
Haseeb • Edited

Thank you for the kind words, Ana! We all have been guilty of these at some point in our careers, but hey this is how we all learn.

Do not be limited by your role or job title.

This is a great point I think, this is how you grow as an engineer/dev/programmer. If you want to be a leader in the team this is the right way to go. Having a 360 view of things also helps you put your work into perspective and understand how everything fits together.

Collapse
 
guitarkat profile image
Kat • Edited

True. However, depending on the culture or individual sense, even if you feel that you are not tied down to a title but you have a decent idea and it's not your area, you can have pushback... do not worry. I ended up speaking directly to others to gain more understanding and it made it easier moving forward for my ideas and troubleshooting.

Being seen as just x or just y is not encompassing of all our abilities and it sucks when people push it on... when you have also their education as well or other experiences they may not know about.

Have respect and listen to your teammates, please. Good ideas come from everywhere and better ones come from more than one person as its worked on, vetted and applied. There is not just one single person.

The mistake is not one limiting people to title, it is also assuming things, and thinking only one person has "the idea" and that's it. It takes the team.

Collapse
 
tijmenvanderkemp profile image
Tijmen van der Kemp

I agree with all of your points, but regarding nr 7 (don't point fingers):
We don't blame people externally, so we take responsibility as a team, but we do find out who did it internally and explain what went wrong to them, so that they don't do make the mistake again. If you can always do this in a playful/constructive way, you're an excellent team.

Collapse
 
guitarkat profile image
Kat • Edited

Fair, but usually the person has to accept the responsibility of their part. I'm responsible for my code. If you are honest with yourself, it's easy to say "Sorry guys, I screwed up", but I have felt in some places that it was unsafe to do so, which is unfortunate because it prevents people from taking responsibility, because they are shamed or judged upon it.

Currently I feel safe saying I screwed up and it really helps. You also have more mental room to catch things before they become bigger issues down the line.... I consider it a very important part of culture.

I've found making it safe for people to report issues or safe for saying "I screwed up" helps the team. :)

Collapse
 
haseebelaahi profile image
Haseeb • Edited

Great points Kat!

Collapse
 
haseebelaahi profile image
Haseeb

Totally agree with your point. Understanding your mistakes and not making those again is how you grow as a professional.

I think what I wanted to say is that in time of crisis or failure it is not nice to have a culture of throwing the blame off your shoulders and on others. Definitely, a good practice to have a calm and cool discussion later to find out what went wrong and who was at the heart of it.

Collapse
 
yuripredborskiy profile image
Yuri Predborskiy

This is excellent. I wish I could apply this approach in every company where I work. It doesn't help if we don't investigate the mistake and don't try to learn from it.

Collapse
 
adam_cyclones profile image
Adam Crockett 🌀 • Edited

React engineer, really? Wow that's a bit ... Okay that leads me to a problem I have with the industry, I have been in the JavaScript (and more) game for quite a few years. All the jobs today look for experience in React or Angular or Vue. But do you know what SHOULD superspeed this, being damn good at JavaScript and an excellent developer, but noooo we want React engineers 🤦‍♂️, it's like saying I want a Bagel mechanic instead of a Baker.

Collapse
 
aarone4 profile image
Aaron Reese

I would take it one step further. You want people who can code. How to think through a problem logically and then execute in the language/framework of choice. What happens to those JavaScript Devs when we all switch to web assembly and blazor

Collapse
 
adam_cyclones profile image
Adam Crockett 🌀

Like me, I would hope that they would have spent some time working with WASM, which is still very much a symotic relationship with JavaScript, which is still required, I know because I wrote a Lua to JavaScript interop framework.
Besides WASM at the moment is very much an MVP, I highly doubt there will be a mass extinction event for JavaScript for atleast another 10+ years.

I do agree however, "I am developer" is a very positive mindset and desirable.

Out of interest why did you pick Blazor for an example?

Collapse
 
haseebelaahi profile image
Haseeb

Well, that's what the point is. Don't define yourself with a language/framework. If we switch to web assembly and blazor today all good devs would switch to it eventually without advocating for 'React' only

Thread Thread
 
adam_cyclones profile image
Adam Crockett 🌀 • Edited

Enter react C# equivalent. If only WASM had true direct access to the DOM, but it must go through JavaScript.

Collapse
 
haseebelaahi profile image
Haseeb

Unfortunately, when most of the people starting their careers look around and see that almost everyone is working on the same thing, every company is demanding engineers with experience on that technology, the impression they get is that this is the only thing they need to learn to do great in their careers.

Collapse
 
guitarkat profile image
Kat • Edited

They are hiring wrong and it's unfortunate that people get impacted by the practice of the current trend, IMHO....

If you are a capable dev, you can always learn. May take a little longer but if they are good at running their team, department or company.... they should understand this.

Pick up traits of devs, not a particular framework sometimes. By traits, I mean different degrees of traits to get the fit correct. I can be risky at times at initial phases but near prod I have a good sense of risk. That is a good thing.

Some places just want the latest thing so they seem cutting edge or whatever. It seems pretentious and not necessarily the better solution for the need of the company or the problems at hand.

Collapse
 
dlnr profile image
Niels Roozemond

I would add

Don't reinvent the wheel

Many developers I've come across are disappointed in a particular CMS or framework, then struggle for long periods of time to build it themselves, and then realise that what they've built is hard to maintain and definitely not an improvement on what they were trying to reinvent in the first place.

Collapse
 
yellowhill profile image
Yellowhill

I had this exact problem in my last job. The lead dev did not like Redux, so he decided to build his own state management library, which the rest of us had to learn to use with minimal docs. Suffice to say this also caused all sort of problems with other libraries and of course there was the issue of him creating newer versions that were not backwards compatible.

I know this comment goes against rule 7, but I had to vent :D

Collapse
 
adam_cyclones profile image
Adam Crockett 🌀

Thow shalt not over engineer. (That's something I just can't shake)

Collapse
 
andrewharpin profile image
Andrew Harpin

Or the KISS principle. Keep It Simple Stupid

Collapse
 
adam_cyclones profile image
Adam Crockett 🌀

Mini! I'd flash you if I still had mine 😟

Thread Thread
 
andrewharpin profile image
Andrew Harpin

The picture isn't mine, I have one, but no where near as good condition

Collapse
 
haseebelaahi profile image
Haseeb

Haha 😆

This is something to stick to forever, should add this one to the list.

Collapse
 
adam_cyclones profile image
Adam Crockett 🌀 • Edited

Do it, but simply wrote, not to many thrills just the MVP ⚡

Collapse
 
konradmorawski profile image
Konrad Morawski • Edited

For some of the points, I would add - be that way, but don't automatically assume others will as well.

Yes, you shouldn't "take criticism or negative feedback as a personal attack". But the robustness principle applies here: be conservative in what you do, and be liberal in what you accept from others.

Other co-workers are only humans, and they may not be able to accept dry criticism. Yes they shouldn't be attached to their code, but they always will. We naturally are kind of attached to something into which we've invested hours of work, even if we know it's better not to. And you're particularly likely to be perceived as aggressive or confrontational if you criticize in writing (as in in code review). It's easy to fall into the Sheldon Cooper syndrome, whereby in your mind you're only pointing out facts, while you come across as a douche to the people around you.

For that reason I would recommend some extent of cautiousness in critizing others.

  • Never assume bad intentions or incompetence by default. My key phrase in code review, whenever I suggest what seems to be a clearly superior alternative, is: "what am I missing?". By stressing that I understood they could have had some valid reasons for what they did, I make the criticism much easier to swallow. And guess what - once in a while I am indeed missing something :) And then I'm quite glad I spoke out with some reserve.

  • Sweeten your criticism up with a bit of praise. For every 10 critical remarks I leave in a code review, I try to find something that I like and point it out. It costs nothing, and it creates a more friendly atmosphere.

  • Another keyword that I like is "we". "I'm afraid you're making this function too complex, you really shouldn't be mixing async logic with business logic here". No: "Aren't we making this function too complex? We shouldn't be mixing..." - and so on, you get the idea. It costs absolutely nothing, and it communicates a totally different approach. Collaborative, non-confrontational, goal-oriented and helping to detach everyone from the code they wrote through positive, constructive mindset.

Just my two pennies.

Collapse
 
haseebelaahi profile image
Haseeb

Thank you for writing these down Konrad. All of these make absolute sense and are very vital traits to learn to promote an environment where nobody feels attacked, questioned, or not trusted enough!
Students coming from cut throat academia competition environment should understand these as soon as they can!

Collapse
 
obstschale profile image
Hans-Helge Buerger

Great summary. Espacially point 3 is so true. I work as Software Engineer for over 6 years now and I started with PHP and still write PHP. But as you might know, PHP is not the most loved language out there ;)

But still, I like it. Not because it is PHP but I discovered that I can do many things with programming and I learned that it is not the language. I have been part of so many discussions about "The best language" or "PHP sucks". But nowadays I simply ignore those and keep going. The language (or framework) don't define me as a programmer.

The same is true for so many things: Mac vs. Windows, Nikon vs. Canon, etc. People seem to like to identify themselves by their products. But in the end they use "just" a computer, or taking photos. The photography community like to say: "It's not the camera, that takes the photo, but the photographer."

Collapse
 
hamsterasesino profile image
Gabriel

I see #4 all the time. There's always the expert guy who is the expert because he gets all the work and continues to get all the work because he is the expert.

And then management is like: "yeah we know but we gotta get this done"

Collapse
 
guitarkat profile image
Kat • Edited

.... management is getting pushed around lol... No offense but they got to do better than that. It's a hard job to be unwavering when they start pushing hard, but your leads/manager/whomever gotta help out to negotiate. They are going to cripple their team....

It goes faster long term to include everyone but someone has got their short sighted glasses on as well.

This can come from many sources, from what I've noticed.

Collapse
 
hamsterasesino profile image
Gabriel

Totally agree. It was both management being short sighted and Devs not stepping in.

Collapse
 
codingmindfully profile image
Daragh Byrne

9 - Stop trying to change the things you cannot change (eventually). It is positive and useful to argue that a particular framework should not have been used, architectural decision should not have been made, vendor should not have been overlooked and so on... but, sometimes you are just stuck with the results of decisions made long ago, that will not be unmade anytime soon. Sure, I'd much prefer that the heavyweight Java services in my current project were actually lightweight Node endpoints or even written in Golang, but the client has spent thousands of hours and many, many dollars building on that stack, so it's not going anywhere right now. Roll up your sleeves, and learn to work within that limitation.

Great list. As a senior I have to remember (4) in particular. It's always my goal to make myself dispensable.

Collapse
 
haseebelaahi profile image
Haseeb

This is a great point Daragh!

I had something similar in mind when writing #6 (Do Not Keep Complaining). Teams which know their limitations and find solutions within those rather than spending hours of discussion on 'what should have been done' are happier I guess and more productive.

Collapse
 
codingmindfully profile image
Daragh Byrne

Yes I was originally thinking of it as 6(a)!

Collapse
 
mt3o profile image
mt3o

Oh i'm definitely to be blame for 4. And 8.
1 and 3 are signs of being a grown-up.
2, well, you have to understand that you can't know everything despite your ambitions.
5,6,7 are great advises everywhere in the life, not only in the office, inside the team. I value people who see problems and look for solutions, who see beyond verbalized fears people have.

Collapse
 
shymi profile image
shymi • Edited

Great article!

For 7 - currently the atmosphere is not judgmental, but because on several occasions different devs(including me) stood up and said in front of everyone "Sorry guys, it's my fault. I'll fix it." everybody started to take responsibility(at least for most of the time).

For 6 - unfortunately recently on several occasions I see no desire to even discuss problems or take actions, that affect all of the teams, even when ideas to fix them are presented. It is really frustrating and sometimes ruins my mood.

Collapse
 
edanfesi profile image
Edward Fernández

Awesome list Hasseb!

For so long I thought that programming was my life and if I didn't write code I had nothing. Almost all the time I was sick and tired but when I realize I had to have a life outside of the code and I had to recover those boundaries everything improves in my life.

So, to every person in the coding work be careful and do not remove your Work-Life boundaries.

Collapse
 
ukaemma2 profile image
Ukah Emmanuel Ogbonna

Nice one

Collapse
 
kopseng profile image
Carl-Erik Kopseng

Nice article. Many juniors should internalise this, including my younger self ...

Collapse
 
anwar_nairi profile image
Anwar

Agree, and many companies should print and display this list in every IT department! Mostly the job/personal life balance...

Collapse
 
ramong1145 profile image
Ramón Gallo

Awesome insights... I only deffer from the Pointing Fingers part. I think that everytime something goes wrong there should be someone representing that process that everyone should keep an eye, not specifically to tell them "this is all your fault" but to try to avoid these mistakes in the future, in special when you are part of a team where everyone is rotating from a roll to another. This is where team work should come in hand and someone that has any knowledge related to the topic should say "hey man, got your back let's do this together". Let people do mistakes, take responsability, and rel on the team for a solution.

Collapse
 
thecodingalpaca profile image
Carlos Trapet

"1. Do Not Fall In Love ❤️ With Your Code" - so true, yet I fail to avoid this every time!

Collapse
 
thevetdoctor profile image
Obafemi

Hi haseeb, lovely write up. Pls can ubhelp with some remote gigs. I work with JS and PHP. Majorly back end. Thanks

Collapse
 
andreasjakof profile image
Andreas Jakof

Great list!
There is some great universal advise. But 1. is definetly worth mentioning. Learn to love throwing away code. Especially it it is your own.

Collapse
 
orballo profile image
Eduardo Campaña

Always blame the code, never blame the developer.

Collapse
 
danjconn profile image
Dan Conn

That's an awesome list.

Collapse
 
pzelnip profile image
Adam Parkin

Awesome list, so very much resonates with me.

Collapse
 
claudiobernasconi profile image
Claudio Bernasconi

Great article! For me, number 4 is the most important point on that list. Well-written article, congratulations!

Collapse
 
thevetdoctor profile image
Obafemi

Hi haseeb, lovely write up. Pls can u help with some remote gigs. I work with JS and PHP. Majorly back end. Thanks

Collapse
 
ezk2410 profile image
Esakki Krishnan

Great list and agree with all of them thanks for the insight

Collapse
 
candidodmv profile image
Vinicius Dutra

I agree with everything, thanks for remember these very important rules

Collapse
 
developers profile image
Dev-elopers

Fantastic!