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.

Attachment: signature.asc
Description: Digital signature

_______________________________________________
Dev mailing list
[email protected]
https://lists.snowdrift.coop/mailman/listinfo/dev

Reply via email to