While the advice below was written with the particular student's project in mind, I think the general concepts here are applicable to any software project, so I've decided to repost this info here in the hope that it may help others out there build better software in future.
> Thanks for reaching out. I'm not too familiar with the development
culture and software architecture for LibreOffice, so your mileage may
vary depending on how much they value different things. (Also, your own skill level + the complexity of the codebase you're dealing with will impact your progress). That said, here
are some general tips for how I'd approach creating a proposal for this project (and for that matter,
any software project):
1) Focus on the End User + Expected Use Cases/Outcomes
-
Who is this functionality targeted for? (e.g. is this something that
you expect any user to just pick up and drop into their presentation for
some extra polish, or is this aimed more at a expert users who are
driven+focussed on achieving some specific result - e.g. science
teachers using this to make interactive demos as part of their lectures)
- What is it that the end user would get out of having Bullet available in LibreOffice?
- What can they not do with the current effects that having Bullet available would make easy/possible to do?
2) Think of what the workflow would be like in general terms, trying hard to not get bogged down in the details too much initially.
-
For example, are you going to provide the user with a gallery of preset
effects (e.g. similar to how Office previews its Styles/etc.), or will
it involve more fiddling/setup within several different workspaces (e.g. a multi-window UI consisting of a connections editor, timeline, and parameters view)
Keeping both of the above in mind...
3) Try to come up with a bunch of different compelling use cases.
4) Now, rank that list in terms of most generally useful to least commonly useful, while remembering to consider the practicality of the user achieving that using the workflow you have in mind.
5) Take a look at the functionality that will need to be in place to support those use cases.
* Try to break that down into chunks. For example, you'll definitely end up needing at least the following:
- LibreOffice Shapes -> Bullet object mapping,
- Simulation engine loop + animation engine integration
- UI/Properties/LibreOffice integration for defining the physical
properties of the objects (and how those relate to the sim) - e.g.
Things like the mass/friction/etc. of the objects and their surfaces
- ... and depending on what you're doing, you may also have things like force field integrations, constraints, etc.
* Estimate how long it will take to do each of these things (using "days" as a measurement is probably a good starting point). Best case AND worst case.
As my current mentor and manager at work says - take the worst case
time, and double it, then add those all up. That's roughly how long it
probably take you to implement all of that functionality.
6)
If the estimated time takes longer that the GSoC period, re-examine
your assumptions about what's essential, nice to have, and strictly
optional. Start from step 1 again, and refine your assumptions. It
may take several rounds of this to get to something that seems doable.
7) Try to come up with a tentative schedule
(remember, this will absolutely change as you start digging into the
codebase + working with your mentor) that focusses on the following:
* Get a minimal functioning integration as soon as possible, then iterating on top of that to add fancier features
* Focus on maximising end-user-value + quality
*
Factor in the fact that you're going to get stumped on some things.
Maybe it's getting to grips with the LibreOffice build system +
infrastructure, the Bullet library, a nasty bug that you get stumped on.
*
Based on steps 4+5 - figure out what your deliverables are at the
program checkpoints (midterm + final eval), and also on a week to week
basis. Be prepared to put a lot of what you'd like to do as "stretch
goals"
Happy coding!
No comments:
Post a Comment