Software Engineer
Sandisk
About the Role
The Software Engineer E105 is an entry-level engineering professional who applies foundational software-engineering and formal-methods knowledge to small, clearly defined assignments. Working under close supervision and with detailed guidance, the engineer contributes to TLA+ and/or PlusCal related projects by creating, updating, reviewing, and validating specifications, codes, and supporting artifacts within established team practices. The role is designed for a curious, disciplined learner who can deliver reliable work, document solutions, ask effective questions, and steadily develop problem-solving and problem-prevention judgment.
Key Responsibilities
- Complete small-scope software or formal-specification assignments with well-defined inputs, outputs, interfaces, and success criteria.
- Create or modify TLA+ specifications and/or PlusCal algorithms under the guidance of experienced engineers.
- Run model-checking workflows using team-approved tools, analyze generated results, and document findings clearly.
- Translate clearly bounded behavioral requirements, state transitions, invariants, and safety or liveness expectations into reviewable formal artifacts.
- Write and maintain supporting scripts, codes, tests, examples, documentation, and reproducible issue reports for assigned work.
- Identify straightforward defects or inconsistencies, resolve them with guidance, and escalate unfamiliar or complex issues promptly.
- Follow established software-development practices for source control, code or specification review, testing, traceability, and documentation.
- Participate in team meetings and reviews, share progress, ask for feedback, and incorporate technical direction constructively.
- Explore approved AI-assisted engineering tools with guidance, validate or verify outputs before use, and follow applicable security, privacy, confidentiality, and intellectual-property requirements.
- Deliver assigned work reliably and contribute to team velocity and quality through dependable execution.
Requirements & Tech Stack
- Academic, internship, research, open-source, or professional experience using TLA+ and/or PlusCal in at least one project.
- Foundational understanding of state-machine based modeling, concurrent or distributed-system behavior, invariants, safety properties, and liveness concepts.
- Ability to read, write, and debug software in at least one general-purpose programming language.
- Foundational knowledge of algorithms, data structures, software testing, debugging, and version-control workflows.
- Ability to explain technical work in clear written documentation and participate effectively in technical reviews.
- Ability to work within defined priorities, follow detailed instructions, seek guidance when needed, and respond constructively to feedback.
- Familiarity with Python, Java, TypeScript, C, C++, Rust (preferred), or another language used for tooling or systems development.
Qualifications
- Bachelor's degree in Computer Science, Computer Engineering, Software Engineering, Electrical Engineering, or a related technical field, with 0-2 years of relevant experience, or equivalent practical education and experience.
- Hands-on experience with the TLA+ Toolbox, TLC model checker, or command-line TLA+ tooling.
- Experience defining or checking invariants, temporal properties, fairness assumptions, refinement mappings, or counterexample traces.
- Coursework or project experience in formal methods, distributed systems, concurrent programming, operating systems, storage systems, protocols, or reliability engineering.
- Experience with Git-based collaboration, automated testing, CI pipelines, issue tracking, or technical documentation.
- Experience connecting a formal specification to implementation behavior, test scenarios, design reviews, or requirements traceability.
- Evidence of curiosity and learning, such as a capstone, thesis, publication, conference presentation, portfolio, open-source contribution, or well-documented personal project involving TLA+ or PlusCal.