I see hate all the time for SPA development, but am I the only person who remembers how absurdly awkward it was to build complex apps with purely server side forms submissions?
A non-trivial danger of being an older developer is erroneously believing that something new is just like something you knew a decade ago when it’s not, or missing how newer technology might be making an “old” technique more viable than ever
hardest part about growing old in software dev is seeing the cycles, deliberately opting out of the treadmill, while listening to breathless excitement about the current thing you learned has legit tradeoffs …about a decade ago… and remaining polite about it
I don't get the angst over C# getting some modernizations. They make it plenty easy to lock the language usage back to a certain version in your codebase, the changes have done a *lot* over time to reduce code ceremony, and learning new things is pretty well a job req for us
Wasn’t the whole point of “DevOps” to be more efficient overall by blurring out the lines between development and operations? Isn’t having a separate DevOps team kind of putting us right back to where we started from?
Fleischer: When he said that Israelis should not be consumed by rage? Who the hell does he think he is? I sat in on every summit meeting with foreign leaders when they came to the US after 9/11 and met with Bush. Not one said to Bush the Americans shouldn't be consumed with rage
Overkill for small projects, horrendous for complicated projects with deep business logic. Maybe only truly helpful for medium sized CRUD centric apps.
When should you not use Clean Architecture?
Clean Architecture is designed for complex systems with multiple layers and components.
If you have a small, straightforward project that doesn't require much separation of concerns, using the Clean Architecture may be overkill.
I’m not a big believer in commenting code, but I think it’s mandatory to add comments when you need to apologize in advance to future developers for something weird
Here's a simplified Result class implementation that I use in my projects.
I use it to make it explicit that a method can fail. The result carries an error describing what went wrong.
No more throwing exceptions.
Much more explicit public API.
OSS in the .NET space is still frustrating. Marten is almost a decade old, we've literally written hundreds of blog posts about it, talked about it at conferences, Hanselminutes once,
@dotnetrocks
several times and it's *still* common to hear comments...
One of the keys to being successful in .NET OSS is finding an area where Microsoft itself doesn't have any offering and hoping MS doesn't go there anytime soon.
But they always do eventually:
This is an old, old argument, but I really prefer a codebase organized around features or capabilities rather than by technical layers (Views/Controllers/Models). Especially for larger applications
Please just let this pattern die: “public interface IRepository<T> where T : IEntity”. Especially when it’s a thin wrapper around the real persistence.
Working on moving more OSS stuff to .Net 5 and making the quick decision that I don’t get paid for any of this and any target below netcoreapp3.1 is going away
I’ve done code and architecture reviews on some big, existing codebases over the past 5-6 years. What I can tell you without reservation is that it’s much cheaper to try to do things reasonably well as you go rather than try to do a big clean up / improvement afterward
For the month of April, the .NET on AWS team is proud to have selected Marten as part of its monthly pledge to sponsor .NET
#OSS
projects. 🎉
Our selection committee voted to award
@marten_lib
12 $500 payments totaling $6k in funding. Thanks for empowering the
#dotnet
ecosystem!
I honestly thought that maybe I was getting too old to be slinging code and I needed to move more into a formal architect role. What I’ve learned so far is how much I hate diagramming tools
If you're trying to use MediatR as part of an Event Driven Architecture where you're publishing events as a side effect from command or API processing, I'd recommend looking at Wolverine instead ()...
StructureMap did this in production apps in 2004. Every other IoC tool in existence does this.
And also, I bleeping hate the AspNetCore team for forcing people like me to conform to their random ideas about how an IoC container should behave.
Some of you hate Agile, and I think that what Scrum has become has ruined Agile, but I’ve had 9mos of working in a real waterfall development and it sucks. Anything else is better than that.
My .NET Conf 2023 talk on CQRS with Event Sourcing using the "Critter Stack" talk posted:
I'm not super thrilled with how this came out, so I'm scrapping this talk and starting over with a gentler introductory talk for CodeMash in January
I’m so, so sick of having to work with legacy code. And I’m blocking every single person that replies to me with some kind of self-righteous blather about how legacy code is valuable code
Just watched
@oskar_at_net
's talk from Devoxx Poland 2023:
It's time for our industry to find simpler ways of structuring code that lead to software maintainability without all the ceremonial overhead of current day hexagonal architectures
This statement is flat out wrong. The hardest part is convincing the database team that you shouldn’t have one gigantic shared database for every possible function of the company
I guess I'm one of those people who feel very insulted when management brings in consultants to "figure out our problems" without talking to any of us first.
Didn't really enjoy being the consultant in that scenario either though.
Folks seem to be weirdly optimistic about this. Anything that attracts conservative votes is going to have some horrible elements, but finally doing something to protect the Dreamers and trying to make the asylum process in the US function better seems worthwhile to me.
As Sen. Tillis rightly said, lawmakers who want to protect the border from increased asylum seeking next year have *more* of an incentive to support reform.
Republicans like Romney who says it's time to show the GOP isn't MAGA-crazy should support this:
Nothing in the world of software development sets me off more than a traditional DBA saying that developers can’t be trusted to access their database when that same DBA is not using source control or any kind of formal database migrations to track changes.
This a pretty good synopsis of everything I dislike about the .NET community.
Not sure I'd refer to widely used tools -- some of which have been continuously developed for 10-15 years -- as "flavor of the month"
@nickchapsas
I’ve been a .NET developer since the beginning and those are all gibberish to me. Maybe I just don’t engage in flavor of the month tools or something.
We can all agree or disagree about whether it’s a good challenge or misery to work with legacy code, but I can declare with authority that it’s indeed miserable to work with poor quality legacy code when you aren’t empowered to do anything to fix it.
Software professionals of the world, automate everything that moves repeatedly (deployments). It’s not just about being faster, it’s about not making easy-to-make mistakes doing complicated manual moves
I was more or less demoted by our new CTO into a smaller role, and that of course stings my pride, but the side effect is having many fewer meetings overall and being more hands on and that's being pretty awesome
@SusieusMaximus
@ScottWlaschin
Honestly, I’d start closer. What if a couple hundred votes had gone differently in Florida and President Gore had kept us from overreacting to 9/11 with forever wars, and putting us on a path to drastically paying down the national debt.
If you get to be a “senior” technical person, meaning in this case you’re one of the folks that frequently gets called in to help other technical folks, you better have some advanced ability to context switch throughout the day
This was the most expensive bourbon I could make myself buy that I set aside to toast my first client after I went solo. Really good to try it out tonight!
@eMarkM
Logical separation of concerns is absolutely a good thing, but the focus on layering by technical stereotype can easily be harmful in the long run. Or even just unnecessary complexity in the short run.
I can't speak to their experience, but we pulled Marten out just so there was no issue about who owned it in preparation for trying to build a business model around it. Honestly, we've received much more actual support over the years from
@jetbrains
and even AWS than Microsoft.
After careful consideration, we're leaving the .NET Foundation.
Our commitment to building an amazing cross-platform UI framework remains firm.
You can learn more on GitHub:
Pretty sure there's some correlation between people who gripe about all the additions to C# in the past 5 years and people who don't code with ReSharper or Rider
@khellang
"The biggest mistake and the start of it all was the deprecation of WebForms, still in my view, the zenith of all web development environments."
Unsurprisingly, one of the first things I’m trying to change in my new job is eradicating any form of the Onion Architecture philosophy for organizing codebases in favor of a feature folder approach. I.e., put closely related stuff together, and stuff that’s not related apart
Here’s a sign of being an older mid-40’s developer. I think the biggest advance in daily development for me in the past 10 years is having higher resolution monitors and more legible fonts.
It’s not healthy for anyone involved for a developer of any level of seniority or competence to work completely alone on something mission critical and complicated
Any time you’re building an enterprise system that has to be reasonably performant and scalable, you’ve got to be aware of network round trips and watch for code that’s chatty over the wire.
That’s my Captain Obvious advice for the day, and you’re welcome.
I still think the scariest sentence in all of software development is “you’ll have to use our homegrown ORM”, but not too far behind is “custom Xml query language"
I think bad software architectures and designs aren’t created, they more likely accrete over time. Just pay attention to what you’re doing and adapt as you go. No matter how much upfront design you’re doing, design should never end
I don’t think I’d call a process Agile if you’re still doing waterfall phases and all the iterations have to be planned out in advance with dates, but you know, there’s a stand up meeting, so...
“Just in case we decide to change databases” is the ultimate YAGNI violation.
In 20+ years of software development, I’ve only *once* been part of an effort to change out a backing database for a running system (RavenDb for Marten/Postgresql)
@buhakmeh
Context:
- Isolate domain from I/O implementation details
- Desire to avoid slow tests or shared fixture
- Need to swap SDKs or backing stores
Solution
- Repository Pattern
Trade Offs
- Abstraction hides platform capabilities
- Queries on repository interface hard to maintain
Sometimes "never read the comments" also includes StackOverflow. Nobody in this world more opinionated than a software developer with shallow knowledge
It’s hard to be passionate or ambitious about the technical work in projects where most of the effort is in convincing non-technical people to give you permission to make technical decisions
In support of a big conversation we're gonna continue at work tomorrow, I'm finally writing up my big post on why I think prescriptive architectures (onion/clean) go wrong, putting SOLID into perspective, and taking a swipe at "repository of T" data access approaches
When you favor integration tests over unit tests in a project, it makes refactoring easier by not having much less coupling between the implementation details and the tests, but it makes refactoring slower by having slower tests. Guess there’s no free lunch.
These days I tend to run either Sql Server or Postgresql in a Docker container for local development, and that makes it super easy to blow away and recreate the database from scratch on demand. Assuming decent database project automation anyway
@davidfowl
I'd be happy w/ nothing more than discriminated unions in the next C#. Standalone functions would be nice too.
(and I'm automatically muting anyone who replies "just use F#")