A few things really leveled up both my software quality and my productivity in the last few months. It wasn’t session history, memory files, context management or any of that.
1. Writing a spec with clear acceptance criteria.
2. Assigning IDs to my acceptance criteria. Sounds tedious, but actually the idea wasn’t mine, at some point an agent went and did it without me asking. The references proved so useful for guiding my review that I formalized the process (and switched from .md to .yaml to make it easier).
3. Giving my agents a source of truth to share implementation progress so they can plan their own tasks and more effectively review.
Of course, I can’t help myself, I had to formalize it into a spec standard and a toolkit. Gonna open source it all soon, but I really want feedback before I go too far down the rabbit hole:
Yup and they do, but then I figured out that I can just write loosely structured yaml and the ids come for free. I then encourage the agents to tag and reference them everywhere, especially tests.
I agree, and am so captivated with the idea that I decided to build a whole toolkit around it. Would be very keen to get feedback if anyone wants to try it when it’s ready.
So far this workflow is the only way I’ve been able to have any real success running parallel agents or assigning longer running tasks that don’t get thrown out.
Personally I've had issues with Windows Hello integration for a while. It worked for a while but then didn't anymore. Everything is right and best I could find was the team saying it's some weird issue with TPM. Once I put in my master password the Hello integration is fine. It's just storing the key in TPM that doesn't work. So every restart I need to put in the master password. Granted my desktop is a Ryzen 2 system but still.
It's been little things and mainly usability/polish things.
Sometimes the vault doesn't unlock and I have to enter in my password 2-3 times.
It doesn't always capture all information from a page properly when creating a new login and there are additional fields to capture.
The "detecting if a website supports key passes and one time password" feature for Watchtower was overwhelming with lots of information, until I clicked each one and had to ignore it.
These reasons alone are not enough for me to leave, the 3 big problems are below.
1 - I was feeling more uncomfortable having websites promote using passkeys, and I would store that in 1Password, but then I wasn't sure if 1Password as going to make it easy to migrate that stuff out. So, I want to use something open source, so I don't have to worry about losing access/managing that stuff in a propertiery/closed product. It might be easy to export/migrate out today, until something changes and they no longer allow that or make it very difficult/hard to scale/automate.
2 - I have a strong feeling this price increase is being justified by "AI" somehow. I'm sure, like all other companies, 1Password is internally forcing/requiring its developers to use coding models, and sonnet, opus, etc are expensive to use and the cost adds up. Also, I don't like the direction of where things are headed, where people are becoming more relaxed and not reviewing code properly and merging in code that will cause security issues later (perhaps openclaw fits into this bucket) or they are taking open-source code they laundering it for companies internally to use (I can't prove this, but if a model is trained on public data/code, it seems very likely). Something about that just bothers me especially when a company is worth billions of dollars.
3 - I've spent the last 3 years building up my homelab and using Pikapods for hosting various things. I want to support open-source more and run my own things and pay supporters properly to maintain things. I've always been a bit nervous what might happen if 1Password gets hacked, either because of poor security or due to a third party vendor. I still have the problem of my things getting hacked, but I pay more attention to how I secure things and use Tailscale and not publish things on the broad internet (when it makes sense). Also, I would be a hypocrite to dismiss the value of coding llms, as I'm using them myself. But how I'm using them, I'm using them to do security reviews of my docker compose files or kubernetes yaml files. Having coding llms has made it so much easier to maintain a homelab.
1password is by far my most recommended subscription to friends and family.
In a world where almost every single app or service I use has thrown me into a rage from enshittification or show-stopping bugs or both, where I can hardly even type this message because even iOS keyboards have regressed… 1password is actually a great service that makes my life objectively better.
I put them in an exclusive S-Tier with, surprisingly, Chase Mobile (in recent years), Signal, Google Sheets, and maybe an few others. They just work.
Since the rest of them ignore my 1 star App Store reviews and my desperate, detailed bug reports, the only power I have left is to support good software and recommend it to friends.
My experience has been the opposite, they have become worse and worse since the early days when they were small Mac shop with a standalone app. It's really death by a thousand papercuts now. Sometimes it cannot fill a password, sometimes it loses the connection between the browser plugin and the native app and doesn't really fill anything at all anymore, the interface sucks compared to the native Mac version, etc.
The only reason I have not migrated away is that my wife and daughter also use it (1Password Family) and it seems like a huge task to properly migrate the hundreds of passwords, tens of passkeys, etc. Maybe this is the final straw.
What banking tasks are you doing that other apps don't seem to handle -- are you trading stocks or something?
I basically never use a banking app except to deposit a check (which all the various apps seem to handle well now) or transfer money from the checking account that receives my direct deposit to the account I use at ATMS. (Love that air gap).
Really? To me that app is like the WeChat of banking. It just does so many things. Do not even get my started on the non-standard long totp that they force you to enter when trying to navigate certain parts of the app (you're already authed, why reauth?!).
I think the Schwab app-for doing as many things as the Chase app, is a much smoother experience.
Same, I formalized a similar workflow for my team (oriented around feature requirement docs), I am thinking about fully productizing it and am looking to for feedback - https://acai.sh
Even if the product doesn’t resonate I think I’ve stumbled on some ideas you might find useful^
I do think spec-driven development is where this all goes. Still making up my mind though.
This is basically long-lived specs that are used as tests to check that the product still adheres to the original idea that you wanted to implement, right?
This inspired me to finally write good old playwright tests for my website :).
Spec-driven looks very much like what the author describes. He may have some tweaks of his own but they could just as well be coded into the artifacts that something like OpenSpec produces.
It's extremely nice! Coming from the React and Next.js world there is very little that I miss. I prefer to obsess over tests, business logic, scale and maintainability, but the price I pay is that I am no longer able to obsess over frontend micro-interactions.
Not the right platform for every product obviously, but I am starting to believe it is a very good choice for most.
I've abandoned Next.js and React for Elixir / Phoenix. I am able to build a perfectly pleasant user experience with just a sprinkle of vanilla JS via Phoenix hooks.
The fact that I have been able to build a multi-user collaborative editor experience without a single additional dependency is incredible. I previously worked for a well-established and well-funded React team who had this feature on their roadmap for half a decade but still find it too daunting to implement.
Phoenix was a great reminder that a lot of the "frontend engineering" we find ourselves doing as React developers just isn't necessary with the right backend. It's HORRIFIC to look back at all the yakshaving I've done in my career already. Wrangling types (GraphQL, codegen libraries), wrangling queries and data-fetching (react-query, SWR, server components), fiddling with middleware (serverless functions, getStaticProps, CDNs). I've seen teams outright abandon testing because the hours they invested just weren't catching any of the bugs that mattered.
I'm not doing any of that anymore. I'm spending that time refining the core data model, improving test coverage, thinking about go-to-market and making money.
Phoenix may not be a good choice if your product has reached that level of maturity and product-market fit where you really should care about "microinteractions", fine-tuned animations, or advanced use-cases for an SPA like offline support and highly-optimistic UI. But I would argue that even mature products don't truly need these things. Just look at the GitHub UI. I've spent a truly astronomical number of hours in that UI and never wished I had WYSIWYG text editing, or animated skeleton UIs, or the dozen other things that the React community tells us we need.
They're probably using some features of LiveView; I'm not too familiar with how HTMX works, but with LiveView you can define all of your logic and state handling on the _backend_, with page diffs pushed to the client over a websocket channel (all handled out of the box).
It comes with some tradeoffs compared to fully client-side state, but it's a really comfortable paradigm to program in, especially if you're not from a frontend background, and really clicks with the wider Elixir/Erlang problem solving approach.
Hooks let you do things like have your DOM update live, but then layer on some JS in response.
For example you could define a custom `<chart>` component, which is inserted into the DOM with `data-points=[...]`, and have a hook then 'hydrate' it with e.g. a D3 or VegaLite plot.
Since Phoenix/LiveView is handling the state, your JS needs only be concerned about that last-mile JS integration; no need to pair it with another virtual DOM / state management system.
The big win for me has been the built-in PubSub primitives plus LiveView. Since the backend is already maintaining a WebSocket connection with every client, it's trivial to push updates.
Here is an example. Imagine something like a multiplayer Google Forms editor that renders a list of drag-droppable cards. Below is a complete LiveView module that renders the cards, and subscribes to "card was deleted" and "cards were reordered" events.
```
defmodule MyApp.ProjectLive.Edit do
use MyApp, :live_view
import MyApp.Components.Editor.Card
def mount(%{"project_id" => id}, _session, socket) do
# Subscribe view to project events
Phoenix.PubSub.subscribe(MyApp.PubSub, "project:#{id}")
project = MyApp.Projects.get_project(id)
socket =
socket
|> assign(:project, project)
|> assign(:cards_drag_handle_class, "CARD_DRAG_HANDLE")
{:ok, socket}
end
def handle_info({:cards, :deleted, card_id}, socket) do
# handle project events matching signature: `{:cards, :deleted, payload}`
cards = Enum.reject(socket.assigns.project.cards, fn card -> card.id == card_id end)
project = %{socket.assigns.project | cards: cards}
socket = assign(socket, :project, project)
# LiveView will diff and re-render automatically
{:noreply, socket}
end
def handle_info({:cards, :reordered, card_change_list}, socket) do
# omitted for brevity, same concept as above
{:noreply, socket}
end
def render(assigns) do
~H"""
<div>
<h1>{@project.name}</h1>
<div
id="cards-drag-manager"
phx-hook="DragDropMulti"
data-handle-class-name={@cards_drag_handle_class}
data-drop-event-name="reorder_cards"
data-container-ids="cards-container"
/>
<div class="space-y-4" id="cards-container">
<.card
:for={card <- @project.cards}
card={card}
cards_drag_handle_class={@cards_drag_handle_class}
/>
</div>
</div>
"""
end
end
```
What would this take in a React SPA? Well of course there are tons of great tools out there, like Cloud Firestore, Supabase Realtime, etc. But my app is just a vanilla postgres + phoenix monolith! And it's so much easier to test. Again, just using the built-in testing libraries.
For rich drag-drop (with drop shadows, auto-scroll, etc.) I inlined DragulaJS[1] which is ~1000 lines of vanilla .js. As a React dev I might have been tempted to `npm install` something like `react-beautiful-dnd`, which is 6-10x larger, (and is, I just learned, now deprecated by the maintainers!!)
The important question is, what have I sacrificed? The primary tradeoff is that the 'read your own writes' experience can feel sluggish if you are used to optimistic UI via React setState(). This is a hard one to stomach as a react dev. But Phoenix comes with GitHub-style viewport loading bars which is enough user enough feedback to be passable.
p.s. guess what Supabase Realtime is using under the hood[2] ;-)
I’m a huge fan of Eurogames but I regret buying Wingspan, it is an absolute bore. After 5 or 6 games it became kindof a meme in my family. “What shall we do now? A round of bird game?”
Beautiful packaging and pieces though! And it’s very cool that it works single player and two player. But nothing eventful at all happens, and nobody feels any compelling reason to rack up points.
It's one of my favorite board games, probably for the same reason you hate it. What's the reason to play a board game? To give a bunch of people sitting around a table something to do while having a drink and a chat. Bird game is great for that; it's got stuff to talk about and to think about, but it doesn't swallow up the whole conversation like Pandemic would.
The compelling reason to rack up points, if you're playing seriously, is to see if your engine works --- just like Race For The Galaxy, or games like that.
I agree with on the basegame. It was fun the first few games, becomes kinda boring when you don't play with a large group as the bird cards don't change often.
The expansions changed the game completely for me, it's more strategic and you're interacting with other player more (i.e. in-between round activation, end of round powers, more steal resource from other players, etc).
I personally love that the game play is very fast, as you have limited number of moves every round.
The Oceania expansion with the nectar tokens and new board really let you do more in the game.
I would give it another try with the expansions, it's truly a different game.
Since I assume some Framework product people are in here— my framework won’t go to sleep which is an absolute dealbreaker. Dead battery every time unless I fully shut it down. Forums are no help. Advice?
I’d love to support your mission and recommend this laptop to others, but you need to get the fundamentals working!
See my comment history for other similar reports from other (former) Framework owners.
You might need to set your system to hibernate instead of sleep. Modern x86 laptops lack proper standby power states — they only have a low power "darkwake" state in which they're able to do things like periodically check email, and instantly "wake up" from. Microsoft bills this as "modern standby".
That's nice in concept, but it rarely if ever works as it's supposed to, especially under Linux. I had to set my Lenovo ThinkPad X1 Nano up so after being closed while unplugged for an hour or so it automatically hibernates, because otherwise it'll never properly sleep and Windows will drain its battery.
It's stupid but the only machines that reliably sleep these days are MacBooks.
1. Writing a spec with clear acceptance criteria.
2. Assigning IDs to my acceptance criteria. Sounds tedious, but actually the idea wasn’t mine, at some point an agent went and did it without me asking. The references proved so useful for guiding my review that I formalized the process (and switched from .md to .yaml to make it easier).
3. Giving my agents a source of truth to share implementation progress so they can plan their own tasks and more effectively review.
Of course, I can’t help myself, I had to formalize it into a spec standard and a toolkit. Gonna open source it all soon, but I really want feedback before I go too far down the rabbit hole:
https://acai.sh
reply