Ví dụ:
Một vài điểm tôi sẽ muốn trao đổi để có thể hiểu thêm seniority của 1 engineer:
Working style
- Anh có tự tin nếu làm việc với techstack ko thân thuộc ko? Vd như chuyển từ Flask/Python/Postgres sang Spring/Java/Oracle?
- Trường hợp phải handle 2-3 projects/repos cùng lúc thì anh có gặp khó khăn gì khi vừa code Nodejs, vừa code .Net hay vừa maintain Restful vừa impl GraphQL ko?
- Mức độ ảnh hưởng đến người xung quanh như mentor, knowledge sharing, tech-talk, guide/document, recommendation... Tóm gọn lại là người xung quanh học hỏi từ anh cái gì.
Software in General
- Về Interprocess communication, kinh nghiệm và cách lựa chọn (MessageQueue, shared db, file, RPC, Direct http, socket...)
- Về Synchronization, khi nào dùng Mutex, khi nào dùng RwLock, Mem Cell... Hiểu biết về data race, threading, async/event-loop...
- Indexing, optimize query, connection pool, sharding, replicate...
- Cơ bản và kinh nghiệm giữa NoSQL và SQL.
Coding style:
- Cách cấu trúc project, chia folder, format code, dependencies
- Phong cách open/review PR
- Logic trong code như quá dài, quá phức tạp, quá khó sử dụng, ko mở rộng....
- Cách sử dụng data structure: Khi nào dùng hashset, khi nào dùng Queue/Deque...
- Chỗ nào cần đọc file, chỗ nào cần dùng Mem, chỗ nào cần lưu db, quản lý pool ra sao...
- .... quá nhiều thứ khác...
- VIM style +1 điểm
Problem solving
Thường một người có kinh nghiệm sẽ tìm root cause và phân tích sự kiện rất nhanh.
Ví dụ khi server bị lag, chậm, hay sập hẳn, thì sẽ narrow down vấn đề từ host/doman -> high load -> resource usage -> bottleneck point -> root cause chẳng hạn.
Hoặc vd bị dính lỗi ko thể cập nhật dữ liệu cho user profile được, thì sẽ f12 -> api inspect -> cat log file -> jump to the block of code nhanh hơn junior vì họ biết chỗ nào cần log cái gì.
Software Design
Khi mà có yêu cầu làm service abc gì đó, senior sẽ có rất nhiều kinh nghiệm để chọn giải pháp tốt/ phù hợp.
- Nhiều service cần read 1 lượng data khá giống nhau -> message publish/subcribe.
- Service ko cần real-time, ko critical và có thể làm dần -> queue.
- Service cần call endpoint liên tục -> Batch processing, batch call, bulk update...
- Data cần rất nhiều filter -> Search Index.
- Data đơn giản nhưng số lượng record lớn, đọc nhiều -> NoSQL, In-mem db.
- Yêu cầu ổn định, càng ít runtime bug càng tốt, high reliable, high availabity -> Nên bắt đầu bằng một ngôn ngữ đã đc battle-tested, strong typed, ngược lại nếu cần fast delivery, productivity -> NodeJs.
.... Còn nhiều nữa...
Bonus:
- Một số kn về git: merge/rebase, cherry pick, stash, branch, PR...
- Scripting như Shell, bash, docker, linux cmd, operation...
Viết đại vậy thôi (ko đầy đủ) để anh thấy là tất cả những thứ trên đều thu lượm được từ kinh nghiệm, chứ chẳng phải do làm lâu năm 1 ngôn ngữ / framework nào đó. Anh đã mạnh thì đi đâu cũng mạnh, outsource product startup ko thành vấn đề.