Collaborative Engineering

= Overview = An online collaborative engineering system provides a means for project managers to create requirements and assign tasks, for engineers to create, version and collaborate on parts and assemblies, and for fabricators to choose a project they want to build and track their progress from acquiring raw materials to completing build steps. By using an integrated system there is a constant feedback loop between all three major roles:


 * 1) Project managers can track the progress, resolve blockers and maintain momentum of engineers by following Agile/SCRUM methodologies. Once a component is released they can observe and generate reports on blockers, inefficiencies and other issues that fabricators are having building and using components.
 * 2) Engineers have clear, concise tasks achievable within short iteration cycles. A CAD repository and versioning system allows several engineers to work on related components at the same time and resolve commit conflicts if they arise.
 * 3) Builders have a convenient organizational tool to keep track of their own fabrication process, ask questions and share lessons in the dedicated component builder forum. All data from fabricators feeds back into the project to help focus direction and prioritize stories and tasks for the next iteration.

Agile Hardware Success Story
WIKISPEED uses Agile/SCRUM methodologies to achieve unprecedented efficiency and build process optimizations:
 * TED Talk: http://www.youtube.com/watch?v=x8jdx-lf2Dw
 * Much longer (1h) detailed presentation: http://www.wikispeed.com/p/agile,-lean,-and-scrum

= Roles =


 * Project Owner/Customer - Creates a project, defines high level requirements, is invested in the success of the project, follows progress via Dashboard.
 * Project Manager/Scrum Master - Collaborates with engineers to create stories, tasks and organize them into iterations. Schedules and participates in SCRUM sessions, planning, reviews and retrospective meetings.
 * Engineer/Prototyper - Creates CAD models, physical prototypes and other artifacts fulfilling project requirements and specification.
 * Observers/Subject Experts - Provide review, technical advice and comments on the ongoing design.
 * Builder - Instantiates a finished design project into an fabrication project.

= Basic Functionality =


 * 1) Create Account
 * 2) Login / Logout
 * 3) Search and view projects, builds and users.
 * 4) When listing the designs show how many ongoing/complete builds there are for that design.
 * 5) Subscribe to project, build and user activity RSS feeds.

= Dashboard =


 * 1) View progress of projects and builds you are part of or are watching.
 * 2) View daily logs of users, projects or builds you are watching.
 * 3) View tasks you are currently working on accros all projects.
 * 4) Provide reports on where builders seem to be stuck the most (acquiring part, completing step) or which steps take the longest time or have the most discussion activity.

= Design =

Project

 * 1) Attributes
 * 2) * Name
 * 3) * Slug (used in human readable URL)
 * 4) * Description
 * 5) * Organization (default: OSE)
 * 6) * Visibility
 * 7) * URL if project has a dedicated website.
 * 8) Collaborators
 * 9) * Engineers
 * 10) * Project Managers
 * 11) * Customer/Owner
 * 12) * Subject Experts
 * 13) Each collaborator can enter a short daily log/SCRUM statement.

Agile Process
The Agile process consists of creating stories that describe a problem that needs to be solved, adding tasks necessary to solve the problem, adding tests detailing how to verify that the problem is indeed solved and then creating iterations and moving stories into iterations based on priorities.

See:
 * http://en.wikipedia.org/wiki/Agile_software_development
 * http://en.wikipedia.org/wiki/Scrum_(development)

Similar Software:
 * http://www.scrumy.com
 * http://www.rallydev.com
 * http://www.atlassian.com/software/greenhopper
 * http://www.pivotaltracker.com
 * http://www.scrumninja.com
 * http://www.versionone.com

Story

 * 1) Attributes
 * 2) * Name
 * 3) * Description
 * 4) * IsBlocked
 * 5) * Status: Defined, In-Progress, Completed
 * 6) * Priority
 * 7) * Iteration/Backlog
 * 8) * Single Thread Discussion
 * 9) * File Attachments (photos, sketches, etc)
 * 10) * Owner
 * 11) * Subject Expert
 * 12) New stories automatically go into the Backlog.
 * 13) Stories can be moved into different iterations.

