软件工程师能力模型探讨
高级JAVA工程师通用技能
- Expert Java knowledge JAVA知识专家级
- Object-Oriented Design Patterns 面向对象与设计模式
- High-level design skills 高层模块设计
- Designing for specific requirements (e.g. security, scalability, optimization) 安全, 伸缩, 优化设计
- DevOps 开发测试运维
- Distributed/parallel programming 分布式/并行编程
- Maintaining and upgrading applications 维护升级应用程序
- Leadership skills 领导力, 带团队
- Clear communication skills 清晰沟通技能
- Mentoring junior and mid-level developers 指导初级, 中级开发
- Understanding business and legal context 理解业务, 商业与法律上下文
自觉的规范意识和团队精神。随着软件项目规模越来越大,仅仅依靠个人力量已经无法完成工作,因此,现代软件企业越来越重视团队精神。一般来讲,软件企业中的程序员可以分为两种,一种是程序“游击队员”,他们可能对编程工具很熟,能力很强,把编码编得很简洁高效,但却缺乏规范和合作的观念;另一种程序员编程不一定很快,但是很规范,个人能力不一定很强,但合作意识很好。第二种人更加适合现代软件企业发展的潮流。对于基础软件工程师来说,他们在企业中的角色决定了他们必须具有良好的规范意识和团队精神。
较强的英语阅读和写作能力。程序世界的主导语言是英文,编写程序开发文档和开发工具帮助文件离不开英文,了解业界的最新动向、阅读技术文章离不开英文,与世界各地编程高手交流、发布帮助请求同样离不开英文。作为基础软件工程师,具有一定的英语基础对于自身的学习和工作极有帮助。
具有软件工程的概念。基础软件工程师处于软件企业人才金字塔的底层,是整个人才结构的基础,虽然他们从事的工作相对于系统分析师和高级程序员要单纯一些,但是他们是整个软件工程中重要的一环,因此,基础软件工程师同样要具有软件工程的概念。从项目需求分析开始到安装调试完毕,基础软件工程师都必须能清楚地理解和把握这些过程,并能胜任各种环节的具体工作,这样的能力正好符合了当前企业对基础软件工程师的全面要求。
求知欲和进取心。软件业是一个不断变化和不断创新的行业,面对层出不穷的新技术,软件人才的求知欲和进取心就显得尤为重要,它是在这个激烈竞争的行业中立足的基本条件。软件工程师应具有较强的学习总结能力、需求理解能力和对IT新技术比较敏感,同时,掌握最新的IT实用技术。
软件工程领导者
Area Competency
Technical
Builds products ensuring they take adequate steps to protect sensitive data, e.g.
- Databases have encryption at rest
- Sensitive data is masked or in restricted indexes in Splunk
- Data is retained only for as long as it is needed
- Dummy/fictional data is used in staging environments and in tests
- Suppliers don't get access to data unless they have gone through the Procurement Management Application process
Technical
Implements appropriate observability and monitoring when building a solution, e.g.
- When adding a new dependency to a system, adds a healthcheck to monitor the dependency's state
- Adds logging that is well-structured and captures useful information about the state of a system
- Builds a Grafana dashboard that visualises normal and abnormal operation of a system
Technical
Evaluates third-party software to use in projects, e.g.
- Can choose between similar Node libraries evaluating code quality, ease of integration, future maintenance, and security concerns
- May be involved in evaluating paid-for third party supplier code
Technical
Leads on fixing live incidents in production, e.g.
- Takes proactive action when an incident is reported on a system they support and resolves it satisfactorily
- Responds to critical issues raised in #ft-tech-incidents taking the initiative to fix them and reports back
Technical
Understands the security attack vectors for their area of technology and mitigates against them, e.g.
- Uses Snyk.io on projects
- Sanitises user input to mitigate against XSS attacks
- Applies security patches to an operating system
- Protecting public API endpoints
- Articulates security risks/benefits when evaluating third party software
- Uses Fastly WAF to protect from malicious requests
Technical
Makes pragmatic decisions about technical trade-offs within their project, e.g.
- Knows when to stop work on a feature that has fulfilled the requirements vs. spending an extra week on making it perfect but delivering little additional value
- When pressed for time, focuses on ensuring test coverage of the most critical system functionality
- Manages technical debt, understands consequences of technical debt vs the cost of fixing it and acts accordingly
- Can explain when something is worth refactoring even when it will impact the speed of delivery
Technical
Delivers high quality code and solutions, e.g.
- Refactors solutions to improve clarity and maintainability
Technical
Encourages others to deliver high quality code and solutions, e.g.
- Implements tooling to enforce high standards
- Reviews pull requests fairly & critically in such away that team members produce better code
Technical
Regularly and independently debugs and fixes bugs regardless of origin, e.g.
- Picks up and debugs an urgent issue that comes in to the team, despite having not written the code originally
Technical
Builds software or services considering resilience, performance and failure modes, e.g.
- Combines multiple data sources in a feature, caching, polling etc as appropriate to cope with problems in downstream services
- Adds healthchecks to a system that detect different ways in which it can fail
Technical
Chooses the appropriate tool, technology or software for a task, e.g.
- If starting a new project, uses tools already understood by the team unless there is an agreed good reason to change
Technical
Builds and works with systems involving multiple, independent technical parts, e.g.
- Adds data sources to or optimises performance of a data pipeline
- Publishes a new origami component that uses other components
- Implements a CDN / gateway that routes to a suite of underlying microservices
- Designs and implements a build pipeline
Technical
Considers the technical direction of their group or the wider department when coming up with technical solutions, e.g.
- Understands how their work feeds into their group's tech strategy
- Can articulate and justify the total cost of ownership of their technical solutions
- Follows their group's Engineering Principles when building technical solutions
Communication
Communicates technical concepts clearly and adapts that communication to the audience, e.g.
- Explains their work in standups knowing which technical details to leave out to make the message meaningful to everyone in the room
- Teaches more junior engineers
- Creates diagrams to document how the different parts of systems interact
- Presents their own work clearly to stakeholders
Communication
Facilitates productive discussions with clear outcomes, e.g.
- Runs meetings with clear agendas and outcomes
- Obtains wide feedback on technical proposals and takes ownership of seeing it through
Communication
Contributes to hiring process, e.g.
- Participates in hiring panels or technical interviews
- Attends recruitment events
- Publicly shares links to open roles
- Goes for coffee with potential hires to talk about what working at the Financial Times is like
- Shares our work publicly, (through blogging, speaking, etc) to show the kinds of work we do here
- Reviews CVs
- Reviews tech tests
Delivery
Prioritises technical work for the team (usually with others)
Delivery
Breaks down large complex technical proposals into discrete tasks, e.g.
- Creates the user stories for the ticket with a delivery lead
Delivery
Communicates team/work's status upwards to a Principal or Technical Director
Delivery
Where appropriate, builds on other teams' work to solve problems, e.g.
- Uses origami components to style a web page
- Uses Biz Ops as a source of system data rather than creating a new system registry
Delivery
Moves blockers to enable more junior engineers to work, e.g.
- Reviews pull requests
- Suggests someone to talk to eg “[X] knows the most about [technology Y], you could ask them”
Delivery
Tackles simple cross team technical issues, e.g.
- Notices a tool used by lots of teams has broken, identifies the problem and fixes (or reports it to the owner of the tool)
Delivery
Actively seeks the views of other teams to help guide work, e.g.
- Attends cross team meetings
- Asks other teams for input and opinions on decisions that affect them
Delivery
Improves delivery process and encourages others to do the same, e.g.
- Updates the scrum process to fit the changing needs of the team
- Champions technical issues that affect delivery such as release cycles, dealing with tech debt and bug fixes
- Encourages other engineers to participate in agile team rituals
Delivery
Manages, prioritises and communicates own workload
Leadership
Influences a community of practice, e.g.
- Is an active member of a Guild
- Answers questions in the #engineering Slack channel
- Gives a tech talk (internally or externally)
- Writes a blog post
- Shares industry relevant content/links with team members that may be interested
Leadership
Is an ambassador for their team across FT technology, e.g.
- Positively represents their team in interactions with other people by seeking to understand their perspectives, values and needs
- Consistently contributes to their team being positively perceived by stakeholders (or by other engineering teams to which they provide support)
Leadership
Contributes to the personal development of more junior people, e.g.
- Is a line manager or mentor
- Is a designated buddy to a new starter
- Regularly meets up with more junior peers to provide guidance
- Pairs with more junior team members
- Writes blog posts to share knowledge
- Gives talks at meet-ups or conferences to share knowledge
Leadership
Shows technical leadership, e.g.
- Is a tech lead
- Runs, or is on the organising team for a Guild
- Leads on large features, stories or projects
Leadership
Shares knowledge with others internally, e.g.
- Gives a workshop on Git
- Runs a regular 101 session for the rest of the business
- More informal knowledge sharing through mentorship
Leadership
Actively fosters an inclusive team culture, e.g.
- Celebrates good work publicly and encourages the team to do the same
- Spots problems between team members and helps to resolve them or escalate them as appropriate
- Models inclusive behaviour to the rest of the team
《The Software Engineering Competency Model (SWECOM)》
在《The Software Engineering Competency Model (SWECOM)》提及
通识素养
能力分解
今天先到这儿,希望对云原生,技术领导力, 企业管理,系统架构设计与评估,团队管理, 项目管理, 产品管管,团队建设 有参考作用 , 您可能感兴趣的文章:
领导人怎样带领好团队
构建创业公司突击小团队
国际化环境下系统架构演化
微服务架构设计
视频直播平台的系统架构演化
微服务与Docker介绍
Docker与CI持续集成/CD
互联网电商购物车架构演变案例
互联网业务场景下消息队列架构
互联网高效研发团队管理演进之一
消息系统架构设计演进
互联网电商搜索架构演化之一
企业信息化与软件工程的迷思
企业项目化管理介绍
软件项目成功之要素
人际沟通风格介绍一
精益IT组织与分享式领导
学习型组织与企业
企业创新文化与等级观念
组织目标与个人目标
初创公司人才招聘与管理
人才公司环境与企业文化
企业文化、团队文化与知识共享
高效能的团队建设
项目管理沟通计划
构建高效的研发与自动化运维
某大型电商云平台实践
互联网数据库架构设计思路
IT基础架构规划方案一(网络系统规划)
餐饮行业解决方案之客户分析流程
餐饮行业解决方案之采购战略制定与实施流程
餐饮行业解决方案之业务设计流程
供应链需求调研CheckList
企业应用之性能实时度量系统演变
如有想了解更多软件设计与架构, 系统IT,企业信息化, 团队管理 资讯,请关注我的微信订阅号:
作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-Petter Liu Blog。