Links to articles I read in 2024 with a few notes to remind me of the topic.
Talking to customers is not a waste of a developer's time
- Customer research is often seen as a waste of developers' time, with the belief that their main job is to write code. However, delivering code does not necessarily mean delivering value to customers.
- Developers who talk to customers understand their problems and gain insights that help them write better code. This leads to higher success rates, less waste, and more meaningful features.
- Customer insight is crucial for creating valuable software and minimizing waste. A shift in mindset is needed to prioritize customer value in development processes.
Junior to senior: An action plan for engineering career success
- "Advancing from junior to senior engineer requires technical expertise, leadership, project ownership, effective communication, collaboration, business domain comprehension, high performance, and innovative thinking."
- Create a brag document to showcase achievements, technical skills, professional development, and feedback received.
Maybe Getting Rid of Your QA Team was Bad, Actually
- "It turns out, the “One Weird Trick” to faster software delivery was not “fire your testers”."
- Blogging helps clarify and articulate your thinking. Writing forces you to organize and make sense of your thoughts.
- It's a platform for sharing knowledge and ideas, as well as for practicing writing.
- "Almost every blog post I write teaches me something new, even if the detail doesn’t end up making it into the published post."
- Be able to break down complex problems.
- Try to keep new code consistent with existing code.
Lessons Learned in Software Development
- There will always be bugs, have systems in place to quickly identify and fix them.
- Start small and gradually extend by adding one change at a time.
- Understand existing code before making changes.
UX, Then Architecture, Then Tools
- "Many coders build their systems backwards. They become enamored with the latest whizz-bang framework or charmed by the reportedly speedy performance of the newest database. And they lead their thinking with those choices as they build new features, whether those technologies are appropriate or not."
- "Using a technology-first design typically means that the user experience (UX) will be left until last. And if you put your users last in your order of priorities, it will unfortunately be very evident in your system’s lack of usability."
Scrum is dead: Breaking down the new open development method
- "Although Scrum may have made more sense when it was being developed in the early '90s, much has changed over the years. ... As our workforce world evolves, our software development methods should evolve, too."
- "When you write code in a such a way that another developer half a world away can sit down and start working on it immediately, without needing to ask any questions, you're helping improve your team's efficiency."
I'm A Developer Not A Compiler
- Interviews should not ask "nano-questions" which are not important for a human to memorize answers for.
10 Reasons Why Static Site Generators Are Perfect for Modern Web Development
- "Static site generators like Eleventy offer numerous advantages that cater to the ever-changing demands of modern web development. From enhanced performance and scalability to simplified maintenance and bolstered security, the benefits of SSGs are undeniable."
3 software development principles I wish I knew earlier in my career
- YAGNI (You Aren't Gonna Need It) - "Don’t add features or functionality to our software that we currently don’t need."
- KISS (Keep It Simple, Stupid) - "Don’t add unnecessary complexity to our software."
- Even though adding layers of abstraction seems to contradict this, it helps hide complexity.
- DRY (Don't Repeat Yourself) - "Don’t duplicate code or data in our software."
- Tiger Woods rebuilt his swing multiple times throughout his career, despite being at the top of his game. This illustrates the importance of change, adaptation, and continuous improvement.
- Performance will initially be reduced, but this prepares for future successes.
- "It can't be eternal sunshine in the productive mind. You need to let weather pass. The grey, wet days of today soak the soil for the sun of tomorrow."
Programming types and mindsets
- "Programming would be an awful endeavor if we were all confined to the same paradigm. Human nature is much too varied to accept such constraint on its creativity."
Maybe You're Not Sick of Programming
- It's more probable that you are burnt out or tired of corporate bureaucracy than that you've completely lost passion for programming itself.
How Good Is ChatGPT at Coding, Really?
- "As coding evolves, ChatGPT has not been exposed yet to new problems and solutions. It lacks the critical thinking skills of a human and can only address problems it has previously encountered."
Rules of Thumb for Software Development Estimations
- Estimates are needed for resource allocation, collaboration, and prioritization.
- The accuracy of estimations can be influenced significantly by the work culture, with supportive environments that encourage continuous learning and teamwork often leading to more accurate predictions.
- Estimation should include: breaking tasks into manageable units, drawing on past experience and data, employing established estimation techniques, and factoring in uncertainty.
- Estimation should not be based on: wishful thinking, assumptions of uniformity, ignoring external factors, or fixating on initial estimates. Instead, estimates should always be revisited and refined as projects progress and new information comes to light.
- "Don't get trapped by the sunk cost fallacy. If you find yourself passing parameters and adding conditional paths through shared code, the abstraction is incorrect."
Don't DRY Your Code Prematurely
- "Applying DRY principles too rigidly leads to premature abstractions that make future changes more complex than necessary."
- "When in doubt, keep behaviors separate until enough common patterns emerge over time that justify the coupling."
How to Be a PM That Engineers Don't Hate
- PMs should maintain a good relationship with engineers by actively participating in team activities and openly sharing research and decisions.
How To Be An Engineer That PMs Don't Hate
- Engineers should proactively communicate updates and information with the PM.
- Understand the role of the PM (product manager) - don't make them your QA team or project manager.
Making the tradeoff between speed and quality
- Quality includes providing value to the customer - prioritize that work.
- Shorten the process by breaking up the work, not by cutting corners and skipping steps.
- "The goal is... for each team to have an intentional conversation about the particular decision they’re making right now."
- Sometimes it can be useful to have comments explaining why something isn't in the code.
- such as a less efficient approach when runtime isn't a concern
Remaining Relevant Over Four Decades
- "Keep your head up and pay attention to what is new, keep learning new things, look for positions where you can make a difference, always try to find something you can do to make things better, and never settle for a lame job."
Software Developer Professional Goals
- "By embracing well-defined goals, developers can navigate their career trajectory with precision, drive innovation within their teams, and ascend to new heights of leadership and technical mastery."
- Types of career goals may include: technical proficiency, project & product management, personal branding & networking, leadership & mentorship, work-life balance & personal development.
- "[Leadership and mentorship goals] help developers transition from individual contributors to leaders who empower others and drive the success of their teams."
- "Setting professional goals as a Software Developer is essential for navigating the complexities of technology and staying relevant in a rapidly evolving industry."
- "As developers progress from entry-level to senior positions, their objectives must adapt to new responsibilities and challenges. It's essential to set goals that not only leverage your current skill set but also push you towards the next stage in your career."
The 70% problem: Hard truths about AI-assisted coding
- "AI tools help experienced developers more than beginners. This seems backward – shouldn't AI democratize coding? The reality is that AI is like having a very eager junior developer on your team. They can write code quickly, but they need constant supervision and correction."
- AI makes it easy for non-engineers to quickly build up the first 70% of the product, but "the final 30% - the part that makes software production-ready, maintainable, and robust - still requires real engineering knowledge."
- "The future isn't about AI replacing developers - it's about AI becoming an increasingly capable collaborator that can take initiative while still respecting human guidance and expertise."