Story: Task

 * 1) Attributes
 * 2) * Name
 * 3) * Description
 * 4) * IsBlocked
 * 5) * Status: Defined, In-Progress, Completed
 * 6) * Assignee
 * 7) Tasks are added to stories.

Story: Test

 * 1) Attributes
 * 2) * Name
 * 3) * Description
 * 4) * Status (None or Pass/Fail from the most recent Run)
 * 5) Tests are added to stories.

Story: Test : Run

 * 1) Attributes
 * 2) * Timestamp
 * 3) * Pass/Fail
 * 4) * Notes
 * 5) Test Runs are added to tests.

Iteration

 * 1) Attributes
 * 2) * Name
 * 3) * Start Date
 * 4) * End Date
 * 5) * IsActive
 * 6) Backlog
 * 7) * A default iteration that cannot be deleted and is also not scheduled. This is where all new stories go unless explicitly assigned to a different iteration.

Artifacts

 * 1) Create Part - Create a blank part or duplicate an existing part.
 * 2) * Bill of Materials
 * 3) * Build Instructions
 * 4) * Manuals
 * 5) * Revision History
 * 6) Create Assembly - Create a blank assembly or duplicate an existing assembly.
 * 7) * Add parts from this project or another project.
 * 8) Forum
 * 9) * Forums are threaded and work similar to current Vanilla OSE forum.
 * 10) * Two project level micro-forums automatically created:
 * 11) *# Design and prototyping forum
 * 12) *# Fabrication forum available from within eventual build projects
 * 13) Wiki
 * 14) * Ability to select a wiki page as the default project home page.
 * 15) * Wiki syntax for referencing:
 * 16) ** Other projects and wiki pages in other projects.
 * 17) ** Listing dependencies.
 * 18) ** Still image of specific component specifying image size, camera location and angle.
 * 19) ** Any other metadata from a component file.
 * 20) ** Status widget showing:
 * 21) *** Burn down chart.
 * 22) *** Currently active tasks.
 * 23) *** Last X number of daily logs.
 * 24) *** Status of ongoing builds.
 * 25) Release
 * 26) Mark project/component available to fabricators, this means people can create builds.

= Build =


 * 1) Find a Design project and start a build from it.
 * 2) Keep track of required parts.
 * 3) Mark steps complete as build progresses.
 * 4) Add comments, photos and suggestions to the design and steps.
 * 5) Enter daily log/SCRUM.

= FreeCAD =

To provide a truely collaborative environment it's important to tightly integrate with desktop CAD software. Tentatively the chosen software is FreeCAD. The following integration would be considered:


 * Checking in/out parts and assemblies from online repository.
 * Displaying list of active tasks and allow basic modification of them such as marking Complete or Blocked.
 * Chat feature with logs being accessible inside the project.
 * Concurrently view/editing the same part by multiple engineers at the same time. This would facilitate the pair-engineering part of Agile development.
 * The plugin would stream live modifications and view angle of the part to the central server which would forward the change modifications to any other clients editing/viewing the same part. - This is a whole problem domain on its own and will likely take a lot of work to get right, but we can start simple and provide robustness over time.
 * By merging changes in realtime and piecemeal we eliminate the need to manually merge/resolve conflicts of parts as is done traditionally with source code repositories.
 * Problem with this approach is that you have to be online in order to edit a part. One solution to this is that if you need to work on the part offline you can lock it and this would prevent anyone else from making changes.
 * Streaming operations piecemeal also would provide unlimited undo and detailed history of changes. Additionally it will be possible to keep track of who made which changes.

There is currently a project by FreeCAD developers to provide parts/assemblies functionality. Much of the integration described in this document will depend on the completion of this work. Details and status: http://sourceforge.net/apps/mediawiki/free-cad/index.php?title=Assembly_project