Software development topics I've changed my mind on after 6 years in industry
The author reflects on their software development views, emphasizing typed languages for diverse teams, the importance of architecture, context-dependent best practices, and questioning the necessity of many project managers.
Read original articleThe author reflects on their evolving views in software development after six years in the industry. They now believe that typed languages are beneficial for teams with varying experience levels and that standups can be useful for monitoring new team members. They emphasize the importance of sprint retrospectives for genuine course correction rather than as a ritual. The author argues against isolating developers from direct customer interaction, as it leads to better problem understanding. They highlight the significance of software architecture, noting that poor abstractions can deteriorate code quality. The author has softened their stance on Java, recognizing it as a viable language, and stresses that clarity in code is more important than cleverness. They assert that best practices are context-dependent and that unnecessary complexity should be avoided. The author also values static analysis and prefers relational databases over NoSQL. They advocate for practicality over purity in design and suggest that many project managers may not be essential. After extensive interviewing experience, they find the process flawed but uncertain on how to improve it. The author maintains their views on code style minutiae, code coverage, and the utility of monoliths versus microservices, indicating that they will reassess these opinions in the future.
- Typed languages are advantageous for diverse teams.
- Standups can help monitor new team members effectively.
- Software architecture is crucial for maintaining code quality.
- Best practices should be applied contextually, not blindly followed.
- Many project managers may not significantly impact project efficiency.
Related
How I Program in 2024
Kartik Agaram reflects on his programming journey, advocating for minimalist software design, emphasizing simplicity, context awareness, and the potential benefits of data-oriented design to improve software quality and adaptability.
Software is about people, not code (2020)
Software development prioritizes understanding human needs over coding skills. Successful projects depend on user engagement, collaboration, and communication to ensure solutions effectively address real-world problems.
What 10k Hours of Coding Taught Me: Don't Ship Fast
The article emphasizes the importance of developer experience and software architecture, advocating for simplicity in coding, prioritizing refactoring, and maintaining code quality through structured practices and passion for the craft.
This is more a statement on how many bad project managers there are rather than on the role itself being useless. I've worked as an IC with a lot of PM's over the course of my career - I can definitely bring to mind a few PM's that left a huge impression on the project I was working on. I can think of many more that were completely worthless. I think the latter group makes developers think the role itself is useless, which I could not disagree more with. Developers are absolutely terrible at balancing business and customer priorities with technical ones, and the worst part is, many of them believe they aren't bad at that.
> People who stress over code style, linting rules, or other minutia are insane weirdos
I feel like programmatically enforced linting is like keeping a shared house clean. Suppose you live in a house with roommates. You wipe off the counters, you clean up after yourself, you put dishes in the dishwasher, so that the house is tidy and pleasant. If there's a lint or style rule that requires judgment and is hard to enforce programmatically, perhaps better left as an occasional PR comment.
Programatically enforced linting also has the benefit of removing degrees of freedom that aren't very important and don't merit getting bogged down about.
If you're relying on a daily standup to keep the newbies on track, then something is deeply broken with your management and people development structure. They should be continually coached one-on-one, rather than left to fend for themselves only then to pipe up once per day. A little time investment by both the noob and someone more seasoned really, genuinely helps them to get up to speed. It's something that will pay itself back many times over in the future.
I've experienced both when I stepped in as a greenhorn, I leveled up so much faster when I had the ability to pepper questions throughout the day to someone more seasoned. And I remember feeling discouraged and listless in a culture where you don't interrupt the senior people, wait for the standup, regurgitate your problems, speak the scrum prayer every morning.
Does it cost something in terms of efficiency, or vElOCiTy? Sure, but like I said above, the returns on investment compound when you really care about developing people, and not being a slave to the scrum process.
Stressing over these things is certainly a Sisyphean task.
However, investing in automating and standardizing the application of these things every time a new repo is created eliminates an entire class of problems and saves you all sorts of trouble down the road.
I resonate with this greatly. I'm in the middle of applying for jobs, and I try to put myself into the recruiter's shoes. At the end of the day, I don't blame recruiters for the calls they make (e.g. ghosting, denying for $REASON).
When you are supposed to interview a potential software dev, how are you going to differentiate the people you should invest into from the ChatGPT extension? How do you know whether the person actually worked at $FAANG_COMPANY for 3 years? Don't forget the other 78 people that also applied for the job.
> Software architecture matters probably more than anything else. A shitty implementation of a good abstraction causes no net harm to the code base. A bad abstraction or missing layer causes everything to rot.
> Pencil and paper are the best programming tools and vastly under used.
> Code coverage has absolutely nothing to do with code quality.
> Micro-services require justification.
It is quite indicative of documentation quality, though, which is most important as a codebase ages. You may know how it works now without documentation, but future developers (which may include you) are going to want more information to know what kind of expectations are found around the code.
I'm going to disagree respectfully here. I don't think hard-and-fast rules on code coverage are useful (e.g. must achieve 90% coverage before merging), but just having code coverage run automatically and its results displayed is useful. When I add an "if" check and one of the branches isn't covered for example, I start to think what if some junior engineer didn't understand the reason behind this "if" check and decided to delete this check altogether? If no unit tests fail after deleting this check, that junior engineer might not have enough context to judge whether this check is needed in production.
... and thus should include only project managers and/or team leaders and leave the rest of the professionals to do work and provide status updates via the bug tracker
Related
How I Program in 2024
Kartik Agaram reflects on his programming journey, advocating for minimalist software design, emphasizing simplicity, context awareness, and the potential benefits of data-oriented design to improve software quality and adaptability.
Software is about people, not code (2020)
Software development prioritizes understanding human needs over coding skills. Successful projects depend on user engagement, collaboration, and communication to ensure solutions effectively address real-world problems.
What 10k Hours of Coding Taught Me: Don't Ship Fast
The article emphasizes the importance of developer experience and software architecture, advocating for simplicity in coding, prioritizing refactoring, and maintaining code quality through structured practices and passion for the craft.