Aaron Stannard Profile picture
Founder and CEO @Petabridge @getsdkbin OSS: @AkkaDotNet Open Source Software, Space, .NET, and Startups Catch me on Twitch: https://t.co/JWDHZBTjlE
Jun 30, 2023 8 tweets 2 min read
There's a point where it's a legitimately better idea to rewrite the software than to try to save it.

1. Code is highly volatile (house of cards)
2. Code is extremely opaque; requires learning lots of (often unnecessary) internal + 3rd party abstractions 3. Test coverage is weak (i.e. tests rely mostly on mocks - actual data model where business value lives is totally untested)
4. No one left in the organization has any first-hand knowledge of how things are supposed to work - little to no documentation either
Nov 14, 2022 6 tweets 1 min read
One of the trickiest bootstrapping problems is crafting roles for new hires as you often don't have enough "stuff" to hire for a specialized role, which means your hiring pool and job description are going to be unconventional. i.e. people coming from BigCo can go deep in a specialization - procurement specialist, inside sales, tier 3 customer satisfaction engineer, whatever.

This is true is most areas of BigCo businesses
Nov 12, 2022 12 tweets 5 min read
Yesterday, I observed a 33% out-of-the-box performance improvement in @AkkaDotNET 's single remote connection end-to-end benchmark using .NET 7.0 with PGO enabled. Very impressive.

Today I ran our in-memory benchmarks w/ PGO and the results are even more interesting! #dotnet Max numbers (millions msg/s):

* .NET 6.0: 58.4
* .NET 7.0: 64.1
* .NET 7.0 w/ PGO: 70.3 .NET 6.0 in-memory Akka.NET...In-Memory Akka.NET PingPong...In-memory PingPong Akka.NET...
Nov 11, 2022 5 tweets 2 min read
In this Blazor app I'm working on, rather than doing my usual thing and having @AkkaDotNET actors publish UI updates over SignalR I'm considering having the client UI pull via IAsyncEnumerables that are materialized from Akka.Streams, which I've never tried in a UI app before @AkkaDotNET I think I can have my actors that own the event stream (business side) use a BroadcastHub that pushes data to some SinkRefs when new events arrive and have the clients just iterate over those. Less infrastructure boilerplate on the UI side.
Aug 12, 2021 4 tweets 1 min read
For all of the #fsharp bits I tweeted, this is the key takeaway. I can point a new developer on my team at this block of code and say "this is the protocol" and in a separate code file we have a concise FSM that processes all of these

Readably concise, immutable, and fully typed Can't do that in C# without pressing F12 hundreds of times.
Aug 12, 2021 7 tweets 2 min read
Adding key / entityId interfaces to discriminated unions in F# for use with @AkkaDotNET routing constructs like Cluster.Sharding is such a succinct way to implement a protocol docs.microsoft.com/en-us/dotnet/f… @AkkaDotNET I'm almost done with my first set of domain state machines with my F# prototype and it's just a breeze compared to the same one I implemented in C# - I'm | | close to recommending it to some customers who have greenfield projects
Jun 18, 2021 6 tweets 2 min read
Playing with some ideas for this "ways in which software developers destroy value" blog post.

- Destroying optionality
- Frameworkism
- Domain omniscience
- Infrastructure coupling Difficult idea to express because many of these weaknesses are strengths taken to an extreme.

i.e. Frameworkism, building frameworks for building apps rather than just building apps, occurs when DRY gets taken to an extreme and the developer misses the point.
Jun 18, 2021 6 tweets 2 min read
Some developers objected to my insistence on using event sourcing by default, claiming that auditing features of modern databases are sufficient.

My mistake: the biggest benefit of event sourcing is not auditability, it's optionality. If I have the history of state changes for my business entities preserved it creates options for the following:

1. Replaying old data with new code (simulation)
2. Creating novel features and experiences from old data (projections)
3. Reverting objects back to previous states