Intern is a first step on the developer roadmap at Kolesa Group.
- Programming language (any)
- Knowledge of what PHP (Go, Python, Java, 1C etc. depends on your team) is and readiness to learn it
- 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
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.
- 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)
- 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
- 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)
- Interact with other development teams
- Fix the bug causes
- Help the team in emergency situations
- Edit technical documentation
- 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)
- 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 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.
- 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
- 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
- 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)
- 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)
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.
- 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)
- 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)
Senior is a level assuming the highest degree of technical expertise and responsibility.
- 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
- 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
- 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
- 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
- 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
- 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