project-process.mdwn 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. Partager is a community project. Right now the size of this community is 1, but
  2. when I say "community" in this context I mean that the project and its
  3. components are created without central dictatorship. The only project-global
  4. rules are the ethical basis and the spirit document ("statement of love") of the
  5. project. Other things are technical decisions and conventions, and can be
  6. changed according to needs and new ideas. Decisions should be made by consensus.
  7. This lack of "managers" telling everyone what to do allows the project
  8. development and management process to be flexible and open to improvements and
  9. new ideas. Anyone can take any role, and even different roles in different
  10. projects. There's no hierarchy, just hackers.
  11. There are many different methodologies for software development and engineering,
  12. and you can use whatever you like. But all the information, resources, tasks,
  13. bugs etc. of the project still need to be managed responsibly to allow easy
  14. cooperation and team work. The items below are some possible and suggested
  15. components or pages you may want to have, just to give you ideas. __You don't
  16. have to use them__, and you're welcome to suggest and try any new methods you
  17. know. It depends on the type of the project - some projects have a lot of math,
  18. models and research, while others are GUI applications relying on existing
  19. backends.
  20. Reference: [[!wikipedia Software_development_process]].
  21. # Infrastructure
  22. Create a page for the project under the appropriate project category. For
  23. example, if it's a component of Razom, put the project page under Razom's page.
  24. Add a link from the parent page to your new project page. Even if you decided to
  25. not write much for now, at least include some contact info and a brief
  26. explanation of the project's purpose. You can see all the standard structures
  27. and subpages other projects have - but don't hurry, you can add them later.
  28. Create a git repository on Partager's server. If for any reason you prefer to
  29. use your own server or Savannah, it's fine but please explain why and discuss it
  30. first. If you do use an external server, arrange a mirror on Partager's git
  31. server.
  32. # Requirements
  33. Either on the project's page or on a "requirements" subpage, explain exactly
  34. what the project is supposed to do. The problem, the idea of the solution,
  35. features and scope. If it's complicated, you can do some research, write some
  36. test program, experiment with existing software, upload relevant screenshots and
  37. so on. If it needs to be thorough, make it thorough. At this early stage making
  38. changes is easy, so take your time to think and add ideas and consider possible
  39. problems which may appear.
  40. This is also the time to make a list of existing similar and related software,
  41. examine it, study its weaknesses and strengths, and make sure your new project
  42. brings something new. By the way things like "joy of hacking" are justifications
  43. too, but if that's the only rationale, you should probably try to join those
  44. existing projects first and see if they can be used for Partager's purpose.
  45. If after this proces you feel you do want to start a new project - go ahead. I'm
  46. against the strict "never reinvent anything". Sometimes you just have a new
  47. approach, or want to create software that is free, or want to work in a
  48. community environment without a company intervening and without hierarchy. It's
  49. okay, go ahead and start the project :-)
  50. # Specification
  51. Some Partager components, such as computer languages, need a specification.
  52. However, I don't expect any Partager specification to look like something
  53. written by robots. Make it exactly as format as needed - no more, no less.
  54. If you feel the requirements are thorough and organized well enough, maybe you
  55. don't need a specification at all. If you do need one, start by gathering the
  56. requirements by category, organize them, explain in clear language. Create
  57. diagrams (you can use Dia for that), sketch some APIs if you need.
  58. If it's something which requires a very strict and stable specification, like
  59. a protocol or a language, make sure it's as precise as needed. It's going to be
  60. critical. But you can always insert jokes and puns, and use regular wiki pages
  61. for it. No special page formats are needed - just make sure it's organized well,
  62. there are sections and subsections, a table of contents, version control and so
  63. on.
  64. Actually, if you want to do serious full version control of a specification, you
  65. can make it a new separate git repository. It's still possible to make it
  66. visible as a compiled web page by running a markdown compiler (or ikiwiki) on
  67. the source (or any tool matching the source format you use) and pushing the
  68. result into the FTP-accessible underlay.
  69. # Design
  70. This is where you choose the software components, protocols, interfaces, and
  71. tools your project will need. Plan the structure, the packages, the classes,
  72. the entities and the relationships.
  73. The way I see it, design is like art. If you do it like a robot, strictly
  74. following design pattern books and copying all the ideas from existing projects,
  75. you may be missing all the fun. It's especially true for large projects in which
  76. there's significant innovation in the design. Make it flow like a river, like a
  77. flying carpet. Make sure you have motivation and excitement! At least enough to
  78. create an elegant reusable design with high cohesion and low coupling.
  79. Since Partager is about community and free life, I imagine you won't have a
  80. reason to create something if you don't enjoy the process. But if you just need
  81. a tool for some other project, and this tool isn't that fun to make, consider
  82. suggesting the project to other people! Ask in the community, maybe someone else
  83. will find it interesting or exciting and help you.
  84. Design with passion ;-)
  85. # Implementation
  86. Some guidelines for the code:
  87. - Readable
  88. - Hackable
  89. - *Small* easy to understand files and modules
  90. - Short functions with clear purpose
  91. - Use common patters for common things, e.g. STL container iterators
  92. - Don't optimize without need
  93. - Coding conventions
  94. - Make sure to put the license notice, add new sources to Makefile.am, etc.
  95. Small is good. There's no pride in having tons of lines of code. Simple, short,
  96. to-the-point. Put each advanced part in its own module/section with good
  97. documentation. If stuck or confused, don't hesitate to go back to some design or
  98. planning and then proceed with coding.
  99. Document every non-trivial decision. You can keep a diary if you want, or write
  100. about decisions and designs in a blog. Just make sure you don't end up
  101. forgetting why you did things the way you did.
  102. If there's a whole team of developers, use IRC and mailing lists to talk and
  103. coordinate the work. Each developer should know her responsibility and current
  104. task. If you plan to start some new task or feature, announce it. Let the other
  105. developers know.
  106. # Iterations
  107. Sometimes, while writing the code you'll find new requirements or new design
  108. goals or issues. It's probably a good idea to notify all the developers, since
  109. they may be writing code based on the older design where the new issue is not
  110. handled. So bring it to their attention.
  111. You can then go to the design pages, make the necessary updates, decided what
  112. needs to be changed in the code and the models, and make the change carefully
  113. while fixing everything broken by the modifications.
  114. Many of Partager's high priority features and ideas are not present in existing
  115. desktop environments and user programs, which means there's little practical
  116. experience to learn from. Some designs will naturally need many iterations. User
  117. interfaces will need testing, refinement and research until polished and ready
  118. for release. Building small units, one at a time, helps make these iterations
  119. with minimal potential damage to other existing modules. Incremental may be your
  120. friend here.
  121. You can also make a plan for some expected iterations. Make a list of features,
  122. and choose a group to implement in each iteration. It will allow testing and
  123. feedback to start at an earlier stage. Of course it won't take into account the
  124. unexpected problems and changed requirements/designs, but it will help handle
  125. them when they come.