Remote working – Những đúc kết cá nhân.

From: https://thefunnybeaver.com/30-funny-memes-anyone-work-home-remote-worker/

Dịch N Covid-19 đã và đang có những ảnh hưởng nghiêm trọng đến nền kinh tế thế giới cũng như cuộc sống hằng ngày. Khi mà biện pháp hiệu quả nhất để hạn chế lây nhiễm là cách ly các ca nhiễm, hạn chế tối đa tụ tập đông người, tránh tiếp xúc gần thì mô hình Remote working (làm việc từ xa) đã trở thành một điều không thể tránh khỏi.
N Covid-19 thay đổi cách tổ chức vận hành một cách đột ngột khiến cho nhiều cá nhân, tổ chức còn đang rất lúng túng trong việc áp dụng mô hình làm việc mới . Tuy nhiên, mình nghĩ đây cũng chính là cơ hội để thử nghiệm và áp dụng các mô hình làm việc này trong thực tế.

Mình rất may mắn tiếp xúc mô hình Remote work cũng được gần 4 năm. Công ty mình có nhiều văn phòng ở nhiều quốc gia, múi giờ khác nhau như UK, Spain, Finland, Japan, Singapore, Thailand, Malaysia, Việt Nam. Hơn nữa, phần lớn nhân viên làm việc online ví dụ team dev của mình gần 10 người nhưng mỗi lần daily meeting thì cũng đã 7 location rồi, người thì họp từ nhà, từ quán cafe, từ sân bay hay đang di chuyển trên đường,…

Theo nhiều kết quả nghiên cứu cho thấy làm việc từ xa, được tự do lập trình thời gian làm việc, giúp chúng ta cân bằng tốt hơn công việc và những trách nhiệm gia đình hằng ngày. Nhưng làm thế nào để có thể làm việc hiệu quả, mình sẽ chia sẻ một số kinh nghiệm mình đúc kết trong quá trình làm việc với remote team.


PS, những điểm này đều là trải nghiệm cá nhân của mình nên có thể nhiều điểm không phù hợp hoặc không đúng với nhiều cá nhân, công ty.

Team

Core working time: Thời gian cả team làm việc cùng lúc. Theo kinh nghiệm của cá nhân, tốt nhất là mỗi ngày khoảng 3-4 giờ mỗi ngày. Nhờ thời gian này giao tiếp trong team diễn ra trơn tru hơn, đồng bộ hơn và các thành viên sẽ cảm thấy đoàn kết.

Chia sẻ tiến độ của thường xuyên: Mỗi ngày team mình có Daily meeting tầm 15-20 phút vào đầu ngày, mỗi người sẽ chia sẻ tiến độ của mình. Việc chia sẻ thông tin tiến độ của bạn với mọi người sẽ thúc đẩy bạn làm việc tốt hơn và giúp các thành viên khác nắm được tình trạng công việc của bạn tốt hơn.

Chia sẻ thông tin : Hãy tận dụng các dịch vụ lưu trữ chia sẻ tài liệu và giữ các tài liệu và thông tin cần thiết luôn mới nhất, đúng nhất và luôn trong tầm tay của mọi người mọi lúc, mọi nơi

Thống nhất quy tắc về liên lạc của team: Nếu câu hỏi mà bạn có thể đợi trong vài giờ, hãy gửi email cho họ. Nếu bạn muốn trả lời trong vòng vài phút, hãy nói chuyện trên các công chat như Slack, … Nếu bạn đang trong tình trạng khẩn cấp, hãy dùng chức năng cuộc gọi trên công cụ chat hoặc gọi điện thoại . Điều quan trọng hãy thống nhất quy tắc này với team của bạn.

Cố gắng sắp xếp cơ hội gặp mặt trực tiếp với team: Khác với làm việc trực tiếp, khi làm remote bạn sẽ không cảm nhận được cái sướng khi hoàn thành dự án, release phiên bản mới lên AppStore, hay không khí căng thẳng khi deadline dí sát đít,…. Team remote nên sắp xếp thời gian để các thành viên có thể ngồi lại làm việc với nhau ít nhất 1-2 lần 1 năm để khích lệ lẫn nhau.

