Notes that's relevant to me while I was reading Skills of a Successful Software Engineer, by Fernando Doglio.
Overengineering is the art of creating complex solutions for simple problems. YAGNI.
There are no random bugs, every problem has RCA
Performing a root cause analysis (RCA)
Always focus on 3 questions
Why is it happening?
How can you solve it?
How can you keep it from happening again?
5 Whys approach.
Think like a 5 years old and keep asking why. Why did this happen, why is slow, why didn't we do better, etc
Remember that technology that you're using is nothing but a tool. Don't get attached to language, tools, etc.
You can jump from language to language
You can translates concepts from one language to another
GET OUF THE BOX!
Always be on the lookout for the best practices specific to the tech you're using (KISS, DRY, SOLID). You don't need to memorize, just keep it in the back of mind to ensure quality code.
Good code beats perfect code every time. Optimizing code is only required once your code works.
Bad code can be a great starting point
Documenting your code is a must. Self documenting code is a lie.
Testing
Each test should test one thing only.
Make sure you test a unit of code. Atomic piece of logic that's complex enough to be tested
Only test your own code. Don't waste any time writing tests for third party library or frameworks
Don't test external calls (DB query, HTTP request, etc). It's meant to be run in isolation.
Only tests what's on the rug. What we can see. In this case public interfaces & properties
use dependency injection to manage external dependencies
master the 4 concepts - mocks, stubs, spies and dummies
Refactoring
How do you make sure your changes doesn't break existing behavior? TESTS!
Have a plan for your refactoring.
Make sure you understand exactly why you're doing it & focus on that. A clear goal is key to successful refactoring.
It will never be perfect, so don't aim for perfection. DON"T OVERDO IT!
Think about these 3 things to decide whether the refactoring is worth it or not
How much valude is your change adding?
What's the impact of your change?
Do you have enough time to refactor the code without affecting your team's timeline?
Learn to communicate with others. Having a great communication skills makes for a great developers.
2 ways of communications
Direct -> being in front of the audience, talking directly
Indirect -> write articles, create videos, build online courses
Find ways of getting feedback
Interview process is not only meant for the company to know you. It's a great opportunity for you to know theme. Ask questions.
Don't lie during interview or in resume. Stay away from absolute statements.
Overtime is not mandatory nor should it be expected of you
Working in a team
Task tracking is not eveil. Make sure it's always updated. Put yourself in the shoes of your manager.
On meetings
Be there on time & avoid chit chat.
Prepare for the meeting, don't just "wing it"
Make sure there are actionable items at the end of the meeting
Align with everyone in the meeting by sending the meeting's minutes afterwards
Don't reinvent the wheel
Make peace with your testers
Leave your ego at the door
Socializing with your team is just as important as doing good work
Make sure you keep learning new things and compare your progress with yourself.
Key traits of a good leader
They like to challenge the status quo
They set clear expectations for everything
They create a clear plan for success
They prioritize the team over themselves
They constantly look for sustainable results
They constantly try to improve themselves
They build networks and always looking for external collaborations
90-10 rule
First 90% of the project is finished within 10% of the time while the last 10% of the project require 90% of the time
Scope creep -> if you see this happening, raise it up and talk about the effect it'll have on the delivery date
Leave unknown for the last -> if you notice you're working on a feature based on assumptions, raise it up. Cause there's a huge risk of rework if it's not addressed.
Feedback should be mandatory. Both for leader and team members.