Goodbye 2023
· 6 min read
Summary
- struggled to improve software development and my career as a software engineer
- engaged in development as a almost tech-lead
- sought for a new job
- consequently got higher point of view to think of software development
- domain
- project
- software/system design/architecture
- finally got a next new job
- onboarding from Febuary
My 2023
Month | Project |
---|---|
01-03 | Education Support System for Elementary & Junior High School |
04-12 | Assistant System for Government Cloud Management |
Struggled to Move a Project Forward
- project members had been divided into a tech-lead and others; a project manager and other engineers
- we wanted to make our team more proactive
- frequent communication
- sharing technical knowledge and enhancing not only individual skills but also entire team's skills
- on the other hand, the tech-lead has passive and defensive personality but pride as a tech-lead
- consequently, our team had so many clashes over every decision
- we wanted to make our team more proactive
- i learned
- just to insist on correct opinions was not a way to improve software development
- need to make good atomosphere and giving team members motivation first to move forward the same goal
- under the circumustance, i guessed changing the human mind and the environment are more challenging
- i felt this suppressed or indifferent atomosphere is charastaristic of my company, not only of my current project
- in fact most of the team members of the next project are like that too
- tended to seek a new environment to work as a software engineer
- i felt this suppressed or indifferent atomosphere is charastaristic of my company, not only of my current project
Sought the Next Job
- i began to seek for environment where i can experience and involve in more technical work, also a company encourages me to so that
- but i was rejected over and over again
- i felt down, there seemed a gap between knowledge i had and experience companies required for me
- especially i found that i focused on micro area in software development such as how to write clean and efficient code, but more macro perspective was required; system design
- i began to study system design and platform services
- Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems was a great book for me; it gave me a lot of new things
- there are so many trade-offs between system designs/architectures; so careful consideration is needed to accomplish the demand
- many companies require Golang knowledge or experience
- studied Golang by reading Go Programming Language
- it's been so long time but finally i got a next job; provide platform such as libraries for developers and infrastructure for services; fortunately which really fits what i hoped from the first motivation for job-change
Importance of Domain Knowledge
- while i'd attempted to design a system over and over, one day i found that it's so important for software engineers to get involved themselves into domain problem
- good software/system architecture/design is robust to change
- but how do we anticipate to direction to which our software/system will change?
- it's impossible to build software/system flexible to change without domain knowledge
- this fact intrinsically leads us to think about the product value of the software that we're creating, communicating with not only technical persons but also UI/UX design teams, sales department, stakeholders and end users
- i began to study DDD from fundamentals by reading Domain-Driven Design: Tackling Complexity in the Heart of Software
- i've felt no need to learn DDD until i noticed importance of involving domain because i've thought it's just one of design patterns of OOP
- i think the most important part of DDD is how to model/abstract things we want to implement through the common understanding about a domain; ubiquitous language
- design pattern of OOP is just one of ways to model/abstract them in DDD
- in fact Domain Modeling Made Functional: Tackle Software Complexity with Domain-Driven Design and F# describes how to implement a system based on DDD using functional programming language. it really interested.
Joined a New Profject
- i left the project of the education support system then joined a new project which develops a system to assist government cloud management from April
- scrum framework
- there is no tech-lead position in the team but implicitly i was almost that
- dedicated to decisions about from what languages, libraries and development tools to use, to coding guidelines and software/system design/architecture
- proactively participated in meetings, including such as for operators and for UI/UX design team, to collect and make use of domain knowledge for design and implementation
- document knowledge and decisions to share with team members
- setup CI/CD
- i learned a lot of new things from infrastructure and backend to frontend
- scrum
- i've experienced scrum development but strictly following the framework under scrum coaches is for the first time
- GCP
- Terraform
- CDKTF (TypeScript)
- monorepo using Turborepo
- Node.js
- Next.js
- React Server Components
- Figma
- ADRs
- scrum
Advent of Code
- joined for the first time
- fun but hard work to solve a problem everyday
- couldn't solve 5, 6 or so problems
- given motivation to study algorithms again
2024 Resolutions
- good luck and have fun!
- honestly i'm hopeful but also very nervous at the same time
- don't forget having fun; everything follows that!
Books
Done Reading Newly
- A Philosophy of Software Design
- System Design Interview
- Computer Systems; A Programmer's Perspective
- Go Programming Language
- Domain-Driven Design: Tackling Complexity in the Heart of Software
- Domain Modeling Made Functional: Tackle Software Complexity with Domain-Driven Design and F#
- AWS Certified Solutions Architect Study Guide: AWS Certified Solutions Architect Study Guide: Associate (SAA-C03) Exam
- Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems
Done Reading Again
- Clean Architecture: A Craftsman's Guide to Software Structure and Design
- The Pragmatic Programmer: your journey to mastery (20th Anniversary Edition)
Reading
Stacked
- Essentials of Programming Languages
- A Book of Abstract Algebra
- Mythical Man-Month, The: Essays on Software Engineering (Anniversary Edition)
- Release It!: Design and Deploy Production-Ready Software (2nd Ed.)
- SQL Antipatterns: Avoiding the Pitfalls of Database Programming
Music
- Kimi ni Kaikisen / inabakumori