Great question! I love all these skills - They are all very important for a software engineer, and school is indeed quite bad at teaching them.
Writing In An Easy To Understand Way
- The best way to get better at this is to get feedback. Sometimes your audience will tell you that they have no clue what you wrote. If they don't, you can always ask. Find the most junior engineer that's connected to whatever technical writing you put out and ask for feedback.
- Honestly, I feel like going through the ELI5 subreddit is a good way to build up this muscle.
- For advice on how to do clear, accessible technical writing (like software design documents), check out this Q&A from a Microsoft engineer: "How to improve on non-technical skills like writing Software design document?"
Writing Code So Future You Doesn't Hate You
- The same feedback concept applies here. Find the newest engineer or the most junior engineer on your team (bonus points if these are the same person!) and ask them if your code makes sense (just put them on your code review).
- Of course, just revisiting your code helps a lot, and I wouldn't do it after 2 years, 3-6 months is probably enough. If you do this introspection properly, future you will definitely have thoughts on how this code could have been structured to make it easier to grok.
- For me, I did this all the time with my side projects. I went for depth over breadth, so I copy-pasted code from old apps a lot. Since I had to read my own code constantly, I became very attuned to why it sucked.
How To Show Off Work You've Done
How Much Testing Is The Right Amount
- It varies a ton based on circumstance, and there's really no right answer here. While the previous 3 questions are more well-defined in terms of good principles, this one is incredibly hazy. I also came from Meta, so I'm sort of a black sheep here (Meta probably has far fewer automated tests compared to peer companies).
- I go in-depth on how I think about automated testing efforts in this discussion: "What's the best way to carry out an end-to-end (E2E) testing effort?"