Senior Embedded Software Engineer: Machine Learning
Software Engineering At Synapse
Synapse is hiring creative software engineers who have a passion for innovative products and technology, and want to develop products in a fun, fast-paced, and highly collaborative team environment. Synapsters embrace the opportunity to work on a large variety of challenging projects, find joy in solving hard problems with strong teams, and understand the value of cross-discipline collaboration to provide stellar client service.
Synapse engineers collaborate directly with clients as well as each other, so we are equally comfortable communicating as we are coding. We have the tenacity to see a product through from concept to mass production. Synapse engineers are always learning—and teaching: the opportunity to be a listener and a leader exists for engineers at every level. We are willing to understand the client’s objectives as well as its organizational environment, while delighting in exceeding the customer’s expectations. Synapse engineers approach each other with the eagerness to learn, a sense of humor, friendly attitude, and mutual respect that makes working at Synapse as enjoyable as it is rewarding.
Synapse aims to foster a creative work atmosphere with openness and trust, where engineers can work hard, learn and grow professionally, and maintain meaningful lives. Diversity of our ideas and experiences (technical and personal) enriches our teams, enabling us to push innovation further.
About Synapse’s Seattle Office
Synapse’s headquarters are in the heart of downtown Seattle, which maintains many of the hallmarks of the company’s start-up roots. The dog-friendly, open office environment buzzes with activity, and employees are just as likely to solve problems over the ping-pong table as at the whiteboard. With over one hundred employees at this work site, Seattle Synapsters maintain the traditions of Wednesday Lunch, a weekly catered meal when the entire office comes together to celebrate successes; Social:30, where Synapsters gather to unwind every other Friday afternoon; and a variety of social events in which family and friends are invited to join in on the fun.
As a software engineer at Synapse, you will be a contributing member of multidisciplinary teams and will design and develop firmware for customized innovative hardware products. Working closely with electrical and mechanical engineers, project managers, and client teams, you will have an identifiable impact on the success of projects and end products. Strong client interaction skills, and an egoless approach to teamwork are highly valued. A passion for quality code, respect for your craft, your customers, and your team, and a demonstrated ability to deliver great work and still have time to play will help you feel right at home.
This position is an influential role at Synapse Product Development, our Directors of Engineering will seek your perspectives on designing our team, driving strategic technology investments, and future offerings. You will actively contribute to growing our team’s machine learning capabilities and provide technical sales support for machine learning projects to our Business Development team.
- Work independently on small projects and guide small teams (2-4 engineers) in larger projects to influence and shape technical strategies and development processes to meet client goals. Actively participate in system architecture design and drive product tradeoff decisions, such as RTOS and microcontroller.
- Work in a multidisciplinary team to lead design, development, test, and release of software for execution on custom embedded platforms, including drivers and board support packages.
- Design and implement ML projects with high-sample-rate data from sensors (sound, IMU, image) for applications in pose/gesture detection, anomaly detection, wakewords/visual wakewords, activity detection, and more.
- Collaborate closely with clients, Program and Account Managers to construct project scopes and Statements of Work, create development plans, align key deliverables with internal teams, manage release calendars, and provide regular status updates.
- Take responsibility for team’s software tasks from requirements gathering through design, development, and test to establish and build credibility with customers. Guide team assignments by matching technical requirements to individuals, schedule technical reviews and provide actionable feedback.
- Actively mentor and foster an inclusive environment that engages the peers in sharing expertise and learn from the larger software group. Participate in interviewing and onboarding new team members.
Expertise in developing embedded systems with hands-on experience building end-to-end machine learning/deep learning pipelines for embedded devices with focus on optimization and performance. Knowledge of machine learning techniques and fast prototyping skills to demonstrate concepts and capabilities.
- 10+ years of software development experience with strong C.C++ programming (e.g. memory management, pointer handling, API design), and 5+ years of experience in embedded systems.
- 3+ years as software/embedded team lead role and demonstrable experience in technical project management, ideally in a consulting organization, from scoping and estimation to schedule management and status reporting, requirements management, documentation, design and code reviews, test and QA support for quality releases.
- Experience with ML frameworks such as Tensorflow/TFLite/TFLite Micro, Keras, PyTorch, Caffe, Scikit Learn and related libraries such as NumPy, Pandas, and Matplotlib.
- Experienced in traditional image processing techniques to perform image manipulation tasks not suitable for AI processing such as OpenCV, PIL, scikit-image.
- Experience in embedded device and systems design with focus on low-power embedded platforms (e.g. ARM Cortex-M, MSP430, RISC-V), wireless technologies (e.g BLE, ZigBee, Bluetooth, WiFi) and common communications protocols (UART, SPI, I2C, CAN, USB).
- Knowledge of open-source software licenses (e.g. GPL, MIT, BSD) and applications in software development.
- Solid understanding and application of software engineering methodologies, developing machine learning pipelines, and best practices including estimation, design documentation, unit and system testing, release and source control management (must be able to lead by example with good commit hygiene).
- Creative and detail-oriented individual with excellent written, spoken, and presentation skills for expressing technical ideas and initiatives. Able to simplify complex machine learning concepts for non technical clients while demonstrating the value.
- Academic background in a quantitative field such as Computer Science, Statistics, Engineering, or Physics. Advanced degree preferred.
- Experience using deep learning architectures, NLP. Interest in reading academic papers and exploring state-of-the-art experimental systems.
- Experience with building machine learning pipelines using cloud technologies with deployments to IoT and edge devices, eg. AWS SageMaker Neo.
- DSP and PID controls, algorithm design and optimization (data compression, bandwidth optimization, encryption, ...)
- Experience with bare metal development on resource-constrained 8- and 16-bit microprocessors (e.g. MSP430, 8051).
- Experience with embedded Linux, Android (user drivers), and software architecture for applications-class processor systems (e.g. SnapDragon, Tegra).
- GitHub/GitLab project portfolio available.
We are an equal opportunities employer and value diversity and inclusion at our company. We do not discriminate on the basis of race, religion, color, national origin, gender, sexual orientation, age, marital status, veteran status, or disability status.