18F / open-source-policy

This repository contains the official Open Source Policy of 18F
https://18f.gsa.gov
Other
300 stars 94 forks source link

Clarify policy around maintenance & mission delineation #33

Closed janearc closed 3 years ago

janearc commented 9 years ago

Before I was able to "write" Sendak, I needed a couple things:

There are other projects, but these two ( riak-dc with ~400 downloads in the last month, and deep-grep with ~200 downloads in the last month, respectively) have gotten more attention than I expected at this early stage of development.

The problem I am having, with respect to "open source software" here is that people are now using this software for things other than Sendak. riak-dc is the only actively supported node.js driver for the object datastore ("NoSQL" Database), Riak; there are others that exist but which are abandonware, are undocumented, and hard to use. Since node.js lacks a useful "grep" function, and people on irc (where I often go for support myself) are frequently asking "how do I find the thing I want in an object of arbitrary nesting/complexity?" (among other things), there are now users employing deep-grep in their own projects (it's not clear to me whether any of these are "in production") and opening issues on github as well as asking for help on irc. riak-dc is now linked to from the documentation for riak-js, which is the "unofficial official node.js driver for riak," as being not only simpler to use but supported and documented.

I am given, generally, very clear tasking; I have milestones for Sendak and it is clear to me what needs to be done in terms of my responsibilities for 18F. There is ambiguity, however, when a problem arises in a library I maintain for Sendak (there are now 5-6); what if Sendak "is already doing what it needs to," but I am struggling with an API or interface that is poorly, improperly, or not documented? Buggy? At what point can I stop making forward progress on Sendak and fix a piece of software that Sendak uses, in a way that makes me happier (read: more productive) as a user of that software, but which is not explicitly required for Sendak to move forward? (generally the term for this is "technical debt", and there is often gross hostility towards paying down debt when something is already "working.")

In the event that there is an actual bug that impedes functionality in Sendak (there have certainly been a couple), I go and I fix it as I would any other piece of open source software.

But I am unclear where the line on "nice-to-have" features that I would like to have, as a use of the software, that would make it into Sendak, but perhaps not today, is drawn. What about when a user ("the public") says that if an interface returns keys and values, it should probably also return tuples, and I agree with them? At what point is it "okay" to go and write those features in my capacity as an employee of the government?

To clarify a little on the provenance of the software: when it was clear I needed to write these pieces of software, and I knew that I Jane, a member of the public, would want to use them later (for non-government things), I went and wrote them on my own time (weekends, evenings, etc). The reason for this is everywhere I have worked previously has as a stipulation of my employment owned everything I wrote, I wanted to be sure I had access to it afterwards. Obviously, I misunderstood 18F's "ownership" of things, as @konklone has added the lovely CC0-1.0 license.

konklone commented 9 years ago

At what point can I stop making forward progress on Sendak and fix a piece of software that Sendak uses, in a way that makes me happier (read: more productive) as a user of that software, but which is not explicitly required for Sendak to move forward? (generally the term for this is "technical debt", and there is often gross hostility towards paying down debt when something is already "working.")

There should never be "gross hostility" towards paying down technical debt here. We have to maintain the space for our engineering and devops teams to do more than just rush through every project and tool getting it to work as fast as possible. If you detect such hostility, hopefully we can talk about that as a team. If need be, we could also add a paragraph to the team guidance doc that makes that explicit.

More generally, teammates' judgment about how to manage 18F's open source libraries should be granted a lot of leeway. If a refactoring or feature makes the tool easier for 18F to use in its work, and the teammate doing it is otherwise meeting their duties, then that's time well spent for 18F and the taxpayer.

To clarify a little on the provenance of the software: when it was clear I needed to write these pieces of software, and I knew that I Jane, a member of the public, would want to use them later (for non-government things), I went and wrote them on my own time (weekends, evenings, etc). The reason for this is everywhere I have worked previously has as a stipulation of my employment owned everything I wrote, I wanted to be sure I had access to it afterwards. Obviously, I misunderstood 18F's "ownership" of things, as @konklone has added the lovely CC0-1.0 license.

We haven't taken the time to write down explicit guidelines on this stuff, and this isn't the most rigorous set of them, but I think generally:

The worst case in misjudging a repo's origin or primary use is either forking or transferring a repository, which aren't big deals. I tend to CC0 my personal libraries anyway, especially when I think they may be helpful in government, which lets everyone Just Relax.

This is just me putting down a first draft of my own personal take -- curious how others think of it.

cc @kaitlin @NoahKunin @benbalter

benbalter commented 9 years ago

@konklone think you're spot on. Can't speak to 18F, but IMHO, the thing that separates good software from great software is doing things "right" in the engineer's eyes versus just getting them done to satisfy a business user's needs.

Presumably, you're hiring engineers with taste and engineers you trust. There are multiple ways to meet a checklist of requirements, but what I suspect 18F is trying to prove, is that you get better results in the end if you take a more holistic approach to the technology stack, rather than blindly following a set list of deadlines or requirements (which would require you to hard-code a workaround rather than submitting the fix upstream if it means risking a deadline that didn't foresee that circumstance).

konklone commented 9 years ago

I created #34 to address this issue.

afeld commented 3 years ago

Closing as stale.