Personal Software Developer Growth Plan



Knowing every framework, tool, language and library is not possible, nor is it the goal of a software developer. This is a (continually improving) personal plan to help me grow to become a strong engineer capable of solving hard problems.



Career Advice



Intermediate learning content


  • Build, build, build, then get feedback
  • Build independent projects
  • Contribute to open source

Phase 1: Focus on a simple web stack

As someone who’s transitioned into tech from a previous career trajectory, I don’t have the bandwidth to go back to university for a 4-year CS degree (even though I would love to).

But to give me the financial margin to be able to self-teach myself fundamental CS, phase 1 is all about building the productive skills to be employable as a working web developer at 80% of companies.

To prevent me from falling into the trap of only mastering frameworks and libraries, this phase is timeboxed to 1 - 2 years. After that, there should be enough momentum for me to continue growing as a strong intermediate developer able to devote time to the core CS fundamentals.

Pick a versatile programming language (ruby)


Under the magic

Pick a battle-tested framework (rails)


Under the magic

Pick a front-end library (react)


Under the magic

Javascript + Typescript

Data storage (relational databases)

Core tools for the working developer

Source control (git)

Unix and CLI

Text editor


According to the Pragmatic Programmer, you should be able to do the following actions with your text editor of choice with only the keyboard:

  • Edit text by selecting by character, word, line, paragraph
  • Move selected character, word, line, and paragraph
  • Find exact/partial matched word, pattern, delimiters, function, etc
  • Indent and reindent block of code
  • Comment and uncomment blocks of code
  • Undo and redo changes
  • Split the editor window into multiple rows or columns, and jump between them
  • Go to a specific line number
  • Sort selected lines by descending and ascending
  • Create multiple cursors to select and edit the text in parallel.
  • Open new terminal and problem windows in the current project.
  • Start service and run all/specific test cases in project

Chrome dev tools

Developer experience tools

Important web concepts

Phase 1.5: Learn the craft of software development

Writing maintainable code

Testing software

Setting up production infrastructure

Cloud tools

  • Heroku
  • AWS

Monitoring and observability

  • Logging
  • Exceptions monitoring
  • Defining and monitoring SLA’s and SLO’s


Scaling concerns

  • Horizontal vs vertical scaling
  • Database sharding
  • Caching techniques
  • Redis
  • Monolith vs microservices architecture
  • Background workers

Systems design

Application security

Phase 2: Computer science fundamentals

After gaining momentum on the skills that guarantee a degree of employability, 80% of learning efforts should be spent diving into the slow-changing CS fundamentals. The other 20% can be spent refining the skills in Phase 1.


Specific: low-level programming

Recommendations from co-workers on low-level programming resources.

Healthy reminders and inspiration

Peak under the magic

  • Start to peek underneath the “magic”
  • Re-build the tools, read the source code instead of the docs, and contribute to the open source
  • Look for courses that teach how to build the tools from scratch in addition to courses that teach how to use them
  • Play around with the source code and see what breaks

There is no rush

The place of books

  • Books are collections of learnings authors have gained over time by actually doing things and making the mistakes
  • Books are not a primary way of learning craft-based skill sets
  • Books are there to refine a craft using knowledge, mistakes, and learnings from those that have gone before
  • You do not learn to ride a bike by reading about it
  • Improve the consumption of books by stopping just before the author implements the solution and first really trying to implement it yourself. Then compare to see how the author did it

The place of courses

  • Courses are also not the primary way of learning craft-based skill sets
  • Courses are there to get you started or introduce a new concept or tool
  • Can improve the consumption of course by building along with the instructor
  • The goal is that after the course you then build independently
  • Improve the consumption of courses by stopping just before the instructor implements the solution and first really trying to implement it yourself. Then compare to see how the author did it
· growth