We are currently looking for an experienced Senior Python Developer to join our growing MedTech organisation made up of a team of engineers, scientists, and clinicians that are on a mission to enable medical imaging to move to a quantitative and reproducible scientific measurement methodology in order to revolutionise the field of radiology.
Senior Python Developer responsibilities include participating in all phases of the software development life cycle, working within the product development team, assisting with the R&D and design of new products, as well as maintaining the product life cycle of existing products and coaching junior developers. You will play a key role in developing new technologies within GSP, from prototyping to translating them from proof-of-concept to commercial products.
If you are a seasoned developer with a love for back-end technologies, we would like to meet you. Your ultimate goal is to create high-quality products that meet an important clinical need.
We are looking for someone who:
- enjoys working in start-up environments,
- likes solving complex and interesting engineering problems,
- thrives in taking a systematic and methodical, test-driven approach to solving problems to ensure future product success,
- can participate in the research and development of numerical systems,
- can develop, prototype and release software services,
- has an interest in helping to build and mentor a software development team,
- can help evolve our way of working and quality systems. We aim to continuously improve,
- has an appreciation for the requirement to take on an evolving set of responsibilities as our company grows,
- wants to make a meaningful contribution to improving patient diagnosis and quality of life.
For this position, the following requirements apply:
- solid Python developer with 5+ years of commercial product development experience,
- has familiarity with numerical computing libraries such as NumPy, SciPy, Matplotlib,
- experience in using GIT, Jira (or similar) and CI/DevOps,
- can participate in all phases of the software development life cycle: requirements analysis, planning, architectural and software design, development, testing, deployment
- has attention to detail.
In addition, we consider it an asset if you also have:
- experience in Machine Learning, Computer Vision, or Image Segmentation/Registration
- familiarity with machine learning libraries, such as TensorFlow, Keras, PyTorch, scikit-learn, MONAI
- experience processing medical image file formats, such as DICOM or NIfTI
- familiarity with medical image IO libraries, such as Pydicom, Pynetdicom, NiBabel
- familiarity with image segmentation/registration libraries, such as ITK, SITK
- experience with containers, container deployment and Linux
- previous experience in microservices architectures
- has worked within an ISO 9001, ISO/IEC/IEEE 12207 or ISO 13485 compliant quality management system
- experience working within an agile environment
- experienced in the development/deployment of software medical devices.
What’s on offer:
- salary commensurate with experience, up to £60,000
- full-time permanent position with 25 days annual leave + bank holidays
- hybrid working (2-3 days-a-week in the Sheffield office) or remote working
- flexible working hours and start times
- an allowance to help you set up your home office
- budget for any relevant training or courses
- an opportunity to join a rapidly growing team
- share options as per our equity incentive plan
- Cycle to Work scheme (Green Commute Initiative)
Apply today to be considered for this excellent opportunity!
The post is available immediately. It will be offered subject to a probationary period of three months and satisfactory references. Standard annual leave (25 days). Hours of work: 40 per week.
When applying for this role, please provide your CV along with a cover letter and any examples you have of previous hands-on experience (GitHub portfolio if available).
OUR ENGINEERING VALUES:
Focus on the Product
Key reading: The Product-Minded Software Engineer (Gergely Orosz)
We should be viewing ourselves as “product engineers” or “product-minded engineers”, rather than software engineers/developers. Product-minded engineers are developers with lots of interest in the product itself. They want to understand why decisions are made, how people use the product, and love to be involved in making product decisions.
Choose Boring Technology
Key reading: Boring Technology (Dan McKinley)
Embrace Boredom! Good practice is to innovate when innovation is necessary, and not to innovate where it is not. If you are looking to use a technology, base this decision on the level of stability and maturity that this technology has achieved.
Boring is not bad. MySQL is boring. PostgreSQL is boring. PHP is boring. Python is boring. Memcached is boring. Cron is boring. The nice thing about boringness is that the capabilities of these things are well understood. But more importantly, their failure modes are well understood.
Adding technology to your company comes with a cost, therefore the “best tool for the job” is not always the optimal solution. It might be that the best tool for a particular job is to write a high-optimised library in C++, but we need to consider the long-term costs/risks of supporting C++ in our tech-stack. It might have been better to write the library in Python and deal with the optimisation issues elsewhere. It is basically always the case that the long-term costs of keeping a system working reliably vastly exceed any inconveniences you encounter while building it. Mature and productive developers understand this.
Key reading: Rapid Prototyping & Product Management (Tom Chi)
Create a Culture of Learning
- The culture of right and wrong is intrinsically diminishing, as you never focus on learning what made anything successful or unsuccessful. Instead, create a culture of learning, which is additive.
- How many key learnings are you making as an organisation each week? Try to maximise this.
- Avoid guess-a-thons, endless meetings where we discuss and argue product decisions using guesswork and conjecture. Don’t argue the truth of the uninvented invention. By rapidly prototyping actual experiences, we can shortcut all of that with real insight from real experiences.
Optimise Loop Length
Loop length is the amount of time between asserting a new conjecture and observing the actuals from that conjecture. Even if you’re releasing every day through continuous releases, but not learning anything from actuals from customers, that loop is open, and it needs to be closed.
Designing for adaptability vs. designing for scale
Most of the time, development is focused on stability and scalability, but they can also design for adaptability. So start any new product with a design for adaptability, with the understanding that most of this code will be thrown away. This allows you to decide what to do fast, and then focus on designing how to do it at scale.
Find the “Magic Moments”
Allow users to easily access the focal point of the product and minimise any superfluous features or usability features that might detract from this.