posts

More Jobs, USAJobs Scraper, Jekyll Tweaks

2023.03.08 – It’s been a lot of work for me to keep my jobs page up-to-date. Previously, I’ve been crawling through LinkedIn a couple times a day to try to find all the relevant IT jobs. However, many were still getting missed. So I signed up for the USAJobs API, and wrote a script to scrape relevant technology jobs from it. (As always, that script is open source, so you can take it and manipulate it for your own regular searches.) My default settings only searches for GS-12 and above, technology-related job series (2210, 1550, 1560), does not include defense, intelligence, and law-enforcement agencies: DOD, DOJ, and most of DHS are excluded (except for CISA and FEMA). I only post the most interesting results on my jobs page, but I figured some folks would want access to the full firehose of positions, so I’ve set up a new page for all the results from that search, and it has its own RSS feed as well. I’m not 100% happy with this setup, since the main jobs feed has a few jobs that are not federal jobs, and thus don’t show up on the usajobs feed, so there’s no “comprehensive” jobs feed today; you’ll have to check both to see all the jobs. But that’s work for another day. I’ve also added a lot of documentation on my Digital Policy website around pay grades and how the GS system works. As a result of these additions, I realized that my site was quickly becoming a spaghetti mess of code. To clean this up, I’ve rationalized the growing number of RSS feeds, only these are now discoverable:

I also completely redid both the RSS feed template and the list template to simplify showing many different types of content using a single layout. To achieve this, I’ve had to do some truly unholy hacks to Jekyll. Jekyll - well, Liquid, technically - allows you to set your own custom variables on a page, but it doesn’t allow you to set the value of hash elements. So I wrote a plugin to allow you to do this. The HUGE caveat here is that pre-defined values are not writable - meaning if you have a loop of posts, the post.content cannot be overridden - it’ll throw an error. To get around that, I’m hacking in new values instead, things like post.afterwards for content I want to append to the bottom of the post. For pages like the main RSS feed, I’m also using some hacks to create empty arrays, and then iterate through the various content types, massaging them into new formats that work with the simplified templates. In this way, I have been able to remove most of the custom handling logic from the templates, and put it all into the individual pages. It’s much cleaner this way. Though I really, really wish Jekyll natively supported the manipulation of hashes and arrays. I was unable to find a way to create an entirely new Hash, and I would love a way to override predefined values as well. Ah well. So that’s a lot of new stuff! Hopefully some of you folks will find some of these various hacks and tools useful!

Read This

Government Sales

2023.01.24 As a strong reminder - my comments on this website are my own and do not reflect the views or perspectives or official policies of any government agency.


