The pathway to professional growth at Planet Argon is clearly laid out through our structured developer role tiers. These tiers outline the expectations, skills, and advancement opportunities associated with each role and provide a roadmap for personal and professional growth within our organization.
| Skill | Ruby on Rails Developer I | Ruby on Rails Developer II | Ruby on Rails Developer III |
|---|---|---|---|
| Industry Experience | |||
| 0 - 3 years, which can include: | 2 - 5 years, which can include: | 5 - 7 years, which can include: | |
| - structured education | - education | - education | |
| - self-guided education | - internships | - internships | |
| - internships | - contribution to open-source projects | - contribution to open-source projects | |
| - contribution to Open-source projects | - support engineer, QA, and other dev-adjacent industry roles | - support engineer, QA, and other dev-adjacent industry roles | |
| - support engineer, QA, and other dev-adjacent roles | - junior developer roles | - junior and mid-level developer roles | |
| - team lead roles | |||
| --- | --- | --- | --- |
| Ruby | |||
| Confidently uses the basic elements of the language, such as data structures, variables, methods, loops, and conditionals | Pairs with and mentors other mid and junior level developers on Ruby fundamentals | Pairs with other developers on Ruby fundamentals and more advanced Ruby design patterns, modifying gems, and custom rake tasks | |
| Has started learning basic creational and behavioral Ruby patterns | Has begun using more advanced creational and behavioral Ruby patterns in their work, such as factories, prototypes, iterators, state, and templates | Understands and uses more advanced creational and behavioral Ruby patterns, such as factories, prototypes, iterators, state, and templates | |
| Understands the core concepts of object-oriented programming, such as classes, modules, objects, and inheritance | Understands the Ruby behind some common Rails tools, such as Active Record and autoloading | Explains the Ruby behind common Rails tools to more junior developers in pairing and mentoring sessions | |
| Understands the basics of data persistence | Coordinates with tech lead or senior developers to fork and modify gems to serve app requirements | Forks and modifies gems to satisfy app requirements | |
| Creates simple rake tasks to automate specific actions | Creates custom rake tasks to automate specific actions | ||
| --- | --- | --- | --- |
| Rails | |||
| Understands the MVC paradigm and can place business logic, actions, and views in the appropriate layer in existing code with minimal guidance | Understands the MVC paradigm and can place business logic, actions, and views in the appropriate layer in new and existing code with no guidance | Understands the MVC paradigm and designs layer architecture for refactors or new feature development | |
| --- | Uses the Rails CLI to generate new code, start the Rails console or server, and create or update the database/schema | Uses the Rails CLI to generate new code, start the Rails console or server, and create or update the database/schema | Uses advanced Rails CLI commands to generate or destory code, manipulate the console or server, manage and precompile assets, manage the database/schemas, track down routing problems, and create and run custom rake tasks |
| --- | Understands and uses basic Rails RESTful actions: index, show, new, edit, create, update, and destroy | Understands and uses basic Rails RESTful actions: index, show, new, edit, create, update, and destroy | Uses advanced understanding of Rails RESTful actions to design the routing system and controller actions of new Rails development and refactoring efforts |
| --- | Uses Active Record for basic ORM actions: reading and writing data, validating data, and migrating databases | Uses Active Record for basic ORM actions and creating and querying more advanced associations; takes advantage of optional column names to add additional features to Active Record instances | Uses advanced Active Record queries for complex associations, joins, and aggregations |
| --- | --- | Understands and adheres to Active Record naming and schema conventions | Advocates for adherence to Active Record naming and schema conventions when reviewing PRs and pairing with other developers |
| --- | --- | Uses Action Mailer to create, edit, and call mailers and mailer views | Uses Action Mailer to create, edit, and call mailers and mailer views |
| --- | --- | Can create custom routing, particularly for authentication and authorization | Knows when and how to organize groups of controllers under a namespace; understands and uses singular, multiple, and nested resources; knows how to avoid deep resource nesting; knows when and how to use routing concerns |
| Databases | |||
| --- | Leverages basic knowledge of SQL logs to identify general database activities and behaviors when utilizing ActiveRecord, with a focus on recognizing simple query patterns and potential errors | Analyzes SQL logs adeptly to gain a nuanced understanding of the database operations occurring through ActiveRecord use, including the ability to optimize queries, diagnose issues, and propose solutions to enhance performance and security | Expertly reads and interprets SQL logs to uncover deep insights into database functioning under ActiveRecord operations, demonstrating the capacity to fine-tune system performance, strategize database scaling, and mentor junior developers in SQL log analysis and ActiveRecord optimization techniques |
| --- | Has foundational skills in utilizing PostgreSQL or MySQL for basic database management tasks, including creating, reading, updating, and deleting data entries | Exhibits proficiency in managing databases through PostgreSQL or MySQL, demonstrating abilities such as optimizing database structures, implementing security measures, and tuning performance to support robust application functionalities | Masters the advanced functionalities of PostgreSQL or MySQL to architect highly optimized and secure database systems, along with showcasing an expertise in complex tasks like database replication, partitioning, and developing strategies for high availability and disaster recovery |
| --- | --- | --- | --- |
| Frontend | |||
| --- | Uses CSS to style Rails views | Uses CSS or SCSS to style Rails views | Uses CSS, SCSS, or SASS to style Rails views; can use SASS libraries to enhance app styling |
| --- | Knows fundamental HTML elements and how they work with ERB | Has a strong understanding of HTML and how to use ERB to create views templates | Is fluent in both HTML and ERB; takes advantage of views templates to modularize Rails applications |
| --- | Understands the basics of JavaScript, especially how similar Ruby concepts such as conditionals, loops, objects, and methods are syntactically different | Understands the basics of JavaScript, especially how similar Ruby concepts such as conditionals, loops, objects, and methods are syntactically different | Has a strong grasp of JavaScript, the similarities and differences between it and Ruby, and event-driven JavaScript patterns |
| --- | --- | Understands event-driven JavaScript patterns and their associated HTML event attributes | Is familiar with a few front-end JavaScript frameworks, such as React or Angular, and knows how they integrate with Rails |
| Git | |||
| Understands and applies common git commands to effectively branch, commit, and push code changes, ensuring a fundamental level of version control and collaboration with the team | Confidently utilizes a variety of git commands not only to branch, commit, and push changes, but also to manage merge conflicts, stash work, and review logs, promoting code integrity and streamlined collaboration in a mid-level development environment | Demonstrates mastery over git with the ability to leverage advanced commands and workflows, including rebasing and cherry-picking, to efficiently manage code versions and collaborate at a high level, while also guiding less experienced team members in best practices for git usage | |
| Adheres to established git and PA best practices by following guidance on branch naming conventions, maintaining regular commit frequencies, and understanding the basics of PR workflows to facilitate smooth collaboration and code management | Proactively follows and contributes to the enhancement of git and PA best practices, showcasing aptitude in branch naming, optimal commit frequency, and streamlined PR workflows, while playing an active role in code reviews to maintain high standards in code quality | Leads in the formulation and optimization of git and PA best practices, setting standards for branch naming, commit frequency, and PR workflows, and fostering a culture of knowledge sharing and mentorship, while ensuring the highest level of code quality and collaborative efficiency | |
| Assists other mid and junior level developers with fixing branching and merging errors | Assists more junior developers with fixing branching and merging errors | ||
| --- | --- | --- | --- |
| Collaboration | |||
| Pairing - responsibilities and expectations | Pairs with all level developers using Llewellyn's strong-style method (both as driver and navigator) | Pairs with all level developers using Llewellyn's strong-style method (both as driver and navigator) | Pairs with all level developers using Llewellyn's strong-style method (both as driver and navigator); |
| Asks more senior developers to pair on project-specific issues when blocked | Asks more senior developers to pair on project-specific issues when blocked | Pairs with more junior developers to unblock them on project-specific issues | |
| Allows junior developers to shadow them during regular project work | Allows junior and mid-level developers to shadow them during regular project work | ||
| Pull requests and code reviews | Submits PRs for review and approval by tech lead or senior developer | Submits PRs for review and approval by tech lead or senior developer | Submits PRs for review and approval before merging code into staging or production |
| Completes all sections of PR template or provides context for missing sections | Completes all sections of PR template or provides context for missing sections | Completes all sections of PR template or provides context for missing sections | |
| Follows project-specific merge workflows | Follows project-specific merge workflows | Mentors more junior developers in project-specific merge workflows | |
| Reviews PRs by junior and mid-level devs and provides specific, actionable feedback | Reviews PRs by more junior developers and provides specific, actionable feedback; pairs on suggested changes when necessary | ||
| Breaking down tasks | Follows PA issue estimation best practices to know when a task may need to be broken into smaller subtasks | Follows PA issue estimation best practices to know when a task may need to be broken into smaller subtasks | Follows PA issue estimation best practices to know when a task may need to be broken into smaller subtasks |
| Meets with PM or tech lead to break larger stories into smaller tasks or subtasks | Provides PM or tech lead reasoning for breaking down larger stories into smaller tasks and description of new tasks; gets approval on new tasks before beginning work | Helps more junior developers break down larger stories into smaller tasks | |
| Estimating tasks | Follows PA best practices to provide story point and hours estimates to issues before beginning work | Follows PA best practices to provide story point and hours estimates to issues before beginning work | Follows PA best practices to provide story point and hours estimates to issues before beginning work |
| Meets with manager weekly to review issue estimates and document causes of significant overages | Reviews estimates during work and alerts PM of potential overages; explains why issue will require more work and provides estimates for additional effort to complete | Reviews estimates during work and alerts PM of potential overages; explains why issue will require more work and provides estimates for additional effort to complete | |
| Reviews estimates after submitting a PR or closing an issue and documents causes of significant overages | Reviews estimates after submitting a PR or closing an issue and documents causes of significant overages | ||
| Assists more junior developers in estimating issues during work planning meetings | |||
| Technical debt | Beginning to cultivate the skill of identifying potential technical debt in a codebase, including recognizing excessive comments, slow tests, and other basic issues, and learning how to tag them appropriately for future reference | Proficient in scrutinizing the codebase for signs of technical debt such as overuse of comments, slow but passing tests, and missing tests, and is capable of tagging these effectively, along with identifying deprecation warnings and opportunities for DRY refactoring to enhance code maintainability | Expert at meticulously navigating through codebases to spot and tag all forms of technical debt including the overuse of comments, slow tests, absence of tests, and deprecation warnings, and proactively seeking out DRY refactor opportunities, thereby acting as a steward of code quality and guiding the team towards maintaining a healthy and efficient codebase |
| Uses knowledge of Ruby design patterns to suggest refactors to an app's architecture in order to improve performance, developer experience, app maintainability, and adherence to best practices | |||
| Documentation | Alerts PM of inaccuracies or outdated information in app setup documentation | Updates missing, inaccurate, or outdated information in app documentation and submits PR to tech lead | Updates missing, inaccurate, or outdated information in app documentation; informs team of change when docs are updated |
| Alerts manager of inaccuracies or outdated information in internal PA documentation | Updates missing, inaccurate, or outdated information in internal PA documentation and submits PR to manager | Updates missing, inaccurate, or outdated information in internal PA documentation and submits PR to manager | |
| Reviews PRs containing documentation updates submitted by other developers and confirms accuracy of updates | |||
| Testing | |||
| Familiarizes themselves with a TDD approach, learning to create basic tests for new code using tools such as RSpec, and gradually building a foundation in developing through a test-driven methodology | Effectively implements a TDD approach in their development workflow, crafting comprehensive tests using RSpec or other testing tools, and consistently ensuring that newly written code is robust and reliable through diligent testing | Exemplifies mastery in a TDD approach to development, not only creating exhaustive tests using advanced features of testing tools like RSpec but also fostering a culture of quality assurance by mentoring others in adopting TDD best practices, and contributing to the evolution of testing strategies within the team | |
| Adds tests to legacy code as that code is encountered or refactored | Advocates for TDD amongst peers by ensuring PRs include appropriate tests | ||
| Uses code and test coverage tools to evaluate the existing coverage and identify parts of the code base that need tests | Adds tests to legacy code as that code is encountered or refactored | ||
| Follows PA code and test coverage best practices to design testing strategy for applications | |||
| Interprets code and test coverage reports in the context of the client's business goals and updates testing strategy accordingly | |||
| --- | --- | --- | --- |
| Debugging | |||
| Gains experience in debugging by identifying errors within the code base and begins to test fixes on a local environment to ensure basic functionality and stability | Demonstrates proficiency in debugging complex errors originating in the code base, utilizing a range of techniques and tools to test and validate fixes locally, ensuring a higher degree of reliability and efficiency in the solutions deployed | Showcases expertise in pinpointing and rectifying intricate errors in the code base, leveraging deep knowledge and experience to test fixes locally through rigorous validation processes, often foreseeing and mitigating potential issues proactively, and serving as a mentor in debugging best practices to junior team members | |
| Begins to understand how to diagnose and debug fundamental errors in the application infrastructure including simple DNS discrepancies, basic server misconfigurations, integration glitches, and straightforward database issues, relying on more experienced team members for guidance | Proficiently debugs a variety of errors stemming from the application infrastructure such as DNS, server, and database issues, and is adept at identifying and resolving integration anomalies, utilizing a well-rounded skill set to maintain the stability and performance of the application | Exhibits mastery in debugging critical errors within the application infrastructure encompassing DNS, server, integration, and database spheres, leveraging deep technical knowledge to devise innovative solutions and optimize system performance, while mentoring junior developers and leading initiatives to preemptively address potential infrastructure issues | |
| Documents and communicates cause and solution of error to other devs, PM, and client | Documents and communicates cause and solution of error to other devs, PM, and client | ||
| Coordinates with PM to determine priority and assignment of newly reported bugs | |||
| Sets up new client applications in appropriate bug reporting or monitoring tools, such as Bugsnag or Pingdom | |||
| --- | --- | --- | --- |
| Deployment/DevOps | |||
| Deployment | Follows documented steps to run client- and tech lead-approved deployments | Follows documented steps to run client- and tech lead-approved deployments | Takes lead on deployments, including planning deployments with client or implementing CD strategy; updates documentation when deployment steps change |
| Assists teammates with deploying applications | Assists teammates with deploying applications | ||
| Coordinates with tech lead or senior developer to set up deployments for applications | Manages deployment privileges for applications | ||
| CI/CD | Reads failure messages in CI/CD workflows to determine cause of build failures; pairs with tech lead or more senior developer to implement fix | Reads failure messages in CI/CD workflows to determine cause of build failures; when necessary, gets input from tech lead, SRE, or senior devs on how to fix | Debugs build failures in CI/CD pipelines |
| Coordinates with tech lead or senior developer to design and build or improve existing CI/CD pipelines | Designs and builds or improves existing CI/CD pipelines | ||
| Mentors juniors and mid-level devs in troubleshooting build failures and fixes | |||
| --- | --- | --- | --- |
| Technical Strategy | |||
| Evaluating 3rd party platforms | Pairs with a more experienced developer to pick gems, packages, and appropriate 3rd party integrations | Picks gems, packages, and 3rd party integrations with little to no direction from tech lead | Chooses gems, packages, and 3rd party integrations as part of a broader system design effort |
| Creates sandbox branches on which to experiment with new gems and integrations | Assists more junior developers with choosing appropriate gems, packages, and integrations | ||
| Reviews sandbox code with senior developer or tech lead before submitting PR or merging | Creates roll-back plans for their own and other devs' new gems and integrations | ||
| Refactoring existing code | Refactors overly complex or improperly placed code following tech lead guidance or general Rails best practices | Refactors overly complex or improperly placed code following general Rails best practices | Refactors overly complex or improperly placed code following general Rails best practices |
| Tags code snippets in codebase for possible refactoring, including explanation of how/why it should be refactored | Tags code snippets in codebase for possible refactoring, including explanation of how/why it should be refactored | ||
| Refactors smaller instances of technical debt as they go | |||
| Designs technical solutions to problems or requests that minimize the creation of new technical debt | |||
| --- | --- | --- | --- |
| Client Communication & Interaction | |||
| Asks clarifying questions to the client on Slack and in Jira comments | Asks clarifying questions to the client on Slack and in Jira comments | Asks clarifying questions to the client on Slack and in Jira comments | |
| Restricts Jira comments to PA Staff-only when appropriate | Restricts Jira comments to PA Staff-only when appropriate | Restricts Jira comments to PA Staff-only when appropriate | |
| Provides technical opinion to clients on proposed features | Designs technical solutions to client problems and communicates them clearly to the client | ||
| Suggests version upgrades, code refactoring, security and performance improvements, and other maintenance tasks to the client in a way that demonstrates their value to the client's business | |||
| Leads technical conversations in client meetings | |||
| Provides SWAG estimates to clients, PMs, and sales for new clients and proposed features for existing clients | |||
| --- | --- | --- | --- |