General DescriptionWe are looking for a Senior Programmer Analyst to join our team of students, faculty and post-docs in building software infrastructure for big data neurocience. NeuroData's goal is to work together with neuroexperimentalists to discover fundamental principles governing the relationship between mind and brain, via building and deploying open source data-driven tools that run at scale on open access data. This includes analytics, databases, cloud computing, and Web-services applied to both big neuroimages and big neurographs. We aim for our code to be open source and services freely accessible. For more information, please visit our website: http://neurodata.io/
The individual will be responsible for the creation, implementation, maintenance, performance, production support and documentation of various departmental and enterprise-wide application systems. This includes but is not limited to the installation, modification, and testing of new and/or upgraded applications (packages or home grown), operating systems, file structures, hardware, communication devices, and productivity tools. Applies analysis techniques and procedures to gather and then translate business requirements into functional/technical specifications and designs. Using functional specifications and designs, produces all or part of the deliverables. Maintains databases and application system code.
Job Scope/Complexity: Under limited guidance, responsible for full life-cycle of small to medium sized moderately complex projects. Demonstrates strong ability in technology and/or strong understanding of the business/clinical/education process. Builds and maintains client relationships through positive interactions.
Job Responsibilities: The Senior Programmer Analyst is responsible for development and maintenance of NeuroData's software infrastructure running in the cloud. The focus of this position will be more on back-end, ranging from meta-data management to efficient storage and retrieval of petabyte datasets.
ANALYSIS AND REQUIREMENTS GATHERING
- Work on a variety of projects which may land at all levels of the stack, from front-end user interfaces to low-level data storage. Projects will be chosen based on skillset, interest, and need.
- Define moderately complex research problems by meeting with clients to observe and understand current processes and the issues related to those processes. Provide written documentation of findings to share with the client and other colleagues.
- Gather moderately complex system requirements by working closely with the team and researching existing technology to understand the business requirements and possible solutions for new applications while ensuring cohesive software infrastructure.
DESIGN AND DEVELOPMENT
- Develop detailed tasks and project plans by analyzing project scope and milestones for moderately complex projects in order to ensure product is delivered in a timely fashion according to software lifecycle standards.
- Write functional/technical specifications by taking the provided moderately complex system requirements and putting them into functional and technical descriptions for use by programmers and business analysts to develop technical solutions.
- Develop/change data input, files/database structures, data transformation, algorithms, and data output by using appropriate computer language/tools to provide technical solutions for moderately complex application development tasks.
- Document code and associated processes by adhering to development methodologies, adding code comments and appropriate documentation to various knowledge-base system(s) to simplify code maintenance and to improve support.
TESTING AND DOCUMENTATION
- Create and document moderately complex test scenarios using the appropriate testing tools to validate and verify application functionality.
- Test all changes by using the appropriate moderately complex test scenarios to ensure all delivered solutions work as expected and errors are handling in a meaningful way.
- Author and maintain documentation by writing audience-appropriate materials to serve as technical and/or end-user references.
IMPLEMENTATION AND MAINTENANCE
- Implement changes by adhering to the change management policies and procedures for any given project to communicate to all parties the nature, significance, and risk factors of the solution.
- Monitor changes and resolve moderately complex problems by responding as they occur, by reviewing all processing and output of the newly implemented solution, and by proactively ensuring the solution works successfully in order to satisfy the customer requirements and to provide a smooth transition to the new solution.
- Provide support by triaging and resolving moderately complex issues to ensure prompt, effective service.
- Continuously learn and improve skills.