Please enable JavaScript.
Coggle requires JavaScript to display documents.
Software Engineer, Useful Links: Code review 12 Factor App Backend…
Software Engineer
Project Management
Agile
Methodologies
Scrum
Iterations (sprint), where estimated tasks are organized to fit the team capacity for that iteration
Kanban
Backlog is continuously reviewed to keep priorized tasks at the top. Team members can grab a new task once they have capacity
Ceremonies
Daily Standup
Short daily meeting between the team members, where each talks about what they recently worked on, what's their next focus and identify potential blockers
Planning
Weekly/Bi-weekly meetings to refine, prioritize, estimate and discuss tasks. Balancing product needs with team availability / capacity
Retrospective
Meetings usually following the Planning. Identify and exchange on "What went well?", "What could be improved?" since the last retro. Identify "Action Items" from the raised points
Demo
Bi-weekly/Monthly meetings between team members and interested stakeholders, where the team will present the latest and coming changes to the system
Tools
Communication
(video conference)
Zoom
/
Google Meet
Discord
/
Skype
/
Microsoft Teams
(mail)
Gmail
/ Outlook
(instant messaging)
Slack
Task Management
Asana
Jira
/
Trello
GitHub Issues/Projects
File Collaboration
Google Drive / Docs
Box
/
Dropbox
Code Sharing
See:
Software Development
> Tools > Source Control
Product Life Cycle
Requirement Gathering
Customer Focus
Placing the customer at the center of product decision-making. Understanding their needs, pain points, and preferences and aligning product strategy and roadmap accordingly
Market Orientation
Following market trends, competition, and industry dynamics to identify opportunities and adapting the product to meet market demands and capitalize on emerging trends
Vision and Strategy
Defining a clear vision for the product and aligning it with the overall business objectives. Maintaining a Roadmap that outlines the product direction, goals, and milestones
Data-Driven Decision
Collecting relevant metrics to inform user behaviors, market data, measure product performance, and guide product decisions
Team-led Decision
Fostering an environment where the team is free to share potential for product improvement. This can include feature ideas, addressing tech dept, technology improvement and code refactoring
Planning & Development
Prioritization
Prioritizing product features, enhancements, and fixes based on their impact and alignment with strategic goals and customer needs
Agile Development
Breaking down work into smaller, manageable increments, delivering value in short cycles, incorporating feedbacks to refine the product
Cross-Functional Collaboration
Coordinating collaboration with between engineering, design, marketing, sales, and customer support, to ensure effective communication and alignment across teams
Risk Management
Assessing potential technical, market, or organizational risks
and implementing strategies to minimize their impact on the product's success
Team Success
Ensuring that each team member understands and is capable of working on its assigned tasks. This can include context, technical knowledge, mental health and motivation
Launch & Promotion
Go-to-Market Strategy
Developing a plan for launching and promoting the product. Coordinating engineering, marketing, sales, and support efforts to maximize product adoption and customer satisfaction
Product Evangelism
Communicating the product vision, benefits, and value proposition to stakeholders, customers, and users. Building excitement and advocacy to drive adoption and success
Testing and Quality Assurance
Ensure that the product meets the desired quality standards before launch. Can Include functional testing, usability testing, performance testing, and bug fixing
Maturity & Sustainability
Continuous Feedback Loop
Establishing mechanisms to gather feedback from customers, users, and stakeholders throughout the product development lifecycle
Product Metrics and Key Performance Indicators (KPIs)
Defining and tracking metrics and KPIs that align with product goals and success criteria. Measure and optimize the product's performance, identify areas for improvement
Scalability and Growth
Considering long-term scalability and growth potential. Planning for product expansion to accommodate increased user demand and business growth
.
Engineers should understand product concepts and help the Product Manager with technical knowledge throughout the product life cycle
Tech Skills
Software Development (MM)
Native
iOS
Android
Cross-Platform
Web
Frontend
DevOps
Backend
Desktop
Terminal
Scripting
Desktop Apps
Computer Science (MM)
Programming
Databases
Algorithms & Data Structures
Distributed Systems
Computer Networking
Operating Systems
Machine Learning
Soft Skills
Communication
Persuasion / Negociation
Verbal
Effective Speaking
Voice volume/tone/clarity/pace
(know your audience, KISS, impact) Choose your Words
Public Speaking
Written
Grammar, Spelling and Punctuation
Structure
Know you audience
Active Listening
Clarification / Questioning
Reflection
Reinforcement
Eye contact / Smile / Mirroring / Focus
Summarising
Empathy & Respect
Non-verbal
Body language awareness
Face expression awareness
Body posture
Self-Esteem / Confidence / Charisma
Teamwork
Handling Difficult Conversations
Conflict Resolution
Feedback Giving / Receiving
Leadership
Delegation
Vision
Coordination
Mentorship
Collaboration / Cooperation
Idea exchange / Brainstorming
Persuasion / Negotiation / Persistence
Respect / Kindness
Adaptability
Self-Learning
Curiosity
Self-Management
Time management
Journaling
Decision-making
Personal organization
Open-mindedness
Self-Motivation
Optimism
Keeping Composure
Problem-Solving
Analysis
Braistorming
Decision Making
First Principles / Lateral / Creative / Logical Thinking
Observation / Initiative
Software Principles
Rules of thumb
DRY (Don't Repeat Yourself)
When possible, any logic should be written in only one place
Write Once - Read Often
Code maintenance is an expensive and difficult process. Promote code readability over ease of writing
YAGNI (You Aren't Gonna Need It)
You shouldn't over-engineer something based on what you think you might need later on
SSOT (Single Source Of Truth)
Data should only be found via a single reference point
KISS (Keep It Simple, Silly)
Simplicity should be a key goal in design
Principle of Least Astonishment
A component of a system should behave in a way that most users will expect it to behave
Single Responsibility / Separation of Concerns
A class/method should only have one function/responsibility within the program
Open-Closed Principle
Objects or entities should be open for extension but closed for modification
Principles
Consistency
Best Practices
Defining a set of principles (code organization & format, naming conventions, source control workflow) for a project code, that every team member must follow
Code Reviews
Only accepting codebase merges for changes that thoroughly respect above rules
Automatic Formatter & Linter
Automatically enforcing (e.g CI) above rules whenever possible (e.g Eslint + Prettier for JavaScript code)
Modularity
Abstraction
Abstracting the complexity of a system component to focus on essential aspects of the system
Encapsulation
Data and methods should be wrapped into a single unit, and expose only the necessary interfaces to interact with that unit
A complex system should be broken down into smaller, self-contained modules that can be developed, tested, and maintained independently
Reliability
Building software that consistently performs its intended functions without errors or failures. Reliability involves rigorous testing, error handling, and fault tolerance techniques
Performance
Optimizing software to ensure efficient resource utilization, response times, and throughput. Performance considerations involve algorithm design, code optimization, and proper utilization of hardware resources
Security
Measures to protect software systems from unauthorized access, data breaches, and vulnerabilities. This includes implementing authentication, encryption, and secure coding practices
Maintainability
Developing software that is easy to understand, modify, and extend over time. This includes writing clean and well-structured code, providing proper
SDLC
Software Development Life Cycle
Testing
Validating code logic and behavior. Preventing bugs from infesting already established code. Making sure the system works in parts (unit & integration tests) and as a whole (end 2 end tests)
Supporting Activities
Documentation
Developer level
Documenting project intended for a tech audience (e.g. Libraries, SaaS, APIs, etc.):
Project summary, Contacts, Roadmap, Setup guide, API references, Migration guide, Release notes, Architecture diagrams, Simplified internal logic
Repo/Project level
Documenting repo/project: technologies, contribution guide, program options/env variables, history, best practices
Code level
Documenting class/method/function: inputs, outputs, behaviors, history, maintenance notes
User level
Documenting project from a user point of view:
Project summary, Contacts, Roadmap, User guides, Features how-to guides, FAQs
Planning
Plan and discuss throughout each step of the SDLC (e.g Agile ceremonies)
Collaboration and Communication
Development teams, stakeholders, and other project members work together to align expectations and understanding, share progress and resolve issues at each stage of the SDLC
User support
After a successful deployment, the team engages with users via support cases, feature request, feedback gathering, promotion and communication around the project changes
Requirement Gathering
Documenting the expectations, scope and functional requirements of the software / feature
System Design
Defining the overall structure, components, and interfaces of the system. Including but not limited to data modeling, database design, and UI/UX design
Implementation
Turning the functional requirements and design into functioning code
Maintenance
Monitoring, updating and enhancing the deployed software via bug fixes, performance optimization, security updates. As well as implementing new user or stakeholders requested features
Deployment
Pushing the software to the targeted environment (e.g AWS EC2 for servers, App Store for iOS apps)
Responsibilities
Engineer
Log everything that goes well/wrong as it goes (retro)
Code Review
Check for respect of team norms and best practices
Check for logical flaws & errors in code
Check for proper tests and documentation of the updated feature
Check for potential code improvement & optimization
Check for consistency mistakes
Congratulate or encourage if something was well done
Help co-workers with tasks
Look for tasks / Work on assigned tasks
Log every tasks/items worked on (standup & audit)
Provide suggestions to improve the code & processes
Provide technical support to users
Work on the documentation and make sure it's up to date
Senior Engineer
Groom backlog
Update title / description / acceptance criteria based on requirements changes
Review priority of epics and tasks within epics
Answer technical & non-technical questions related to the project from team members, users and other stakeholders
Lead design sessions & provide technical advices during team ceremonies
Work on and review Architectural changes (
ADR
)
Review best practices and potential system/processes improvement
Help with interview process of potential candidates (code pairing, character review, case review)
Review documentation structure and content and suggest improvements
Lead Engineer
Team lead
Onboard new team member to the project (history, best practices, processes, documentation)
Team members 1:1
What's going well? What could improve? (project / team level)
What they like to do? Where they want to grow?
Request & give feedback (personal level)
Delegate above tasks to junior team members & coach them through
Mentor junior team members through the technologies and methodologies used in the project
Grow the team by setting up down job offers and leading interview processes
Project/Tech Lead
Promote project to stakeholders (demo, achievements, planning)
Plan milestones, activities & deliverables (w/ product manager/owner)
Organize releases and communicate changes
Monitor product use and request feedback from users
Onboard users to the system (demo, technical advices, user creation process)
Software Architect
Code organization
Deployed systems
(Microservices, jobs, queues) Process architecture
Scale management
Security
Data organization
Implementation design
Components interactions
Laying out what the job of Software Engineer represent, important concepts, tools and useful links.
It is meant as a list of organised indexes towards different parts of the Software Engineer job.
It represents the things I know and where I would like to improve
Related Mind-Maps:
Software Development (MM)
Computer Science (MM)
Personal Goals
Inspirations
I want to solve real problems
I want to be creative
I want to be proud of my work
I want to help others & interact with the people I help
I want to be productive
I want to earn a comfortable and honest living
Goals
I want to be knowledgable in my domain of expertise
I want to be respected as a professional Software Engineer
I want to inspire other Engineers and help them grow
I want my team members to be content to have me as their lead and colleague
I want to design systems that work and stay relevant
I want to earn enough to take care of my family and my life projects
Useful Links:
Code review
12 Factor App
Backend Interview Questions
Soft skills
Work tech skills
Software Philosophies
SOLID Principles
Project Management
SW Project Management
Inspirations
Legend:
:blue_book:: Proficient Knowledge
:octopus:: Usable Knowledge
:green_book:: Learning In Progress
:orange_book:: Would like to learn more
:red_circle:: Not working on
:grey_question:: Mind map in Progress