Recently I posted a tiny rant on LinkedIn about how, having been on both sides of the fence, I am utterly baffled by vendors cold-calling a government employee to try to sell the government something. As I explained there - I do not buy anything, instead the government has a very long and arduous process of solicitation and evaluation in which I am only peripherally involved. Well, that post got a lot of attention - at the moment, it’s one of the most popular things I’ve posted on LinkedIn with over 25,000 views. (I wish my YouTube channel was getting those numbers!) I also received a lot of comments and questions on that post. I don’t want to waste your time, and I don’t want you to waste mine either, so below I’ve suggested a few strategies on how salespeople can be more effective at their jobs with less or no cold-calling.
Before we dive in, let me take a second to briefly explain how government purchasing actually works. I’ve written a much longer version, but the short-short version is this: First, if an agency is buying something, they’ll issue a Request for Information (RFI), a Request for Proposal (RFP), or a Request for Quotation. When those are issued, they’re posted publicly and you can search for them. If they have not issued one of these, the agency is not buying. Period. There’s no reason to reach out to them directly. All communication is done via this process. It’s all but forbidden for government staff to engage with vendors outside of this process. The intention is to eliminate corruption in awards, to prevent purchases due to personal connections - the exact sort of strategy that traditional salespeople use through activities like cold calling. Preexisting relationships mean we actually have to recuse ourselves from the evaluation process, so unlike the private sector, building relationships is actually bad for business. Second, the [civilian] agencies almost always buy things through 8(a)-certified small businesses because we have small business quotas. If you’re selling services and are not 8(a)-certified, you should consider finding one to partner with. If you’re selling a technology product like a desktop app or a cloud service, agencies almost always buy through an 8(a) Value-Added Reseller. Third, if your product is cloud-related, it must be FedRAMP-certified. No FedRAMP certification, and we probably won’t even look at it. Again, there are always exceptions to these rules - but those are very broad strokes that are mostly true, most of the time.
On to the comments. Since many were similar, I’m combining or summarizing here. “The acquisition process is opaque, and vendors don’t know who they should be pitching at the agency.” Again, per above - contacting someone in the technology division will not improve your chances, as they are not the buyers. If anything, you’re hurting your actual chances. If you want to make a sale, look at the open RFPs - that’s where your buyers are. “How can I make people aware of my product or service without cold calling?” For products: if the first time I’m hearing about your offering is from a cold call or random meeting, you have failed - or rather, your marketing team has. As a technologist in government, my primary job is serving the mission, and I do that by staying on top of trends in technology. So you should have whitepapers and be giving demos and talks at events and conferences, being in the places where your customers already are. Tough love time: if you can’t afford to market your product, you probably also can’t afford to meet federal security requirements, and thus you probably don’t have a viable business model for government sales. For labor/services contracts: An agency doesn’t need to have ever heard of you before you submit a response to an RFP. In fact, it’s usually better that we haven’t. Every RFP will ask for details of your previous performance; this along with your key personnel (the staff who will be doing the work - usually we ask for their resumes) and price are the main things that matter here. And if you don’t have relevant previous experience, you’re probably not going to win the bid. “As a federal employee, cold calls are a good way for me to learn about new offerings and approaches.” Please, please, please spend more time engaging in the community outside of your agency. It’s important to stay on top of changes in your field. Again, there are lots of conferences and events going on all the time, where you can learn about new solutions. For instance, the CIO Council & GSA host a wide variety of working groups that are open to government employees. And here in DC there are the alphabet soup of non-profits that host in-person and virtual events which are free for government employees: ATARC, ACT-IAC, AFCEA, AFFIRM just to name a few. “You should remember that the cold caller you’re turning away today might be your boss tomorrow! Or you might be applying at that company some day!” If they’re any good at their job, they’ll know why I didn’t waste their time. “As a federal employee, it’s annoying when vendors contact agencies right before the end of a fiscal year, or right after a budget has been passed.” Strongly agreed. It’s important for vendors to know that agencies budget 2-3 years in advance. When an agency receives money, it’s already been allocated and people know where it’s going. Now, end-of-year purchasing with unused funds does often happen, but that’s almost never done with a new vendor, because contracting takes so long. “It’s possible that they just think you’re a cool person and want to make a personal connection with you because of all the great stuff you do!” I do get a lot of really nice notes from folks, as a result of the ridiculously large number of weird little projects I have. And I absolutely love receiving these - keep ‘em coming!!! However, authentic messages from folks who want to show appreciation or collaborate on something are very different than folks who just want me to buy something from them. Just to be absolutely clear: I will never have a sales call with someone just because they’ve supported one of my projects. That’s not how any of this works. But I’m always happy to chat with folks who like to make weird stuff just because they like weird stuff. Just don’t try to sell me anything. “But I did millions of dollars in government sales from cold-calling! It works!” Most likely, you found out about an existing opportunity that you could have discovered if you just searched for the RFP on the public website. And you could probably add another zero onto your sales number if you were better at searching. There is no question that there exist individual with influence over IT purchasing that do not follow the legal guidelines, and if you happen to reach one of those questionable and/or corrupt few, you can sway them. I’m not one of them. I strongly suggest you spend more time improving your offerings and less time on useless sales calls.

Read This

2022 Recap

2023.01.03 – I realized that I don’t do a very good job of writing full posts on here about my projects as I release them. So before I start on any new work for 2023, here’s just a quick recap of the many projects I worked on (outside of work) this year:

Amazing what you can do with some free time and a bunch of unfocused manic energy. A lot of this work falls under my concept of Making the Web Weirder, and in 2023 I hope to dedicate even more time to silly little projects to make the world a weirder and more delightful place!

Read This

Bringing Webrings Back

