As a Software Engineer, you will design, develop, test, and maintain software applications that support industrial UPS and battery charging products. You will contribute throughout the software development lifecycle, from defining requirements and selecting technologies to implementation, deployment, and ongoing support. Projects may include developing new applications and features, improving user interfaces and device communications, and modernizing existing software for deployment across platforms such as Windows, iOS, and Android. Working with firmware engineers, hardware engineers, and product stakeholders, you will deliver reliable, maintainable software that meets user and product needs
Key Responsibilities:
Software Design and Architecture:
- Translate user and product requirements into software designs and implementation plans for new applications, feature enhancements, and improvements to existing software.
- Evaluate development tools and frameworks; design modular, maintainable architecture that separates user interfaces, business logic, data access, and device communications and supports cross-platform deployment where appropriate
Application Development and Maintenance:
- Develop new applications and features, maintain reusable software components, and enhance or modernize existing codebases, including cross-platform development for Windows, iOS, and Android as project needs require.
- Develop responsive, intuitive user interfaces suited to desktop and touch-based devices, with attention to usability, accessibility, and performance.
- Implement reliable data handling, application settings, error handling, and diagnostic logging; maintain compatibility with existing product interfaces where required.
Device Communications and Integration:
- Develop and troubleshoot application interfaces to embedded products, coordinating communication protocols and data exchange with firmware developers.
- Address platform-specific connectivity, permissions, and security requirements, including connection loss, recovery, and clear reporting of communication errors.
Collaboration and Documentation:
- Work with firmware engineers, hardware engineers, and product stakeholders to define software requirements, prioritize features, and review implementation tradeoffs.
- Document software requirements, architecture, interfaces, and build and deployment procedures; participate in code reviews and shared development practices.
Software Testing and Delivery:
- Develop automated unit, integration, and regression tests to verify software functionality, reliability, and consistent behavior across supported platforms.
- Troubleshoot application defects and performance issues; establish repeatable builds and support packaging, deployment, and release validation for each target platform.
Minimum Qualifications:
- Bachelor's degree in Computer Science, Software Engineering, Computer Engineering, or a related field.
- Experience designing, developing, testing, and maintaining software applications, including implementing new features and supporting existing codebases.
- Proficiency in an application development language such as C#, C++, Dart, or TypeScript, with a strong understanding of modular design, object-oriented programming, and asynchronous programming.
- Understanding of software architecture, reusable components, user interface design, and the separation of application logic from platform-specific functionality.
- Experience using version control systems, code reviews, automated testing, and software debugging tools in a collaborative development environment.
- Strong analytical and troubleshooting skills, including the ability to understand unfamiliar code, resolve software issues, and translate user needs into clear software requirements.
- Effective communication and collaboration skills.
Desired Qualifications:
- Experience delivering applications on Windows, iOS, and Android, including platform-specific builds, signing, packaging, and distribution.
- Hands-on experience with cross-platform frameworks such as .NET MAUI, Qt, or Flutter, and the ability to evaluate framework suitability for product requirements.
- Experience planning legacy application migrations, managing technical debt, and maintaining functional compatibility through incremental delivery.
- Familiarity with continuous integration and delivery (CI/CD), automated build pipelines, dependency management, and release automation.
- Experience integrating applications with embedded or industrial equipment through network or serial communications.
- Knowledge of web technologies (HTML, CSS, JavaScript), secure application development, and local data storage