효율적인 소프트웨어 개발을 위한 7가지 핵심 원칙

1. 처음부터 끝까지 가치에 초점을 맞추자. (Begin and end with a focus on value.) 
소프트웨어 제품을 만들때, 소프트웨어가 어떤 가치를 가지는지 마음속에 두고 시작한다. 단지 돈을 벌기 위해서가 아니라, 이 소프트웨어를 통해서 우리가 원하는 것(우리를 얼마나 행복하게 해 주는가, 우리의 삶을 얼마나 윤택하게 해주는가로 평가될 수있는)이 무엇인가에 관한 이야기이다. 우리가 가치를 두고 있는 것이 무엇인지에 대해서 진지하게 고민해보고, 어떻게 하면 더 중요한 것이 무엇이고 덜 중요하거나 버려야할 것이 무엇인지 판단하는 능력을 기를 수 있을지 생각해보자.
2. 작더라도 동작하는 소프트웨어로 제품을 이끌어가자. (Guide the product in terms of small slices of working software.)
가치를 만들어내는데 동의하고 책임감을 가지고 함께 일 할 수 있는 팀을 만들자. 팀원들에게 우리가 필요한 것이 무엇이고 우리에게 주어진 시간이 얼마나 있는지 공유하고 모든 팀원들이 이해했는지 확인하자. 일정과 약속한 것들만 가지고 단순하게 검사하는 것이 아니라, 그들이 실제로 무엇을 만들고 있는지 주의깊게 살펴보면서 팀원들을 이끌어나가자. 이렇게 하면 "기능(feature)"이라고 부를 수 있는 가치의 일부분을 만날 수 있다.
3. 해야할 일을 중심으로, 그 일을 할 수 있는 사람들로 팀을 꾸리자. (Organize around the work to be done, with people who can do it.)
개발할 기능을 중심으로, 필요한 모든 것들을 개발할 수 있는 팀을 구성하자. 기능에 초점을 맞추면 빠르게 계획을 세우고 가치를 개발할 수 있다. 적합한 사람들로 팀을 구성하고 팀원들이 필요한 기술을 습득할 수 있도록 지원한다면 더 효율적으로 일을 마무리할 수 있다.
4. 기능의 관점에서 계획을 세우자. (Plan in terms of features.)팀을 꾸리고 팀원들이 기능에 대해서 충분히 이해하게 되면, 이제는 어떤 기능을 먼저 개발하고 어떤 기능은 뒤로 미룰지 결정함으로써 프로젝트를 원하는 방향으로 이끌어 나갈 수 있다. 우선순위가 가장 높은 가치에 초점을 맞추고 먼저 개발하자.
5. 기능의 관점에서 개발하자. (Build in terms of features.)
당연히 모든 소프트웨어 제품에는 아키텍처(architecture)와 인프라스트럭처(infrastructure)가 필요하다. 프로젝트를 진행하면서 필요한 아키텍처나 인프라스트럭처를 포함해서, 모든 것들을 기능을 중심으로 기능에 맞춰서 만들면서 개발을 진행하자.
6. 기능을 가능한 작게 나누자. (Slice features thinly.) 
필요한 기능을 가치를 가지는 범위내에서 가능한 가장 작은 크기로 나누자. 많은 기능이 포함되어 있지 않더라도, 동작하는 소프트웨어 제품을 가능하면 일찍 개발하고, 제품 출시일에 맞춰 하나씩 하나씩 발전시키고 향상시키자. 가장 우선순위가 높은 가치를 먼저 개발해 나가면, 항상 최고의 제품을 내놓을 준비가 되어 있는 것이다.
7. 매일 매일 품질을 높여가자. (Build quality in every day.) 
매 순간 소프트웨어 설계 품질을 최상으로 유지하고, 확신을 가지기 위해서 필요한 실천 방법들은 모두 사용하자. 그렇게 한다면 결함이 없는 소프트웨어에 가장 가까운 소프트웨어를 항상 유지할 수 있다. 끊임없이 지속적으로 그리고 유지 가능하게, 가치를 만들어 나가자.

댓글

이 블로그의 인기 게시물

iOS 아이폰용 앱 개발을 위한 디자인시, 디자이너가 참고 해볼만한 사항들

스냅드래곤 기반 크롬북, ‘트로그도어’ 개발 중

[펌] '악마는 프라다를 입는다'의 진짜 명대사