2022.12.30 – I’ve been thinking a lot lately about how we build communities and manage content. Now that I’m helping to run a Mastodon community, I’ve realized something about the current paradigm that doesn’t sit well with me. In another article, I talked about how we used to share things that we love on the internet. The focus in most communities these days, however, is not about sharing, but rather keeping out negative influences and bad actors - about moderation. I think this is the wrong end of the stick. Rather, instead, we should be focusing energy on curation. We should be maintaining lists of things, ideas, and people to share with each other - rather than spending so much time maintaining ever-shifting lists of hostile attackers. (That being said, there will always be a need for moderation, and any curation must come with discarding unsuitable content. I’m not so naive from privilege to overlook this critical aspect. But back to my core point…)


One way that we can better share things and build community is by bringing back the old concept of the Webring. For the last few years I’ve been a very tiny webring with a few friends. You may have seen the link at the bottom of this website and thought it was a joke, but this is a fully-functional webring! In the last few weeks I’ve modernized this webring further, adding support for RSS feeds (and OPML subscriptions), FOAF files, and other old-but-still-relevant technology standards. This means that instead of having to click around to a dozen different websites in a ring, you can use your favorite feed reader to subscribe to an entire webring with one click! And moreover, most modern feed readers support the ability to use a remote OPML file - meaning that as folks join and leave the webring, your subscription will be updated to match with no additional work needed! That’s great for those of us that long-blog a lot, but this also has potential applications for folks who microblog - Twitter and Mastodon are microblogging platforms at their core. (More work is needed to make replies and cross-posting viable of course.)
Since more folks are getting back into blogging, I want to support this more directly. As such, I’ve created an open source Webring Starter Kit that anyone can take and use to host their own webring for free. It’s powered by Jekyll and can be run on GitHub Pages, and requires very little technical knowledge to get up and running. If you’ve got a couple of friends and want to start blogging together about some weird topic, this is a great way to bring those ideas together and make it easier for new folks to find your content! I hope folks with take this and run with it, and come up with new ways of curating content that I haven’t even considered yet. Let’s share things y’all, and make the web weird! Also if you want to join the Public Interest Tech Webring, please get in touch!

Read This

Mastodon: Good Enough For Now

2022.12.30 – Over the last few months I abandoned Twitter and started using Mastodon. I subsequently ended up starting a new mastodon community of public interest tech folks. Through this process, as well as updating my policy bot to run in this new environment, I’ve learned a bit about the technology being used here. At its core, Mastodon is a jumble of open standards, most notably ActivityPub. As the name indicates, this is a publishing model - that is, it’s a “push” architecture. When someone “follows” you on Mastodon, they’re adding their name to a list of subscribers on your server, and when you publish a new post, your server then sends it out to those people. However, Mastodon is also federated which effectively means that copies of your content end up on the followers servers as well. This is in contrast to, say, the Twitter model where everything lives on a single website that everyone is already on, or the RSS feed model, where you pull rather than push new content from the host website. The result of this is that it can be very problematic to have a single popular person on an instance that you run - an underprepared server can quickly be overwhelmed by such a chatty protocol at the core of things. And moreover, caching layers can do very little here to soften the blow. You cannot run a mastodon-like service as a static website. Those are problems fundamental to ActivityPub, not just Mastodon - but Mastodon has some rather prevalent issues as well. It’s good software, but there’s no way around the fact that it’s bloated. A massive React frontend sits atop a Rails application - you simply cannot build the assets on a server with less than 2Gb of RAM. The developers seem like sharp folks, but they also are very slow to adopt features which already exist in their competitors. My corner of the Fediverse has been up-in-arms over the fact that quoted-posts are not enabled (though “quote-Tweets” have existed on Twitter for quite some time). I am not a fan of this particular feature myself, as I believe that it encourages abusive behavior. But moreover, other key features to curb abuse are notably missing, such as turning off replies to individual posts, though a request for the feature has been open for four years. More than just technical shortcomings, this is turning a blind eye to the needs of the communities they are supporting. (There is, of course, also Darius’ brilliant fork called Hometown which is somewhat more thoughtful in this regard.)


However, Mastodon serves an important purpose - it gets people used to the concept of decentralization again. The 2010s brought a wave of centralization of social platforms, resulting in just a few huge places that everyone spends their time. Mastodon is once again teaching folks how to spread out and build their own small communities. It also exposes some of the old pain points, most notably the problem of finding your people online. Hopefully this friction will nudge folks towards more collaborative and sustainable methods of finding people of shared interests.

Read This