Roles and responsibilities
- Proactively collaborate within and contribute to design, architecture, and feature-selection for solutions across distributed teams
- Write high-quality, API-first Python code with unit tests
- Debug issues and produce high-quality fixes
- Review code produced by other engineers
- Work from home with global travel 2 to 4 times a year for internal and external events
Who you are
- You love technology, working with brilliant people, and solving interesting problems
- You are a strategic thinker
- You are curious, flexible, articulate, and accountable
- You value soft skills and are passionate, enterprising, thoughtful, and self-motivated
- You have a Bachelor's or equivalent in Computer Science, STEM or similar degree
- You have proficiency delivering robust code to production, preferably written in Python.
- You have experience and enjoy maintaining and improving large and mature web applications.
- You have experience with databases, ORMs (PostgreSQL a plus), data management, and data modelling.
- You have an interest in, or experience with, integration, infrastructure and operations.
- You believe that robust security requires conscious efforts at every stage of delivery.
- You have familiarity with Ubuntu as a development and deployment platform.
- You have a solid understanding of the structure of various software packaging systems, including Debian/Ubuntu packages.
-
1. Software Development
- Coding and Implementation: Write clean, maintainable code for new features or bug fixes under the guidance of more senior engineers. Typically, this includes using programming languages like Java, Python, JavaScript, C++, or others, depending on the project and technology stack.
- Collaborating on Design: Contribute to the design of new features or solutions, working with senior engineers to ensure alignment with system architecture and technical specifications.
- Code Reviews: Participate in code reviews, offering constructive feedback to peers and learning from feedback received on your own code.
- Bug Fixing: Debug and resolve issues, following best practices for testing and troubleshooting in the development process.
-
2. Testing and Quality Assurance
- Unit Testing: Write unit tests to ensure the correctness and functionality of the software, ensuring that individual components or modules work as expected.
- Automated Testing: Contribute to the creation or maintenance of automated tests that help ensure the reliability and performance of the software.
- Testing Documentation: Document test cases and test results, reporting any bugs or issues to senior engineers for further analysis.
-
3. Collaboration and Communication
- Team Collaboration: Work with other software engineers, product managers, and designers to implement features or fix issues. Regularly attend team meetings to discuss progress, blockers, and upcoming tasks.
- Cross-functional Communication: Communicate with team members to clarify requirements, resolve issues, and provide updates on work progress.
-
4. Learning and Skill Development
- Continuous Learning: Participate in training, mentorship, and learning opportunities to improve technical skills, programming knowledge, and software development best practices.
- Following Best Practices: Learn and apply industry best practices in coding, testing, version control, and other aspects of software engineering.
-
5. Documentation
- Code Documentation: Write and maintain clear documentation for code, including comments and explanations of key logic or components.
- Technical Documentation: Contribute to or create user guides, release notes, or system documentation as needed to support other teams or users.
Desired candidate profile
1. Programming Languages
- Core Languages: Proficiency in one or more programming languages, such as Java, Python, C++, JavaScript, or others, depending on the company’s tech stack.
- Frameworks and Libraries: Familiarity with frameworks and libraries relevant to the role, such as React, Angular, Django, Spring, or Node.js.
2. Software Development Practices
- Version Control: Experience with version control systems, particularly Git, to manage code changes and collaborate with other developers.
- Agile Methodologies: Basic understanding of Agile development practices (Scrum, Kanban) and participating in sprint planning, stand-ups, and retrospectives.
3. Problem-Solving
- Algorithms and Data Structures: Knowledge of common algorithms and data structures, as well as the ability to apply them in real-world scenarios to optimize performance.
- Debugging and Troubleshooting: Ability to debug code and resolve issues in a logical and methodical way.
4. Software Testing
- Unit and Integration Testing: Familiarity with testing practices such as writing unit tests, integration tests, and understanding testing frameworks (e.g., JUnit, Mocha, pytest).
- Test-Driven Development (TDD): Exposure to TDD concepts and practices is often a plus.
5. Database and Storage
- SQL/NoSQL Databases: Basic knowledge of working with databases (e.g., MySQL, PostgreSQL, MongoDB) and writing queries to interact with them.
- Data Modeling: Basic understanding of how to design and model data for efficient storage and retrieval.
6. Soft Skills
- Communication: Strong verbal and written communication skills to articulate technical concepts and collaborate with team members.
- Teamwork: Ability to work effectively in a team environment, helping and supporting others, and contributing to team success.
- Time Management: Ability to manage time effectively, prioritize tasks, and meet deadlines with guidance from senior engineers.