Hi all, I realized that it isn't exactly common knowledge what my goals and plans are. There's a lot to be done to make everything more transparent: not just for transparency's sake, but because it will help other people know where to put their precious time and efforts. I'm gonna start by just writing this quick note. The rest of the week will be spent collaborating, with anyone who's interested, on shaping up some priorities.
First, two paragraphs of backstory. Last month I resolved to finish the funding mechanism. We have a clear-enough design and I wanted to just get it done, since that is the piece more than any other that needs to get done. (Tickets are nice, discussions are nice, wikis are nice, all this stuff is more or less necessary, but Snowdrift is nothing if not a funding mechanism.) Well, that effort bombed. As many others have recognized, Snowdrift's code has many impressive feats of engineering, but everything is quite intertwined. It's hard to add anything in a principled way. I had a bad time. [insert South Park ski instructor meme photo] So, I stopped trying to add new features, and I'm continuing doing what I've been doing all year: cleaning things up. Figuring out how the features work and putting them in a shape that others can approach. I figure my greatest responsibility is facilitating contribution, and I think this is the best way for me to accomplish that. So what am I gonna do in particular? That's the hard part. :) Here are some ideas: - Overhaul the test system. Tests depend on each other, take a long time to run, and don't always clearly demonstrate what they are testing. Tests can be a great tool, but right now they are not. - Separate the components. What are the components? There's a matrix of them. On one axis you have features: Funding mechanism. Discussion system. Wiki. Static pages. Signup/entity management workflows. Information pages (users, projects). On another axis you have infrastructure components: Auth^2 (authentication and authorization). Persistence. Data models. Display/HTML functions. Interfaces between them all. Linkages between feature components. Unit tests. Integration tests to bind them all in the darkness of an automated CI environment. Yesod provides a base for some of the infrastructure components, but it cannot handle all of the domain-specific complexity we have. We need more structure. This email is already getting long, so allow me to take a slight digression. Each of these components has a multitude of subcomponents. Hopefully, we will begin to have people in charge of these components and subcomponents. Consider this the introductory brainstorm of deciding what components there are, and which ones need independent organization. More ideas of things I could do (or others could do!) to facilitate contribution: - Finish creating a CI tool. Nikita did a lot of work on that. See the thread that starts here: https://lists.snowdrift.coop/pipermail/dev/2015-August/000173.html - Clean up other scaffolding files, mainly Foundation.hs. - Improve the abstractions for the various components. - Two things come to mind here, though I'm sure we could brainstorm for days. - One: Disallow "model" code from returning values in the Handler monad. - Two: Reify the inputs to template files. Uh, I mean, create datatypes that represent all the values spliced into a template. - Both of these things would improve encapsulation and testability. They could also both be terrible ideas. :P I'm going to wrap this up now. Hopefully you all have some thoughts to chew on now. :) I'm pumped to be involved in such an active collaboration.
signature.asc
Description: Digital signature
_______________________________________________ Dev mailing list [email protected] https://lists.snowdrift.coop/mailman/listinfo/dev
