Thế nào là Software Solution Architect ?

     Software Solution Architect (thường gọi tắt là Solution Architect hay SA) là một Job trong ngành phần mềm. Với sự bùng nổ của ngành phần mềm những năm gần đây thì Solution Architect là đang là một hướng đi rất đáng để theo đuổi dành cho các bạn đam mê nghề lập trình. Vậy Solution Architect là công việc như thế nào, đóng vai trò gì trong dự án, đòi hỏi những kỹ năng gì, tất cả sẽ được đề cập trong bài viết này.

Vai trò của Solution Architect

Vai trò của một Solution Architect là đưa ra kiến trúc để xây dựng phần mềm đáp ứng được các yêu cầu về functional và non-functional của phần mềm đó. Và điều chớ trêu là thường các yêu cầu về non-functional như performance, security, scalability…mới là những thứ khó đạt được. Vậy thì kiến trúc ở đây bao gồm những gì ? Kiến trúc ở đây nó bao gồm rất nhiều thứ, từ cách phân chia các module như thế nào, mỗi module chịu trách nhiệm xử lý cái gì, phương thức communication giữa chúng ra làm sao, sử dụng platform gì, lựa chọn framework nào, third-party nào… Ngoài việc đưa ra kiến trúc thì Solution Architect cần phải coding prototype để chứng minh tính khả thi của solution, implement những xử lý core, xử lý phức tạp, tạo sẵn khung cho hệ thống để các anh em developer dễ dàng code theo. Ngoài ra, trong nhiều dự án thì Solution Architect cũng phải tham gia vào cả giai đoạn phân tích nghiệp vụ cùng với Business Analyst (BA). Chúng ta có thể hệ thống lại một cách rõ ràng hơn về các công việc mà một Solution Architect cần phải làm như sau:

  • Tham gia phân tích nghiệp vụ để định hướng sớm về Solution hoặc đưa ra các đề xuất điều chỉnh nghiệp vụ để tăng tính khả thi của phần mềm.
  • Đưa ra các giải pháp kiến trúc để đáp ứng được các yêu cầu về functional và non-functional
  • Phân tích, đánh giá các giải pháp và chọn ra giải pháp phù hợp nhất.
  • Code prototype, implement những xử lý core, xử lý phức tạp
  • Transfer lại cho Team về giải pháp, kiến trúc hệ thống.
  • Support team xử lý những vấn đề khó phát sinh trong quá trình implement.

Những tiêu chí nào dùng để đánh giá một Solution có tốt hay không ?

Một Solution tốt thì đương nhiên là phải đáp ứng được các yêu cầu về functional và non-functional, ngoài ra cần phải thỏa mãn các tiêu chí sau:

  • Maintainability: Đáp ứng với việc thay đổi một cách nhanh chóng, tốn ít công sức và mức độ ảnh hưởng thấp.
  • Scalability: Có khả năng mở rộng, xây dựng thêm các tính năng mới mà ít ảnh hưởng đến các tính năng sẵn có. Tốn ít thời gian và công sức
  • Reusability: Phải thiết kế làm sao để các module có thể được sử dụng lại ở các hệ thống khác mà không cần phải chỉnh sửa hoặc chỉnh sửa rất ít.
  • Reliability: Hệ thống xây dựng theo solution đó phải có độ tin cậy cao, chạy ổn định, đảm bảo toàn vẹn dữ liệu.
  • Testability: Có thể dễ dàng test được hệ thống sử dụng các test framework sẵn có
  • Security: Hệ thống xây dựng theo solution đó phải đảm bảo an toàn thông tin (chống tấn công mạng, chống revert source code,… ). Thường thì các hệ thống chạy trên nền tảng web, mobile sẽ đòi hỏi về security cao hơn các hệ thống khác.
  • Feasibility: Đây là một tiêu chí quan trọng nhất nhưng được nói đến cuối cùng vì nó ảnh hưởng đến tất cả các tiêu chí kể trên.  Một Solution đưa ra thì ngoài việc phải khả thi về phương diện kỹ thuật thì còn phải khả thi về phương diện nguồn lực con người, phải khả thi về mặt thời gian. Chính vì vậy đôi lúc, để đảm bảo Feasibility thì chúng ta phải hy sinh một số các tiêu chí đã đề cập ở trên.

Khi nghiên cứu để đưa ra solution cho một yêu cầu nào đó thì Solution Architect cần phải bám vào các tiêu chí này để đưa ra solution sao cho phù hợp nhất.

