Skip to content

Latest commit

 

History

History
230 lines (195 loc) · 7.79 KB

grades_en.md

File metadata and controls

230 lines (195 loc) · 7.79 KB

Kolesa Group. Backend Department Grading System

Interns

Intern is a first step on the developer roadmap at Kolesa Group.

Hard Skills

  • Programming language (any)
  • Knowledge of what PHP (Go, Python, Java, 1C etc. depends on your team) is and readiness to learn it

Responsibilities

  • Have a mad desire to become a back-end developer
  • A rapid growth
  • Be responsible
  • Be able to formulate questions
  • Be able to use google search
  • Interact with the teammates
  • Adhere to internal software development standards

Juniors

Junior is the next step on the developer roadmap. The developer becomes a full member of our family who now has clear qualifications and responsibilities.

Junior 1

Hard Skills

  • PHP (Go, Python, Java, 1C etc. depends on your team) programming language
    • Basic syntax
    • Data types
  • Basic layout skills (CSS, HTML)
  • Git (pull, commit, push, branch, checkout)
  • OOP: objects, classes, interfaces
  • Understanding of MVC
  • Basics of SQL syntax (select, update, insert, delete)
  • Linux
    • Basic knowledge of the OS: directories, users
    • Commands: cd, ls, cat, mv, cp, rm, ssh
    • Ability to work in a remote development environment over SSH
  • Tools
    • IDE (PhpStorm, VSCode, GoLand, IDEA, EDT for 1C)
    • MySQL Clients (e.g. DataGrip, HeidiSQL, MySQL Workbench)

Responsibilities

  • Analyse and clarify the requirements of the task
  • Interact with QA engineers
  • Have a desire to make the best product in the world
  • Fix bugs
  • Take part in code reviews
  • Write unit tests
  • Write recommendations for the quality assurance of your tasks
  • Stick to the deadlines

Junior 2

Hard Skills

  • Frameworks
    • Forms
    • Validators
    • Routing
    • Configuration files
  • Debugging
    • echo, printf, var_dump, (xdebug, clockwork for PHP)
    • curl, postman
    • logging
  • Error handling
    • Exceptions
    • Account for negative scenarios
  • Linux
    • OS: processes
    • Software management (e.g. apt)
    • ps, tail, grep
    • command-line editor (e.g. nano or vim)

Responsibilities

  • Interact with other development teams
  • Fix the bug causes
  • Help the team in emergency situations
  • Edit technical documentation

Junior 3

Hard Skills

  • Understanding the client-server architecture
    • HTTP requests and responses, request lifecycle
    • Client and server roles
  • Linux
    • df, du, free, top, htop, chmod, chown, scp
    • running bash scripts
  • OOP: abstraction, encapsulation, polymorphism
  • NoSQL databases basics
    • Elasticsearch and its query language
    • MongoDb
  • Docker basics (pull, run, ps, rm)
  • Understanding the Dockerfile structure
  • Having an ability to use monitoring tools (Graylog, Grafana, Zabbix)

Responsibilities

  • Decompose the tasks and schedule their implementation
  • Improve the project codebase
  • Inform the team-lead about the problems, the solution of which is beyond your competence
  • Control the release process of your tasks

Middle

Middle is a serious intermediate step on the developer's roadmap. Middle developer is an independent unit of the team with clear areas of responsibility and authority.

Middle 1

Hard Skills

  • Refactoring: improvement of the existing code
  • Programming language:
    • Experience with common extensions and libraries
    • Experience with interpreter configuration
  • Design patterns:
    • Dependency injection
    • Creational patterns
  • Linux:
    • systemd service units
    • bash scripting
  • SOLID and DRY
  • Basic understanding of kubernetes
    • Deployments, pods, services
    • Viewing information about kubernetes objects
  • Tools:
    • kubectl
    • docker-compose
    • cron
  • Confident use of your project's framework (phalcon, symfony, yii, laravel)
  • Databases:
    • Query optimization, elimination of unnecessary queries
    • Using indexes
  • Using mocks for testing

Responsibilities

  • Understand how a task affects the achievement of business goals
  • Mentor junior developers
  • Eliminate and prevent the accidents
  • Interact with systems administrators
  • Design complex features
  • Identify project bottlenecks
  • Solve complex bugs
  • Collect project telemetry with monitoring tools

Middle 2

Hard Skills

  • Writing robust, extensible, and testable code
  • Extracting reusable code fragments into libraries
  • Extending the framework functionality
  • Creation and modification of deploy and build pipelines (CI / CD)
  • Creation of production-ready docker images
  • Creation and modification of kubernetes manifests
  • Understanding of microservice architecture
  • Knowledge of an additional programming language (e.g. Go, Python)
  • Elasticsearch (mapping, indexing, searching)

Responsibilities

  • Knowledge sharing, exchange of skills, speaking at conferences, and / or writing articles
  • Finding simpler ways to solve problems
  • Writing technical documentation (swagger, confluence, readme.md)

Middle 3

This is the last frontier in the Middle position. At this step, you should become more demanding of yourself, start thinking like a Senior and act like a Senior. You are expected to have a deeper understanding of the technologies described in the previous paragraphs, as well as a greater level of responsibility and initiative.

Hard Skills

  • Design patterns
  • Awareness of Domain Driven Design
  • Docker orchestration, Kubernetes
  • Understanding Ansible playbooks and roles, and being able to edit them
  • Understanding database transactions, replication, sharding
  • Understanding load balancing tools (nginx, haproxy, envoy, ingress)

Responsibilities

  • Solve complex issues
    • applying design patterns
    • with all kinds of test coverage (unit, integration, load testing)
  • Share knowledge outside the company (write articles, give conference talks)
  • Assist at planning and setting the deadlines
  • Optimize and speed up build pipelines (CI/CD)

Seniors

Senior is a level assuming the highest degree of technical expertise and responsibility.

Senior 1

Hard Skills

  • Understanding the interaction between services and systems in company's products
  • Identifying and resolving architectural problems
  • Understanding the principles of Kubernetes cluster components and their interaction
  • Making informed decisions about the choice of technologies and tools
  • Setting up project's technical metrics, their monitoring and control

Responsibilities

  • Suggest, advocate, and implement infrastructural solutions
  • Perform code-reviews and offer code quality expertise
  • Implement hotfixes bypassing the standard development processes
  • Be ready to resolve technical emergencies any time of the day

Senior 2

Hard Skills

  • Understanding the principles of distributed systems and being able to design them
  • Creation of services used by multiple products of the company
  • Understanding an internal implementation of data storage systems:
    • mysql (a difference between MyISAM, InnoDB, XtraDB)
    • mongodb (InMemory, WiredTiger)
    • ceph
    • elasticsearch

Responsibilities

  • Keep balance between technical innovations and achieving business goals
  • Offer an expertise on planning and setting deadlines within a team
  • Optimize the codebase architecture, data processing, networking
  • Support open-source libraries without detriment to your other responsibilities
  • Make architectural decisions
  • Replace a tech-lead/team-lead when needed

Senior 3

Hard skills

  • Awareness of the modern technological trends
  • Implementation of the innovative approaches and technologies, while considering the business interests and risks
  • Ability to design a new project architecture

Responsibilities

  • Identify and resolve global technical problems for all the company's products, possibly through creating your own unique software solutions
  • Take full technical responsibility for the quality, stability, and performance of the company services
  • Organize and control workgroups for the implementation of new projects
  • Ensure your technical solutions can become independent, self-sufficient products