Cá nhân

Hãy lập thời khóa biểu và tuân thủ nghiêm túc: Thời gian cá nhân lấn át thời gian làm việc thì sẽ không hoàn thành công việc. Nhưng ngược lại để thời gian làm việc ảnh hưởng đến thời gian cá nhân thì ý nghĩa của việc remote working sẽ không còn nữa. Mình làm việc ở nhà nhiều lúc thấy vất vả hơn lên công ty nhiều vì vừa phải giỏi việc nước mà phải đảm cả việc nhà nữa. Mãi làm việc mà không chơi với con hoặc quên cắm cơm cho vợ , … thì ôi thôi. 🙁 .Theo kinh nghiệm của mình thì nên chia nhỏ khung thời gian làm việc 30-40 phút, có alarm để báo hết giờ, báo giờ giải lao, uống nước, … Tốt nhất là nên chia sẻ thời khóa biểu này với vợ hoặc người thân trong gia đình.

Đừng quá kỳ vọng nhận được câu trả lời ngay lập tức: Khác với làm việc trên văn phòng, bạn có thể nhìn thấy được đối phương có rảnh tay hay không, làm việc từ xa thì rất khó. Hồi đầu, mình thường xuyên thấy nóng ruột khi chờ reply của người khác. Take it easy.

Hãy ra ngoài thay đổi không khí: Nếu bạn đã quen với môi trường làm việc có nhiều người vui vẻ, sự cô độc khi làm việc một mình có thể khiến bạn mệt mỏi. Nếu bạn ở nhà một mình, tốt hơn là nên thay đổi chọn một nơi khác chẳng hạn như trong một quán cà phê hoặc không gian làm việc chung.

Đầu tư cho môi trường làm việc thoải mái: Công việc nào cũng cần có sự sáng tạo. Nhằm mục đích thúc đẩy sự sáng tạo thì việc đầu tư cho môi trường làm việc, các công cụ phục vụ làm việc là rất xứng đáng. Hãy đầu tư vào bàn ghế, bàn phím, chuột, màn hình, ….

Công cụ

Slack: công cụ chat

Zoom: Gọi video online

Trello: Quản lý Todo cá nhân

Google Drive: Quản lý, chia sẻ tài liệu

Time Out: Quản lý khung thời gian làm việc

Kết luận

Mục đích của remote working là làm việc một cách thoải mái nhất cho mọi người. Không có quy tắc rằng nhất định bạn phải làm điều này hoặc không được làm điều kia. Làm việc từ xa thì phải chấp nhận một số nhược điểm

Nhược điểm 1: Không có cơ hội gặp gỡ đồng nghiệp: sẽ mất đi cơ hội thảo luận trực tiếp, hoặc đi ăn trưa, chém gió thoát FA
Nhược điểm 2: Rất khó để chuyển mode của bạn sang chế độ làm việc. Nếu bạn làm việc ở nhà có con nhỏ thì sẽ thường xuyên bị mất tập trung.

Túm lại, không có gì là tốt 100% cả (kể cả lấy vợ). Điều quan trọng nhất mình nghĩ để có thể hạnh phúc với remote working là (1) tận hưởng tối đa cái tốt; (2) giảm tối thiểu thiệt hại của các hạn chế, nhược điểm.

Quản lý file docker-compose.yml cho nhiều môi trường

From: https://www.docsity.com/en/news/it/funny-aspects-related-developers/

Trong quá trình làm việc Docker của mình thì docker-compose là một phần không thể thiếu được. Compose giúp định nghĩa và chạy một application với nhiều container (multi-container application). Chỉ với 1 file yaml thiết định và docker-compose up mình có thể dễ dàng tạo và chạy toàn bộ các services phục vụ cho việc chạy ứng dụng như Mysql, Fluentd, Redis, Nginx,..