Những kiến thức và kỹ năng cần có ở một Solution Architect giỏi

  • Self Study: Solution Architect phải có khả năng tự học, tự tổng hợp và chọn lọc lượng kiến thức khổng lồ từ internet một cách nhanh chóng để phục vụ cho công việc của mình.
  • Coding: Solution Architect phải là người có kỹ năng coding đỉnh của đỉnh. Vì khi làm solution thì phải code thử để xem solution có khả thi hay không, sau đó còn phải code prototype, implement các xử lý chính. Tất cả những việc đó cần phải hoàn thành trong thời gian ngắn nên nếu không có kỹ năng coding cao thủ thì khó có thể làm được.
  • Programming Language: Solution Architect cần phải hiểu rất sâu ít nhất một ngôn ngữ lập trình. Nếu giỏi nhiều ngôn ngữ lập trình thì sẽ tốt hơn vì sẽ biết nhiều framework hơn, có nhiều lựa chọn cho các solution hơn.
  • Framework: Hiểu biết nhiều framework, biết cách áp dụng các framework đó để giải quyết các bài toán cụ thể.
  • Architecture Pattern: Cần có tư duy thiết kế theo Pattern, áp dụng các Pattern sẵn có vào solution để tăng chất lượng và độ tin cậy.
  • New Technology: Luôn luôn nghiên cứu và học hỏi các công nghệ mới, xu thế mới trong lĩnh vực của mình, đưa các công nghệ đó áp dụng vào các solution của mình.
  • Domain Knowledge: Nên trang bị các kiến thức về lĩnh vực mà mình đang làm, điều này sẽ rất có lợi cho Solution Architect khi phân tích requirements.
  • Documentation: Nếu bạn có kiến thức uyên thâm, design hệ thống tốt nhưng lại không viết thành tài liệu để người khác hiểu được thì cũng vô nghĩa. Vì vậy kỹ năng viết tài liệu một cách khoa học, logic, rõ ràng và dễ hiểu là cực kỳ quan trọng đối với một Solution Architect.
  • Presentation & Communication: Solution Architect không làm việc độc lập, sau khi đưa ra được solution để giải quyết yêu cầu thì Solution Architect cần phải trình bày và bảo vệ solution của mình với đội ngũ phát triển (development team), với khách hàng. Solution Architect cũng cần transfer solution của mình cho development team và support họ bất cứ lúc nào. Vì vậy, kỹ năng Presentation & Communication là cực kỳ quan trọng.

Cần làm gì để trở thành một Solution Architect ?

  • Xác định rõ lĩnh vực phần mềm mà bạn muốn làm. Ví dụ: Enterprise application, Automotive, Cloud, Big Data, Mobile Application, IoT…
  • Hãy xem bạn còn thiếu kỹ năng, kiến thức gì thì cố gắng bổ sung và tích lũy liên tục trong quá trình làm dự án. Khi làm các dự án hãy quan tâm đến Architectural Design của hệ thống, các Technology, Framework, Platform được sử dụng trong các dự án đó. Cố gắng hiểu những thứ đó, và nếu có thể hãy copy các tài liệu liên quan để tham khảo về sau. Ngoài việc học từ dự án hãy học các khóa online về các công nghệ mà bạn quan tâm. (Các trang nên học mình sẽ recommend ở một bài khác)
  • Luôn phấn đấu, thể hiện vai trò, tầm quan trọng và ảnh hưởng của bạn trong các dự án mà bạn tham gia. Khi bạn có tầm ảnh hưởng lớn thì các sếp sẽ để ý bạn, bạn sẽ được đưa lên các vị trí cao hơn, từ dev sẽ lên team lead, technical leader.
  • Trong các dự án phần mềm không phải lúc nào cũng có sự tham gia của Solution Architect. Những dự án vừa và nhỏ, hoặc không phức tạp về kỹ thuật thì thường không có Solution Architect, và khi đó Technical Leader của dự án sẽ kiêm luôn một số công việc của Solution Architect. Nếu bạn đang là Technical Leader, hãy nắm bắt lấy cơ hội để luyện tập và trải nghiệm công việc của Solution Architect.
  • Hãy đăng ký tham gia các khóa học về Solution Architect mà công ty ban tổ chức, hoặc các khóa online chất lượng khác về Solution Architect. Điều đó sẽ giúp bạn hệ thống lại các kiến thức của mình một cách bài bản hơn, có cái nhìn toàn diện hơn về nghề Solution Architect.
  • Nếu có điều kiện (thời gian, tiền bạc) thì hãy cố gắng thi các chứng chỉ quốc tề về Solution Architect.

Một số chứng chỉ Solution Architect quốc tế cho anh em tham khảo

Con đường đến ngày vinh quang còn dài phía trước, chúc các bạn, các anh em may mắn và thành công !

— Phạm Minh Tuấn (Shun) —