Position: Software Development Engineer in Test
Company: Ukraine Tech IT Recruiting and Staffing
Experience required: 5y
English level: upper

The company solution is a distributed, highly available, cloud-native, in-memory data platform with unified user experience and management tooling.
It is massively parallel and can process millions of operations per second with latencies in microseconds at scale. It is simple to use, no additional or third party coordination processes are required.
Flexible enough to use as a data and compute platform out of the box or as a framework for your own cloud-native applications and microservices.


**Responsibilities**
Working on open-source software at your day job
Testing distributed systems on a big scale (hundreds of nodes, TBs of memory)
Automated testing using scripting languages, GH Actions, Travis, and Jenkins
Learning the latest technologies and popular frameworks
 

 Day-to-day area of responsibility of employee in this position look like

• verify the stability, correctness and completeness of new features
  - verify that they match the requirements
  - try to “break” the features, try and find cases which don’t follow the contract and documentation provided to the user
  - try them in some unexpected scenarios, find surprising behaviour. Instead of trying to automate some predefined tests, you need to come up with scenarios for testing and those scenarios should not be only on “happy” path (everything works perfectly if nothing unexpected happens) but you should eager to break the code. It means you should come up with scenarios “what can happen if something little unexpected happens” etc.
  - check the docs/example is comprehensible etc.
  - understand how the feature fits in the overall picture of the product, and try the feature in combination with other features

• create and maintain various test suites and develop tests for the new features in them (soak tests, integration tests etc.)
- collect information for issue investigation and dig for the root cause of issues as much as possible. Developers who are working on the feature implementations might have to find the root cause in the end, but preparing and collecting as much information as possible goes a long way.

• performance testing, detecting performance regressions, competitive analysis and comparing with other products. Knowledge of concepts like latency and throughput is important here. 

• help to improve software quality by using some 3rd party tools (sonar, blackduck etc.). Creating a new solution to ensure the quality of a product is good, but using something existing and sharing it with others is better.

• participate in release process. Knowledge of Jenkins and Jenkins pipelines is relevant here.

• testing distributed systems. This brings about a specific mindset because in distributed systems, often times parts of the system can fail while some other parts might continue functioning normally (partial failures). You should embrace this mentality and use it to try and test the system in unpredicted ways.

 

**Requirements**
Experience with testing software, and breaking them
Passion for both manual and automated testing, and understanding the importance of both
Being able to dig deep and get to the root cause of issues
Strong Focus on quality
Experience with testing Java application and knowledge of Java internals
Interest in testing distributed systems
Excellent communication skills in written and spoken English

Some of the specific qualifications or skill sets
  - definitely solid Java knowledge. We need a SDET who has experience with testing Java applications; not just using Java for preparing tests (e.g. for some webapp) but some knowledge of Java internals (e.g. understand how JVM handles memory, basic concepts around Java concurrency, networking). You might have encountered such concepts if you have spent time testing some Java app (for example you know how to investigate memory leak)

  - having some overall knowledge of what is concurrency, what is a thread, what issues can happen there (even on the level that you read it somewhere in the blog) is desired (but again not mandatory). From the skillset point of view you’re looking for breath, not depth. Knowledge of the tools like Jenkins, Maven, Docker, Docker compose, Ansible, scripting language (even on the Stackoverflow-level) is something that we’re looking for.

  - again, testing distributed systems (perhaps microservice architecture) is a plus as it requires a specific mindset