Compose là một công cụ tuyệt với không chỉ dùng cho development, testing, staging environments, mà còn ứng dụng trong CI workflows.

Cũng giống như các công nghệ khác, luôn có rất nhiều điều để tìm hiểu về Docker, thường có 2 cách tiếp cận broad strokes (học rộng) and deep dives (học sâu).

Nhưng cách tiếp cận cá nhân của mình là tìm hiểu 1 lượng kiến thức vừa đủ để tự tin bắt đầu sử dụng một công nghệ, và để môi trường thực tiễn dạy cho mình những gì cần học tiếp theo. Phần lớn của việc sử dụng Docker trong môi trường thực tế.

Hôm nay mình sẽ chia sẻ cách quản lý file docker-compose.yml cho nhiều môi trường khác nhau như thế nào.

Mình dùng docker-compose file cho môi trường làm việc ở local, và môi trường staging, production. Bài toán thường gặp ở đây là mỗi môi trường khác nhau yêu cầu thiết định khác nhau. Ví dụ:

  • Port dùng ở local thường không được dùng ở môi trường production vì lý do security,…
  • Phải chạy nhiều docker-compose trên cùng một server
  • Cần thiết định logging driver cho từng môi trường khác nhau. Ví dụ trên production dùng AWS Cloudwatch logs, …
  • Ở môi trường production thì volume path khác
  • Dùng các cloud storage như RDS trên môi trường production, …

Rất may mắn là Docker-compose hỗ trợ cho các nhu cầu này bằng định nghĩa file docker-compose.yml

Compose supports two methods of sharing common configuration:

– Extending an entire Compose file by using multiple Compose files

– Extending individual services with the extends field (for Compose file versions up to 2.1)

https://docs.docker.com/compose/extends/

Có 2 cách tiếp cận
1) Tạo 1 file gốc docker-compose.yml base và nhiều file docker-compose cho các môi trường khác nhau để override các thiết định của file gốc

2) Định nghĩa file của từng service và tạo nhiều file docker-compose cho các môi trường khác nhau, các file này dùng cấu trúc extends để tùy chỉnh thiết định của từng service cho các môi trường.

Cá nhân mình thích cách 1) hơn vì nó tổng hợp các thiết định của môi trường vào từng file nên quản lý dễ dàng hơn. Chắc có lẽ mình đã quá quen với việc sử dụng .env để tùy biến các môi trường web rồi.

Việc sử dụng nhiều docker-compose file cho phép người dùng có thể override thiết định cho các môi trường staging, production.

Khi cần override thiết định cho môi trường staging thì mình sẽ thêm 1 file docker-compose.staging.yml, và viết các thiết định cần override vào đấy

Mình sẽ chuẩn bị 2 file

docker-compose.yml

# docker-compose.yml
web:
  image: example/my_web_app:latest
  depends_on:
    - db
    - cache

db:
  image: postgres:latest

cache:
  image: redis:latest

docker-compose.staging.yml với các thiết định volume, port, biến môi trường

web:
  build: .
  volumes:
    - '.:/code'
  ports:
    - 8883:80
  environment:
    DEBUG: 'true'

db:
  command: '-d'
  ports:
    - 5432:5432

cache:
  ports:
    - 6379:6379

Sau đấy chỉ cần chạy lệnh

docker-compose \
    -f docker-compose.yml \
    -f docker-compose.staging.yml \
    up -d

Khi chạy thì compose sẽ tự động override các thiết định trong docker-compose.yml bằng các thiết định trong docker-compose.staging.yml

Thật tuyệt vời đúng không? Bây giờ, các file tùy chỉnh cho môi trường sẽ được quản lý riêng biệt, có thể được lưu trữ trong một repo git khác hoặc được quản lý bởi một nhóm khác. Như thế vừa đảm bảo các thông sensitive, các file docker-compose.staging.yml, docker-compose.production.yml sẽ được team DevOps quản lý riêng biệt với team phát triển.

Happy hacking! Happy Docker life.

Additional, Other Kubernetes related topics is here. https://tuantranf.me/tag/kubernetes/