Do all the things like ++ or -- rants, post your own rants, comment on others' rants and build your customized dev avatarSign Up
Get a devDuck
Rubber duck debugging has never been so cute! Get your favorite coding language devDuckBuy Now
Search - "software architecture"
Good Morning!, its time for practiseSafeHex's most incompetent co-worker!
Todays contestant is a very special one.
*sitcom audience: WHY?*
Glad you asked, you see if you were to look at his linkedin profile, you would see a job title unlike any you've seen before.
*sitcom audience oooooooohhhhhh*
were not talking software developer, engineer, tech lead, designer, CTO, CEO or anything like that, No No our new entrant "G" surpasses all of those with the title ..... "Software extraordinaire".
*sitcom audience laughs hysterically*
I KNOW!, wtf does that even mean! as a previous dev-ranter pointed out does this mean he IS quality code? I'd say he's more like a trash can ... where his code belongs
*ba dum tsssss*
Ok ok, lets get on with the show, heres some reasons why "G" is on the show:
One of G's tasks was to build an analytics gathering library for iOS, similar to google analytics where you track pages and events (we couldn't use google's). G was SO good at this job he implemented 2 features we didn't even ask for:
- If the library was unable to load its config file (for any reason) it would throw an uncatchable system integrity error, crashing the app.
- If anything was passed into any of the functions that wasn't expected (null, empty array etc.) it would crash the app as it was "more efficient" to not do any sanity checks inside the library.
This caused a lot of issues as some of the data needed to come from the clients server. The day we launched the app, within the first 3 hours we had over 40k crash logs and a VERY angry client.
Now, what makes this story important is not the bugs themselves, come on how many times have we all done something stupid? No the issue here was G defended all of this as the right thing to do!
.. and no he wasn't stoned or drunk!
G claimed if he couldn't get the right settings / params he wouldn't be able to track the event and then our CEO wouldn't have our usage data. To which I replied:
"So your solution was to not give the client an app instead? ... which also doesn't give the CEO his data".
He got very angry and asked me "what would you do then?". I offered a solution something like why not have a default tag for "error" or "unknown" where if theres an issue, we send up whatever we have, plus the file name and store it somewhere else. I was told I was being ridiculous as it wasn't built to track anything like that and that would never work ... his solution? ... pull the library out of the app and forget it.
... once again giving everyone no data.
G later moved onto another cross-platform style project. Backend team were particularly unhappy as they got no spec of what needed to be done. All they knew was it was a single endpoint dealing with very complex model. There was no Java classes, super classes, abstract classes or even interfaces, just this huge chunk of mocked data. So myself and the lead sat down with him, and asked where the interfaces for the backend where, or designs / architecture for them etc.
His response, to this day frightens me ... not makes me angry, not bewilders me ... scares the living shit out of me that people like this exist in the world and have successful careers.
G: "hhhmmm, I know how to build an interface, but i've never understood them ... Like lets say I have an interface, what now? how does that help me in any way? I can't physically use it, does it not just use up time building it for no reason?"
us: "... ... how are the backend team suppose to understand the model, its types, integrate it into the other systems?"
G: "Can I not just tell them and they can write it down?"
I'll just pause here for a moment, as you'll likely need to read that again out of sheer disbelief
I've never seen someone die inside the way the lead did. He started a syllable and his face just dropped, eyes glazed over and he instantly lost all the will to live. He replied:
" wel ............... it doesn't matter ... its not important ... I have to go, good luck with the project"
*killed the screen share and left the room*
now I know you are all dying in suspense to know what happened to that project, I can drop the shocking bombshell that it was in fact cancelled. Thankfully only ~350 man hours were spent on it
... yep, not a typo.
G's crowning achievement however will go down in history. VERY long story short, backend got deployed to the server and EVERYTHING broke. Lead investigated, found mistakes and config issues on every second line, load balancer wasn't even starting up. When asked had this been tested before it was deployed:
G: "Yeah I tested it on my machine, it worked fine"
lead: "... and on the server?"
G: "no, my machine will do the same thing"
lead: "do you have a load balancer and multiple VM's?"
G: "no, but Java is Java"
... and with that its time to end todays episode. Will G be our most incompetent? ... maybe.
Tune in later for more practiceSafeHex's most incompetent co-worker!!!33
So i've been a dev manager for a little while now. Thought i'd take some time to disambiguate some job titles to let everyone know what they might be in for when joining / moving around a big org.
Title: Senior Software Engineer
- Typically has years experience building what management are trying to build
- Building new features
- Writing code
- Code review
- Offering advice to product manag......OH NO YOU DON'T CODE MONKEY, BACK TO WORK!
Title: Dev Manager
- Former/current programmer
- knows his/her way around a codebase.
- Recruiting / interviewing new staff
- Keeping the team focused and delivering tasks
- Architecture decisions
- Lying about complexity of architecture decisions to ensure team gets the actual time they need
- Lying about feature estimations to ensure team gets to work on critical technical improvements that were cancelled / de-prioritised
- Explaining to hire-ups why we can't "Just do it quicker"
- Explaining to senior engineers why the product manager declined their meeting request
Title: Product / Product Manager
- Nothing relevant to the industry or product line what so ever
- Found the correct building on the day of the interview
- Has once opened an Excel spreadsheet and successfully saved it to a desktop
- Making every key decision about every feature available in the app
- Learning to ignore that inner voice we like to call "Common sense"
- Making sure to not accidentally take some advice from technical staff
- Raising the blood pressure of everyone below them / working with them
Title: Program Lead / Product Owner
- Capable of speech
- Aware of what a computer is (optional)
- Sitting down
- Clicking random buttons on Jira
- Making bullet point lists
Title: Director of Software Engineering
- Allegedly attended college/university to study computer science
- Similar to a technical product manager (technical optional)
- Reports directly to VP
- Fixes problems by creating a different problem somewhere else as a distraction
- Claiming to understand and green light technical decisions, while having already agreed with product that it will never happen10
I remember that time my class (first year of software development) wrote a huge project for a real company as practice for irl stuff.
I was the only Linux user and it would be deployed on a Linux server.
Spent 10 weeks of development and then the moment of deployment on a Linux server began!
Nothing was case sensitive, everything was programmed for a windows architecture (backward slashes etc) and mssql was used while we would host it on a MySQL server.
The tree core guys spent three days or so to make the entire fucker compatible 😂
It was enjoyable to see them (literally) sweat 😊 (it had been known from the very beginning)7
To all the design pattern nazis..
Don't you ever tell me that something is impossible because it violates some design pattern! Those design principles are there to make your life easier, not something you have to obey by law.
Don't get me wrong, you should where ever possible respect those best practices, because it keeps your software maintainable.
But your software should foremost solve real world problems and real world problems can be far more complex than any design pattern could address. So there are cases where you can consciously decide to disregard a best practice in order to provide value to the world.
Thanks for reading if you got this far.7
I very very rarely drink, but when I do I party hard.
I negotiated an entire piece of complex web architecture (really huge, works at 50k transactions per second), with my boss who's a lead architect, from a bar (he thought I was home), while moderately drunk.
It got me a lotta praise and till date it's one of the best pieces of software I've ever written. It saved the company 500+ hours or something #humblebrag.
To this day I have no recollection of what I said (huge hangover after) or how I managed to come up with that shit. I don't think I'd have been able to do it sober. The sheer size of the problem would've made me go "yea it works, I'm not touching that. Nope."
DAE notice any increase in pattern recognition in their code while drunk?1
Impostor Syndrome at it's finest.
Any experienced developer knows writing good programs has very little to do with syntax and a whole lot to do with where you put it. If this guy actually did any work over his career he probably knows a ton about application architecture and design patterns without even realizing it.
Legends -> I: Interviewer
I: what is mvc architecture
Me: model.. view.. controller... and blah blah
I: mvc is not an architecture.. its a design pattern.. architecture is blah blah
I: srry U r rejected.. god bless you
Me: googled 'Is mvc a design pattern or architectural pattern'
Google: shows stack overflow link
Stackoverflow: mvc is architectural pattern blah blah... accepted answer
Me: hopeless about my future
GOD BLESS THE INTERNET and SOFTWARE DEVELOPERS19
Confuzzled if I should go the low level way and learn more about software architecture and foundation or go the artificial intelligence machine learning way because I want to get out of this infinite loop of only developing apps!4
As devs we like to complain about our jobs. But I just want to take a moment and acknowledge how truly amazing writing software is. Nothing else has given me so much joy and happiness. The endless stream of new things to learn, the elusive art of clean code, and deep understanding of systems required for architecture. There is so much depth to this career we have all chosen and I hope you guys love it just as much as I do.5
I would (at apprenticeship level) start to teach more software architecture and security related stuff.
Yes knowing how to iterate over an array is important but it’s getting lame...
And last but not least it’s fucking 2018 why am I writing a Java 6 swing GUI on paper as a test8
Okay, story time.
This rant is about the many mistakes I made at the time, specifically the biggest – but not the first – of which: publishing some preliminary results very early on.
So I posted a sarcastic question to the Software Engineering Stack Exchange, which was originally worded differently to reflect my frustration, but was later edited by mods to be more serious.
You can see the responses for yourself here: https://goo.gl/poHKpK
Most of the serious answers were along the lines of "multithreading is hard". The top voted response started with this statement: "1) Multithreading is extremely hard, and unfortunately the way you've presented this idea so far implies you're severely underestimating how hard it is."
While I'll admit that my presentation was initially lacking, I later made an entire page to explain the synchronisation mechanism in place, and you can read more about it here, if you're interested:
But what really shocked me was that I had never understood the mindset that all the naysayers adopted until I read that response.
Because the bottom-line of that entire response is an argument: an argument against change.
Nexus does not and will not hold your hand. It will not repeat Node's mistakes and give you nice ways to shoot yourself in the foot later, like `process.on('uncaughtException', ...)` for a catch-all global error handling solution.
No, an uncaught exception will be dealt with like any other self-respecting language: by not ignoring the problem and pretending it doesn't exist. If you write bad code, your program will crash, and you can't rectify a bug in your code by ignoring its presence entirely and using duct tape to scrape something together.
Back on the topic of multithreading, though. Multithreading is known to be hard, that's true. But how do you deal with a difficult solution? You simplify it and break it down, not just disregard it completely; because multithreading has its great advantages, too.
Like, how about we talk performance?
How about distributed algorithms that don't waste 40% of their computing power on agent communication and pointless overhead (like the serialisation/deserialisation of messages across the execution boundary for every single call)?
How about vertical scaling without forking the entire address space (and thus multiplying your application's memory consumption by the number of cores you wish to use)?
Some will say that the performance gains aren't worth the risk. That the possibility of race conditions and deadlocks aren't worth it.
That's the point of cooperative multithreading. It is a way to smartly work around these issues.
If you use promises, they will execute in parallel, to the best of the scheduler's abilities, and if you chain them then they will run consecutively as planned according to their dependency graph.
If your code doesn't access global variables or shared closure variables, or your promises only deal with their provided inputs without side-effects, then no contention will *ever* occur.
If you only read and never modify globals, no contention will ever occur.
Are you seeing the same trend I'm seeing?
When someone says we shouldn't use multithreading because it's hard, do you know what I like to say to that?
"To multithread, you need a pair."18
We made a software for hospitals in my old department. The senior Dev kinda gave me the software, because he thought it sucked and was perfect for a newbie like me. I really loved my work and gave everything I had to improve the quality of software, introduced tests, refactored old smelly code and talked with the product manager to overhaul the ui. Several months later this little shit project the senior gave the newbie, was a huge success and better than any thrash that the senior has created. The senior was really pissed, so everytime I had some days off, he tried to sabotage me in any way. I couldn't take that and many other things anymore, so I left the company. The most tragic part is, that my software could become a massive foundation for the company, but after I left they abandoned it. I still had some good contacts within the old company and they said, that the senior dev told everyone how bad everything was, that I have done through the years and that they can't even describe how bad the architecture of the software is. tl;dr fuck off!! I've done so much things for the company and they never appreciated it. I'm glad I quit that job. Best decision ever!!2
A lot of engineering fads go in circle.
Architecture in the 80s: Mainframe and clients.
Architecture in the 90s: Software systems connected by an ESB.
Architecture in the 2000s: Big central service and everyone connects to it for everything
Architecture in the 2010s: Decentralized microservices that communicate with queues.
Current: RabbitMQ and Kafka.
... Can't we just go back to the 90s?
I hate fads.
I hate when I have to get some data, and it's scattered on 20 different servers, and to load a fucking account page, a convoluted network of 40 apps have to be activated, some in PHP, others in JS, others on Java, that are developed by different teams, connected to different tiny ass DBs, all on huge clusters of tiny ass virtual machines that get 30% load at peak hours, 90% of which comes from serializing and parsing messages. 40 people maintaining this nightmare, that could've been just 7 people making a small monolithic system that easily handles this workload on a 4-core server with 32GB of RAM.
Tripple it, put it behind a load balancer, proper DB replication (use fucking CockroachDB if you really want survivability), and you've got zero downtime at a fraction of the cost.
Just because something's cool now, doesn't mean that everybody has to blindly follow it for fucks sake!
Same rant goes for functional vs OOP and all that crap. Going blindly with any of these is just a stupid fad, and the main reason why companies need refactoring of legacy code.15
So I wanted a raise and the only way was becoming a software lead.
With that title you get more money but also more responsibility, so you have the last word in technical decisions, you review architecture, do tech interviews, guide the less experienced, etc. I can handle that, even as introverted as I am.
What nobody told me was that I was going to spend my whole time on fucking meetings, one after another, I have not touched my IDE in days, I hate this shit already.
Careful what you wish for they say, so true, I'm stuck here and I hate my job now, probably going to quit as soon as I recover my life, if ever.4
It always gives me a smile when my boss (ceo, no technician) calls me and says "let's do some software architecture together!". He has no idea what this means, but he likes the term. Sometimes, this call just means "let's have a beer together"3
I feel as if i have finally gotten the definitive Linux experience. While installing a software stack last night, apt said it was going to uninstall itself and replace itself with apt so i was like, "whatever, strange but fine.". What i didn't notice is that it was replacing itself with itself in a different architecture. AMD64 to be exact. Since my distro is running 32 bit for some reason, fixing that tonight, apt stopped working. I had to then use dpkg to force purge the broken apt, and then reinstall it by finding the .deb online and reinstalling it via dpkg. Like geez, i just needed XAMPP.10
Worst experience was my first job after study. They told me at the interview that the job has very low travel activity... "we are doing most of the projects in-house...just traveling to the customer now and then for kick offs or when the software has to be trained"
A half year later I had to travel every fucking week to the customer. Fixing shitty code from a freelancer who never worked in a team, in a language I've never used before (they told me the first day at the customer). Don't get me wrong, I love learning new stuff but this project and architecture was a totally fucked up mess. Flew every monday to the customer (had to get up at 4am monday morning to get the flight) and friday back. Quit the job after living 3 months from a fucking suitcase.
Imagine yourself being a CTO back then.
Brand new Acura NSX. No MacBooks, ThinkPads are hot. Your company has its own skyscraper. CASE tools are just introduced and they’re hotter than blockchain now. You do software architecture in IBM Rational Rose, typing on your Model M and thinking really hard about Java OOP which is very hot right now.
You have Erlang servers at your own data center. You laugh at people writing in COBOL. You excited about aspect-oriented programming.
What a wonderful time.3
Gosh, where went my social life? XD
That's already more than a month that I moved to Nice. I'm working a bit too much I guess. You know, I'm the kind of guy who is gonna rebuild the entire software architecture on his free time because it's crap x)
Anyway Nice is quite relaxing I like this place. And if someone is around and see my face, come and say hi :P5
When my clients expect me to finish the software architecture ASAP and accuse me of procrastinating : Do i really need to explain how thinking works? 😤2
Nope, definitely not going to work for that customer anymore. Fuck this shit. At least for this week.
My background: mid-30 years old, some kind of business & IT consultant / lead dev working for a mid sized CRM consulting company, with approx 15 years of experience in development and software architecture, most of the time "thinking" in C#, still learning new languages, being a cloud evangelist and team lead. We usually have customers with customers (B2B/B2C).
Personality type "campaigner" (ENFP-A).
Today the project lead of my client (a big corporation in the energy industry) told me that he still didn't order all the necessary resources for the cloud project. Just to be clear: He's on the client side. We (the architects, one internal and me) told him one month ago what we need for the beginning. Just a few things - an Azure subscription, a license for the CRM platform, and our dev tools.
And now let's guess when the project is planned to begin? Yeah, right: 1st of April. NO APRIL'S FOOL. And guess what? Next Tuesday we'll do the onboarding for the new (external) devs, and NOTHING will be ready. Yeah, just let us build stuff in our minds, and on the whiteboards, because it's an AGILE project, right? We don't need any systems and tools...
And now he sent me the questionnaires which need to be answered before any cloud service can be ordered by the corporate IT. And yes, he didn't answer a single thing, and just meant "Those are architecture questions" (they are not) and (of course) "please provide the answers until Monday morning, so we can FINALLY order the services."
Yeah, you fucktard. Of course it's MY FAULT now. Maybe I should write an email to your boss asking how we can speed things up a little bit...4
Two third of software architecture lecturers I've ever came across in my life have been fucking cunts. Is there a trend there?2
OK, listen, this is not a lie.
For every sentence here, i collected a valid evendence i can show to proof, should you refuse to believe the sentence to be correct. Not one of the sentences down there is opinion but provable fact.
All of this is not a compendium of all mistakes i ever seen, but it is all present in ONE project:
- The codebase isn't a well thought out structure. In fact, it doesn't follow any defined standard, but is, instead, a bunch of spaghetti code. (provable by the fact that every class is public and globally visible)
- Where every one who worked at, failing to find or understand the existing code, added his personal universe of tools and objects. That despite that every class being globally visible. (provable by finding multiple implementations for same things)
- Also, it is remarkable that this happend even though the code is mostly young, the oldest parts only 3 years old and it still follows some or most of the major antipatterns there are. (provable by this was when the project started)
- There was not once a refactoring task issued in the runtime of that project. (provable by refactoring tasks not existing)
- Justified by just wrong reasoning like "it's optimised for mass data", or "it's how we work here, because it's always worked", the code does not follow
any design principles, let alone Michael Feathers and Robert C. Martins S-O-L-I-D principle, which is, while being taught and studied, improved and used in the rest of the world,
not even mentioned in one of the over 3000 pages of documents. (provable by full text search and asking the programmers about SOLID)
- Also, there is no state of the art Software Design process (provable by not having product owners, not having requirement engineers, nor design tools for that)
- nor is there distinction between business process and software solutiong in documentation, which, by the way has over 3200 pages (provable by having the functional documentation mixed with implementation details and process descriptions)
- There is no dev ops in place.
- Not a single Unit test has been created.
- The Code Inspection that could run at check in has been disabled.
- There is no dependency graph between packages
- There is no branching or encapsulation of changes nor association between code change and respecting task
- Everyone who works with that legacy code, where such a lot of things are not determinable, your check ins are a shot in the dark, provable by a direct correlation between commits, shortly followed by one-line commits to the same task.
- Also, it is internally communicated and believed there, that this is a high-end, object oriented, state of the art way of getting things done.
- Just yesterday, we stated an effort of 9 days (3 people work 3 days each) do let a modal dialog save the changes when coming back with OK Result.
- Also, training the existing programmers into transitioning to better software architecture and SOLID concepts is considered low priority because of it being too expensive4
So ok here it is, as asked in the comments.
Setting: customer (huge electronics chain) wants a huge migration from custom software to SAP erp, hybris commere for b2b and ... azure cloud
Timeframe: ~10 months….
My colleague and me had the glorious task to make the evaluation result of the B2B approval process (like you can only buy up till € 1000, then someone has to approve) available in the cart view, not just the end of the checkout. Well I though, easy, we have the results, just put them in the cart … hmm :-\
The whole thing is that the the storefront - called accelerator (although it should rather be called decelerator) is a 10-year old (looking) buggy interface, that promises to the customers, that it solves all their problems and just needs some minor customization. Fact is, it’s an abomination, which makes us spend 2 months in every project to „ripp it apart“ and fix/repair/rebuild major functionality (which changes every 6 months because of „updates“.
After a week of reading the scarce (aka non-existing) docs and decompiling and debugging hybris code, we found out (besides dozends of bugs) that this is not going to be easy. The domain model is fucked up - both CartModel and OrderModel extend AbstractOrderModel. Though we only need functionality that is in the AbstractOrderModel, the hybris guys decided (for an unknown reason) to use OrderModel in every single fucking method (about 30 nested calls ….). So what shall we do, we don’t have an order yet, only a cart. Fuck lets fake an order, push it through use the results and dismiss the order … good idea!? BAD IDEA (don’t ask …). So after a week or two we changed our strategy: create duplicate interface for nearly all (spring) services with changed method signatures that override the hybris beans and allow to use CartModels (which is possible, because within the super methods, they actually „cast" it to AbstractOrderModel *facepalm*).
After about 2 months (2 people full time) we have a working „prototype“. It works with the default-sample-accelerator data. Unfortunately the customer wanted to have it’s own dateset in the system (what a shock). Well you guess it … everything collapsed. The way the customer wanted to "have it working“ was just incompatible with the way hybris wants it (yeah yeah SAP, hybris is sooo customizable …). Well we basically had to rewrite everything again.
Just in case your wondering … the requirements were clear in the beginning (stick to the standard! [configuration/functinonality]). Well, then the customer found out that this is shit … and well …
So some months later, next big thing. I was appointed technical sublead (is that a word)/sub pm for the topics‚delivery service‘ (cart, delivery time calculation, u name it) and customerregistration - a reward for my great work with the b2b approval process???
Customer's office: 20+ people, mostly SAP related, a few c# guys, and drumrole .... the main (external) overall superhero ‚im the greates and ur shit‘ architect.
Aberage age 45+, me - the ‚hybris guy’ (he really just called me that all the time), age 32.
He powerpoints his „ tables" and other weird out of this world stuff on the wall, talks and talks. Everyone is in awe (or fear?). Everything he says is just bullshit and I see it in the eyes of the others. Finally the hybris guy interrups him, as he explains the overall architecture (which is just wrong) and points out how it should be (according to my docs which very more up to date. From now on he didn't just "not like" me anymore. (good first day)
I remember the looks of the other guys - they were releaved that someone pointed that out - saved the weeks of useless work ...
Instead of talking the customer's tongue he just spoke gibberish SAP … arg (common in SAP land as I had to learn the hard way).
Outcome of about (useless) 5 meetings later: we are going to blow out data from informatica to sap to azure to datahub to hybris ... hmpf needless to say its fucking super slow.
But who cares, I‘ll get my own rest endpoint that‘ll do all I need.
First try: error 500, 2. try: 20 seconds later, error message in html, content type json, a few days later the c# guy manages to deliver a kinda working still slow service, only the results are wrong, customer blames the hybris team, hmm we r just using their fucking results ...
The sap guys (customer service) just don't seem to be able to activate/configure the OOTB odata service, so I was told)
Several email rounds, meetings later, about 2 months, still no working hybris integration (all my emails with detailed checklists for every participent and deadlines were unanswered/ignored or answered with unrelated stuff). Customer pissed at us (god knows why, I tried, I really did!). So I decide to fly up there to handle it all by myself16
I once agreed to maintain and develop an application used in a different section of the school to keep inventory and make sure everything is where it is supposed to be.
At first there was enthusiasm, together with 2 of my classmates we agreed and git clone-d the .NET application that now graduated students built and maintained for the past few years. What could go wrong right?!
It became clear that the original students that worked on it followed an older curriculum, meaning they still got taught .NET instead of the core variant that we get now, not only that but it also seemed that they either did not fully grasp the Clean/Onion architecture or didn't get it in class since there were infrastructure components in the 'Domain' project of the solution. Think of 2 DBContexts in the domain model, yep.
One of us bailed in the first week, the other one and I felt bad for the people using the app so we went on and tried to work on the first bugs that were described in a document. One of these bugs was 'whenever I filter on something in the list, everybody gets to see that filter on their screen instead of only me'. Woah that's weird! Let's see how they put that together!
Oh god, they are using a _static_ variable to store filters, no wonder that it doesn't work properly. Ever heard of sessions?!
Second bug: Sometimes people can't create an account when we sign them up from the admin panel. Alright that is weird, let's figure that one out! Wait a second it seems to work in development? What's this about.
Oh wait I can't create an account on production either? Oh that's weird, wait a second... Why do I have to put my e-mail in a form that was sent to me through e-mail? Why is my address not filled in already? OOH, if someone types in the wrong e-mail address (which is easy since our school has 4 variants of the same f*cking e-mail address) it won't work since it can't recognize the user! Brilliant! Remove e-mail input box and make a token/queryparam determine the user account.
Ah that seems good, it's a mess but it seems a tiny bit better now, great! We're making progress and some sweet buck.
Next bug, trillions of 50x errors on random pages, that's a weird one.
Hm everything works in development, that's odd. Is the production data corrupted?
DID I MENTION that in order to get into the system in development we have to load in a f*cking production database backup ON OUR DEVELOPMENT MACHINE and then ask one of the users' password to login to it and create an account for ourselves? Seeding? What's that, right?!
Anyway, back to bug fixing. I e-mail the the people responsible for the app and get a production admin account, oh I also can't ssh into it because of policies so I have to do everything over e-mail and figure out what's causing the errors. I somehow also wonder if they have any kind of virtualization in place, giving students a VM to do that stuff in doesn't seem so weird does it ? Even with school policies?
Oh btw, 'deploying' means sending a .zip file to a guy in another building and telling him how to configure it, apparently this resulted in a missing folder that the application needed to work and couldn't make on its own. This after 2 weeks of e-mailing back and forth.
After 3 months i quit out of despair and sadness, and due to the fact that I just couldn't do it anymore. I separated everything into logical subprojects and let the last guy handle it, he was OK with that and understood why I left.
Luckily, around that time I already had an actual job at a software development company :)1
I have this urge to get better at coding and software architecture and design. But fuck me if I'm not lazy about it.
All these crazy good books and lectures and here I am, doing jackshit to improve. Can't even finish my own personal projects. Bah.
I know how I'm supposed to go about it, how to keep engaged in a cycle of personal betterment. I lack self-discipline to do it though... Tried meditation for a time, but haven't really stuck to it. Currently trying to follow stoics (Seneca, Marcus Aurelius and some others), but the mindset is not so easy to adopt, and the practical philosophies even harder.
Oh well. Life is hard. Blah-blah-blah. Thanks for reading. Just wanted to vent, really.8
So today I found out that one of my bosses (who does not program) thinks that he is better at system architecture than myself and 2 other colleagues combined and that we are "too inexperienced".
Not sure how he works that one out tbh. I have nearly 10 years experience, I build plenty of systems outside of work and I have a university degree in software engineering.
Sometimes bosses really know how to motivate you. This joins a long list of frustrations with my current workplace - and am almost at the end of my tether.1
So, I have a bit of a question for you guys..
I'm a self taught coder, but I think I lack some elements regarding the architecture side of software development.
Does anyone have some valuable sources to learn about it?
Thanks in advance :)11
I need some advice here... This will be a long one, please bear with me.
First, some background:
I'm a senior level developer working in a company that primarily doesn't produce software like most fast paced companies. Lots of legacy code, old processes, etc. It's very slow and bureaucratic to say the least, and much of the management and lead engineering talent subscribes to the very old school way of managing projects (commit up front, fixed budget, deliver or else...), but they let us use agile to run our team, so long as we meet our commitments (!!). We are also largely populated by people who aren't really software engineers but who do software work, so being one myself I'm actually a fish out of water... Our lead engineer is one of these people who doesn't understand software engineering and is very types when it comes to managing a project.
That being said, we have this project we've been working for a while and we've been churning on it for the better part of two years - with multiple changes in mediocre contribution to development along the way (mainly due to development talent being hard to secure from other projects). The application hasn't really been given the chance to have its core architecture developed to be really robust and elegant, in favor of "just making things work" in order to satisfy fake deliverables to give the customer.
This has led us to have to settle for a rickety architecture and sloppy technical debt that we can't take the time to properly fix because it doesn't (in the mind of the lead engineer - who isn't a software engineer mind you) deliver visible value. He's constantly changing his mind on what he wants to see working and functional, he zones out during sprint planning, tries to work stories not on the sprint backlog on the side, and doesn't let our product owner do her job. He's holding us to commitments we made in January and he's not listening when the team says we don't think we can deliver on what's left by the end of the year. He thinks it's reasonable to expect us to deliver and he's brushing us off.
We have a functional product now, but it's not very useful yet and still has some usability issues. It's still missing features, which we're being put under pressure to get implemented (even half-assed) by the end of the year.
Should I stand up for what I know is the right way to write software and push for something more stable sometime next year or settle for a "patch job" that we *might* deliver that will most definitely be buggy and be harder to maintain going forward? I feel like I'm fighting an uphill battle in trying to write good quality code in lieu of faster results and I just can't get behind settling for crap just because.9
My boss just now: "In a 32 bit machine the memory limit is 1.6 GB. After that programs routinely crash."
What really happens IMO? He writes programs that crash when they reach 1.6 GB allocated and the architecture is 32 bit. But it's a limit of his software, not one of the OS.8
You realize that the ERP software you use at your company is shit when:
- there is no service-side ERP backend handling requests
- the whole permission system is client-side (!)
- every client directly connects to the MSSQL database with a supervisor user (stored in plain text in a local config file)
- the MSSQL database contains tables with:
- names like "contract" but then also "contracts"
- mixed german and english words
- the multiple-business-unit implementation uses 4 columns named "Layer 1, Layer 2, Layer 3, Layer 4" in EACH table
- you find out that the ERP software is created with a fucking "software creation tool"
- there is no API, so you have to program one yourself to use for services
Yet, they charge us shit ton of money for their broken ass software.1
I know this may not be the typical post on Devrant and it may be a little off topic, but I could really use some advice from fellow colleagues here.
The thing is, I just finished engineering school and I got my first job as a software engineer. So far so good. I've never been a natural talent in this field, and I suck at writing code. I find things like architecture, system design, innovation, requirementsspecification, management and business development much more interesting.
These past weeks as a software engineer has been really challenging for me. I seem to be totally "in over my head", and fuck everything up. I can't understand how the code I'm supposed to write works, and can't solve even the simplest of tasks that are assigned to me if they involve any implementation of code, or fiddling with Github or build servers.
Is it normal to feel like this as an engineer with zero experience? Will things get better, or should I just resign or wait to be fired?
What would a natural next step for a software engineer who'd like to move more into business and management be? A MBA? Project management courses?
I hope to get some advice from you guys. Maybe you've felt like this when you started out as well? Anyway, any constructive feedback would be really much appreciated.11
Honestly, before starting my post secondary education in Computer science I had wanted to become an architect.
Since I was maybe.... 10 years old all the way till the semester before graduating from highschool I was sold on becoming an architect.
I love design; Interior design, art, unique use of colors, architecture. I love systems that looked good and worked as well as they appeared.
Over the winter break of my grade 12 year a friend said to me, "Why don't you become a UI/UX developer? You love technology, software and design, why not go into a career where you practice on all three?".
I was surprised to hear that. It had honestly never really occurred to me since I had always told myself I would become an architect.
I guess that leaves me to where I am now. Still a student, but loving my time learning the details behind software development. I do not regret choosing Development over becoming an Architect.2
4 years ago I made a personal goal/plan to be a full stack developer. Meaning a good understanding of any development between os level code and web/front end user experience.
So now, devRant collective I ask you. What do you call a developer with good skills in:
- os level code (c, c++ and os apis)
- database level tech (advanced querying and db aglo/modeling)
- software architecture
- application level (workflow and business logic)
- transport level (protocol design and usage)
- front end tech (graphics programming and event driven paradigm)
- user experience14
All day long meeting with business consultant about company future, software architecture, technical debt, refactoring, resources, projects.
Conclusion from top consultant, ex country manager of a weeeell known tech company:
Who cares about "code" anyway? (disgusted smile)6
var _self = Object.create(Rant);
Hello devs I'm back
A few months ago I joined a software development company and I was pretty specific that I wasn't going to do support or maintenance only feature development, well, this past 3 months I've been doing dev helping stablish good practices and a better architecture for the app, but guess who is joining a support team tomorrow, they sold me the idea of a refactor team, I was trilled and accepted, now they tell me it's a legacy bug fixing team, damn I hate this crap, hope y'all doing better5
Not really a rant (?)
I started my first programming job in January this year. I went there staight after Highschool, so i had no real experience, knew only the basics of software development and my written code was quite a mess. So one of my first real tasks (after 2 months) was to write a business logic for batch handling (for a warehouse management system). I invested quite some time to develop a suitable architecture, talked with some other developers and wanted to cover the whole thing with unit tests (which really nobody at the company uses). So I spent about 3 weeks to write the whole thing, test it and improve it many times. It worked perfectly and I got pretty good feedback from the code-review.
1 month ago - the code worked perfectly and was multiple times testet (also by the client) - the client came with some totally new requirements for the batch handling. I tried to impelemt them, but soon found out, that the architecture doesn't supported them, it was not build for the required handling and would soon become a totally mess, if i tried to make it work.
So I was pretty mad, because I had to change the whole fucking thing, but I also wanted to make it better. I hab gained some experience and decided (with some help of a senior dev) to make a completely new try with a different architecture, that can be easily expanded, if needed. I build my concept, wrote and tested the whole new code in 3 days. Fucking 3 days compared to the initial 3 weeks, and it worked, better and even faster.
I was quite pissed to delete the old code, and especially that i had wasted 3 weeks for it and had to struggle with many different things. But I lerarned so much from it and also in the months between, that I was also really glad that I had the opportiunity to write it again.
This whole thing made me now realize that this is, what I really like to do and what I'm good in. I really enjoy learning new things and for me, programming is the best and easiest way to do it. Despite alle the cons and annoying side effects of it, I really found my dream job here.1
Well, I wanna specialize in low-level software as I get older. Everyone is telling me to go out and learn a processor architecture. I'm willing to be patient, so I do what people recommend to me and I download the Intel x86_64 manual. I was excited... UNTIL I REALIZED THE MANUAL WAS 4474 PAGES LONG! Like, how am I supposed to jump into assembly, machine language, and low-level programing with a beginner's task like that? I cannot find ANY resources online to simplify the transition, and college sure ain't gonna teach me anytime soon.10
Being a junior and part of a small team at a startup, working with a new software architecture, even the team lead is a beginner in it. It feels like I'm at an echo chamber, there's nobody expert enough to look up to if stuck, decisions seem to be based on opinions rather than an architectural design kinda point of view.
Ugh, I hope I'm not the only here ever feeling this way.7
This is the third... No, fourth time in my life I'm sitting in a Software Architecture class, and I shit you not, every time it's a new bullshit from a different perspective by a different know-it-all.
Like, have we not figured this shit out yet?2
Here is a story about 5 years of my life.
My studies had little to do with web. I did embedded systems (architecture and software) but quickly realized that I couldn't see myself living my life in my homecoutry and that my degree would be worth little to no more than shit elsewhere in the world. That was on my 3rd year in uni.
I liked coding so I decided to pursue computer science, then web development. For that, your degree mattered little.
From then on, when I wasn't in class I was doing some coding.
This allowed me to get short (2 months) internships in Mobile and web development, 4 in total.
Doing so I had made it so that my professors would allow me to do my graduation project in web and mobile dev. That project having ended, I secured a long (1year and a half) internship in Mumbai India doing web for a big consulting company. Having finished that I headed to Belgium for my current job. All with having no to little financial resources except what I could come up with.
"I'm proud of all the efforts it took to make it" is what I think sometimes but what is it that I made? I realized my first objective which is to be on the international job market, but now that I genuinely love software I realize that I didn't really make anything I can be proud of working as a consultant. And having worked on many things but not a lot on practically anything, it's getting hard to do something else.
I'm hoping for devranters insight on how I should proceed.2
Software engineering doesn't evolving the way you think of it.
There are no new big patterns. There are no new big concepts and ideas to bring that evolution to us. Rob Pike thinks that the concepts he used twenty years ago are the best possible way of implementing everything and he creates Golang.
The evolution of software engineering, and maybe the whole evolution as a concept is a tick-tock. Software engineering had its latest tick at nineties, when the concepts we call modern were developed. And the latest tock was the rise of the internet, and it given the single-computer-centered Von Neumann architecture really hard challenges. I mean ticks are theoretical inventions and patterns and ideas and etc, while tock is more of some practical, business-oriented implementations.
PHP is still in use. We have troubles with scaling and deployment. Banking systems still run old Java, Windows XP and even COBOL. We had persistence really, really long time ago, and now frontenders reinvent it and call it 'immutability'!
We had our tick many, many years ago. It's time for tock. With not only scientific but commercial use of things such as Clojure, CRDTs and maybe Rust lang, we are heading straight to our new big tock, which'll bring us new great problems to solve.
That's how any evolution goes.
So I'm finally doing the job I was hired to do 2 years ago, with the promise of working 1.5 years ago, and scheduled to work 1 year ago as the project slips about a 1.25 years.
The project is on it's 3.5th year of a 3 year plan and based on the architecture of the project, the project architect started a degree in software architecture 4 years ago. In Latin. When his first language was Japanese and his second was Indian English while this was a US company. And his entire degree was in Lisp, PHP, and html, this project is in C#, and his professional background is in Fortran.
This is a man who is no longer on the project, not allowed to contribute or talk to us about the project, and what little documentation he left us is in Swahili translated from Korean via Google translate from the second year Korean language major exchange student from Russia who got really into meth and Telenovelas.
It is every version of MV* without the M and with every definition of * including some he made up and some that have only been proven to exist via machine learning algorithm written in SQL statements.
This project represents an implementation of the presentation tier of an n-tier application, yet attempts to reimplement the other n-1 tiers in html5 and the dreams of children.
The new lead is a former engineer that couldn't begin coding until he figured out how to map all of his variables to his former cars and girlfriends inclusively and learned his management skills from the big book of micro managers and that one time everyone else in the office was sick but the intern. Who now has a girlfriend whom he works 200 feet from so he isn't 100% thinking with his largest head. At least from observation.
Yet, I still can't bring myself to go be with the whales/become an accountant.
Worst architecture I've seen?
The worst (working here) follow the academic pattern of trying to be perfect when the only measure of 'perfect' should be the user saying "Thank you" or one that no one knows about (the 'it just works' architectural pattern).
A senior developer with a masters degree in software engineering developed a class/object architecture for representing an Invoice in our system. Took almost 3 months to come up with ..
- Contained over 50 interfaces (IInvoice, IOrder, IProduct, etc. mostly just data bags)
- Abstract classes that implemented the interfaces
- Concrete classes that injected behavior via the abstract classes (constructors, Copy methods, converter functions, etc)
- Various data access (SQL server/WCF services) factories
During code reviews I kept saying this design was too complex and too brittle for the changes everyone knew were coming. The web team that would ultimately be using the framework had, at best, vague requirements. Because he had a masters degree, he knew best.
He was proud of nearly perfect academic design (almost 100% test code coverage, very nice class diagrams, lines and boxes, auto-generated documentation, etc), until the DBAs changed table relationships (1:1 turned into 1:M and M:M), field names, etc, and users changed business requirements (ex. concept of an invoice fee changed the total amount due calculation, which broke nearly everything).
That change caused a ripple affect that resulted in a major delay in the web site feature release.
By the time the developer fixed all the issues, the web team wrote their framework and hit the database directly (Dapper+simple DTOs) and his library was never used.1
TLDR: I need advice on reasonable salary expectations for sysadmin work in the rural United States.
I need some community advice. I’m the sysadmin at a small (35 employee) credit card processing company. I began as an intern and have now become their full time sysadmin/networking specialist. Since I was hired in January I have:
-migrated their 2007 Exchange server to Office 365
-Upgraded their ailing Windows server 2003 based architecture to 2012R2
-Licensed their unlicensed VMware ESXi servers (which they had already paid for license keys for!!!) and then upgraded them to 6.5 while preventing downtime on hosted VMs using tricky transfers and deployments (without vMotion!)
-Deployed a vCenter server to manage said ESXi servers easier
-Fixed a three month gap in their backups by implementing Veeam, and verifying its functionality
-Migrated a ‘no downtime’ fileserver to a new hypervisor host, implemented a ‘hot standby’ server as a backup kept up to date by the minute with DFS replication.
-Replaced failing hard drives in a RAID array underlying their one ‘business critical’ fileserver, which had no backups for 3 months at that time
-Reorganized Active Directory and Group Policy deployment from a nightmare spiderweb of OUs and duplicate policies
-Documented the entire old network and now the new one as I’ve been upgrading this
-Audited the developers AWS instances and removed redundant machines, optimized load balancing on front end Nginx servers, joined developer run Fedora workstations to the AD domain and implemented centralized syslog monitoring on them.
-Performed network scans and rewrote firewall exceptions to tighten security
There’s more, but you get the idea. I’ve now been tasked with taking point on an upcoming PCI audit which will be my first.
I’m being paid $16/hr US, with marginal health benefits. This is roughly $32,000 a year, before taxes.
I have two years previous work experience managing a third party Apple repair facility (SimplyMac) and every Apple certification for warranty repair and software troubleshooting. I have a two year degree in general sciences, with about 4 years of college credit (Two years of a physics education and two years of computer science after I switched focus) I’m actively pursuing a CCNA and MCSA server 2016 with exams paid for and scheduled.
I’m going into a salary negotiation in two months. What is a reasonable salary to request, from your perspective, for someone in my position?
Thanks in advance!6
Crazy deadlines> Director: "You need to design a new architecture that has failover, multi-AZ, automated deployments, CI/CD pipeline, automated builds/tests as well, for our new SaaS product. You have 3 days to complete it"
Me: "Ok cool. Do we have the new product developed? Can I have the spec docs of the new software, libs and packages required for the env?"
Product Lead: "No we dont have anything yet. The POC is on my local PC, but I dont know what packages are needed to run it"
Me: "So I cant design anything unless I have the minimum requirements to run the new software"
Director: "Just get it up and running in a live environment and we'll take it from there"
Me: *sigh*..this is going to be a big mistake
Has any of you worked with someone claiming he's a "Senior Software Engineer" but he does not know what he's doing? I'm not saying I'm a very good developer myself but I know how to differentiate a good code from a garbage code and architecture. It's really becoming a pain in the ass...5
My universities computers. They have really high end hardware but are bottlenecked by the shoddy network architecture and software being used by the IT admins. 🙄4
* Don't abandon projects
* Read a bit every day
At least one chaper of a normal
book and one volume of manga
that's written I a language I still have
* Learn to write better code, better software architecture
* Fly to japan
* Get a driver license
* Rise again in Osu!
* Tell everyone I use Arch Linux
* Get a job or start freelancing
* watch the animes I always wanted to watch
* Find more awesome musicians and genres to listen to
* Build a desktop pc
Maybe I'll comment some more if I can think of some1
Fundamental knowledge really allows you to see patterns behind common solutions and changing them if needed.
Fundamentals are the thing to step up from tutorials to creating your own software architecture and being able to implement anything, from micro controllers and low level performance algorithms to cloud stateless apps.
Even though universities provide you that knowledge, it’s not secret and you can pretty much educate yourself and be just as good if not better because of more modern technology available right from the start.
(I have a cs degree tho)2
Was wondering if there are any open source or free for non-commercial (would like to tinker with it / learn about it as my weekend adventure first) use projects (or approaches how to solve this) that I might not have heard of, related to what I'm about to describe....
Usually, when you got 'n' ammount of machines (be it VM's, baremetal or just a bunch of Raspberry Pis) the usual approach is to either:
1)Run them as independent machines, each serving it's own purpose;
2)Run them as independent machines but "tied together" with software configured in a cluster and featuring some sort of replication;
3)Pool them together into a "swarm"/resource pool and provision VM's across them, with resources spread across the machines;
But I here's where I started wondering: What if I had 3 identical desktop PCs with relatively decent computing power and resources allocated to each... stay with me here - I can already feel some of you writing this off completely or already preparing to answer how impossible this is... what if I was ready to sacrifice portion of the combined I/O or computing power so I could set these 3 computers up in some form of "grid computing" (2-3 machines working as one)? Are there any solutions out there that could take care of the related problems (I/O error/fault handling, fragmentation, CPU governing, timing, synchronization.... all the stuff that sane and normal people don't have to worry about because it's already been taken care of on the lowest levels of programming/computing)?
I'm also thinking about the average consumer grade x86/x86_64 and ARM architecture here, not some exclusive spacegrade architectures normally used in supercomputers.7
Being a trainee and a student over distance while taking part in developer conventions and meetups.
I also read books and tend my pet projects with which I try to dance on the bloody edge.
Also see this:
working on a 5 year old project which has
- absolutely no signs of design/software architecture thinking, let alone TDD or what not
- is being maintained by stuffing "ifs" into the source code until it works for a while
- when that breaks something, fix it with some more ifs4
Anyone in here have experience with UML in the real entreprise world?
As a student I've learned a lot about documentation and software architectural design, I've worked 3 different places and worked with customers that were developers and all of them seemed to not really do architecture and documentation that well. Personally I find having an overview/guideline for bigger project really helpful
how come you don't see better software documentation and UML out there?
Maybe I just haven't found the right place yet4
To me this is one of the most interesting topics. I always dream about creating the perfect programming class (not aimed at absolute beginners though, in the end there should be some usable software artifact), because I had to teach myself at least half of the skills I need everyday.
The goal of the class, which has at least to be a semester long, is to be able to create industry-ready software projects with a distributed architecture (i.e. client-server).
The important thing is to have a central theme over the whole class. Which means you should go through the software lifecycle at least once.
Let's say the class consists of 10 Units à ~3 hours (with breaks ofc) and takes place once a week, because that is the absolute minimum time to enable the students to do their homework.
1. Project setup, explanation of the whole toolchain. Init repositories, create SSH keys for github/bitbucket, git crash course (provide a cheat sheet).
Create a hello world web app with $framework. Run the web server, let the students poke around with it. Let them push their projects to their repositories.
The remainder of the lesson is for Q&A, technical problems and so on.
Homework: Read the docs of $framework. Do some commits, just alter the HTML & CSS a bit, give them your personal touch.
For the homework, provide a $chat channel/forum/mailing list or whatever for questions where not only the the teacher should help, but also the students help each other.
2. Setup of CI/Build automation. This is one of the hardest parts for the teacher/uni because the university must provide the necessary hardware for it, which costs money. But the students faces when they see that a push to master automatically triggers a build and deploys it to the right place where they can reach it from the web is priceless.
This is one recurring point over the whole course, as there will be more software artifacts beside the web app, which need to be added to the build process. I do not want to go deeper here, whether you use Jenkins, or Travis or whatev and Ansible or Puppet or whatev for automation. You probably have some docker container set up for this, because this is a very tedious task for initial setup, probably way out of proportion. But in the end there needs to be a running web service for every student which they can reach over a personal URL. Depending on the students interest on the topic it may be also better to setup this already before the first class starts and only introduce them to all the concepts in a theory block and do some more coding in the second half.
Homework: Use $framework to extend your web app. Make it a bit more user interactive with buttons, forms or the like. As we still have no backend here, you can output to alert or something.
3. Create a minimal backend with $backendFramework. Only to have something which speaks with the frontend so you can create API calls going back and forth. Also create a DB, relational or not. Discuss DB schema/model and answer student questions.
Homework: Create a form which gets transformed into JSON and sent to the backend, backend stores the user information in the DB and should also provide a query to view the entry.
4. Introduce mobile apps. As it would probably too much to introduce them both to iOS and Android, something like React Native (or whatever the most popular platform-agnostic framework is then) may come in handy. Do the same as with the minimal web app and add the build artifacts to CI. Also talk about getting software to the app/play store (a common question) and signing apps.
Homework: Use the view API call from the backend to show the data on the mobile. Play around with the mobile project to display it in a nice way.
5. Introduction to refactoring (yes, really), if we are really talking about JS here, mention things like typescript, flow, elm, reason and everything with types which compiles to JS. Types make it so much easier to refactor growing codebases and imho everybody should use it.
Flowtype would make it probably easier to get gradually introduced in the already existing codebase (and it plays nice with react native) but I want to be abstract here, so that is just a suggestion (and 100% typed languages such as ELM or Reason have so much nicer errors).
Also discuss other helpful tools like linters, formatters.
Homework: Introduce types to all your API calls and some important functions.
6. Introduction to (unit) tests. Similar as above.
Homework: Write a unit test for your form.
In software architecture definitely my own architecture in a programming project for uni
In building architecture the recently "modernised" Park Inn hotel in Bratislava 😅3
Teach students the importance of clean code/architecture and testing. Even if they dont yet understand the more complex topics such as architecture, they should understand why quality is important and that software is a craft more than a science. You cant just apply principle X and insert design pattern Y and profit++. You actually have to think and constantly improve. AND TEST.
Think I would probably also cover things like build automation and continuous delivery. These are now important things for junior devs to know about going into companies.
Had a course in software architecture. Our final project was to fully design a program with microservices. No explanation was given on technologies, tools or even the specific logic. We had a total of like 5 "lectures" and only one or two of them were about microservices. Also the guy didn't reply to emails and our questions remained largely unanswered.
We had 4 weeks for the job, and together with massive homework amounts and other projects we wrote a website in MVC which is, apparently, not designed in MSs. Also all the papers we had to provide with it (full design, UML diagrams and system analysis) were as clear as a fucking swamp. And the "lector" had a metric fuckton of issues with it when we presented it.
I fucking hate this course and this college.2
Yesterday we ( me and few other students who showed up to lecture ) had an interesting bonus mini test at course about software architecture. At the end our proffesor showed us this youtube video
And the task was ... write which architectural patterns and styles best describe men's brain and which women's.
Just wanted to share this creative exercise1
My boss has influenced me the most at work. He was the first person to introduce me to software development. Though I'm self-taught since, I still owe him my career. Now I teach support techs and junior devs how to code, as well as oversee the architecture of major systems. It's crazy to think now that my computer building hobby would turn into something like this, and it's all because someone convinced me to try what I thought would be terribly boring.
I like to say programming is the art of "creative logic". Much like architecture has an aesthetic to consider or cooking has well-defined procedures with greatly varying inputs and outputs, there has to be room for creativity, be it at the planning stage or during wild improvisation sessions.
Without that creative aspect, software development sounds dreary to me.
Where science meets art is where the magic happens.
If only the artists shared this view and actually took an interest in the technical side...1
I'm cross-compiling software I create for many years. Ignoring languages targeting some kind of VM, some additional efforts were always needed.
Go (as far as I can see, since 1.5) is doing this right and quite straightforward - select target and architecture, issue build command and you get native executable file. I'm happy ... B)7
I have already started the process of a side project by desiging the software, the architecture, the 3d model, ordered all the electronics of a pet 'smart' stable for my guinea pigs.
Which would automatically feed them and refill their water tanks silently but for me the point on playing around with dozens of sensors for like different water levels, water quality, hay, temperature, water quality (you get the point) ... Building a nice looking web interface or an App to control everything and get a live feed from different angles ( sounds a bit crazy altogether but it looked like a cool project )
I even started a instructable and had a github repo for sharing the source of the app/web interface and the whole micro service based server
I'm still at it and hopefully will start to build the ***ing wood and acrylic parts in the next month's but currently and for the last month's free time ist my archenemy
Keep you posted if you are interested 😀
Not really a rant but a question:
I just got accepted into a coding bootcamp. Have any of you been involved in one? How was it? What would you do to make it a better experience throughout? Any advice or suggestions?
It's full time, six months long and I start in October and I want to make sure I make the most of the experience and absorb as much as possible.
I just bought "Code Complete", "Design Patterns", and "The Pragmatic Programmer". Any advice on reading them?14
I keep seeing two philosophies bash heads at work.
1. "Hey, use these tools according to idioms and best practices for that tool. We worked hard getting this to work predictably, and it depends on you doing things consistently."
2. "Go pound sand, I want to do what makes sense for the project. To hell with your nazi conventions."
They're both right, and they're both idiots.
#1 is right because precedents exist for a reason. People did a bunch of stuff with their tools and got things to behave reasonably well, showing mastery over a stack. There could also be actual legal- and infosec- related reasons to following a protocol for changes, and ignoring those precedents invites disaster.
#1 is an idiot because there's a fine line between enforcing consistency and micromanagement. If the idioms they confuse with architecture are making it harder for other people to work, then they need to back off and let context, not ego guide the conversation. Good architecture should enable and encourage people to change the software in radical ways.
#2 is right because Context. Is. King. No project should shape around a tool. Tools should simply and objectively obey their users through good and bad use alike in service of the project. A culture that would oblige you to change for the sake of a tool is not an engineering-driven culture, it's a culture driven by self-anointed thought leaders who learned everything they know about software from Medium.com and Smashing Magazine. To enforce idioms and consistency blindly is turn the best practices found so far into the status quo that prevents change.
#2 is an idiot because there's a baby in the bathwater, which is some of that context they so treasure. By getting defensive with #1, they forget that the more they change, the more the team has to re-learn to adapt. The worst case is the cowboy that rewrites the implementation from scratch, causing QA to re-do ALL WORK and causing engineers to drop everything for one person's way of doing things.
The compromise is hard, but here's what I think it entails:
- Context really is king, but frame your changes in terms understood by how the team already thinks about the project; and
- Make those changes work independent of the tech stack on which they sit.
Doing this requires a solid understanding of, well, SOLID, and lots of patience dealing with ego and red tape.
This may seem obvious to you, but I'm so tired of watching the arguments at work about this degrade software quality and the end-user's experience.2
Question to all those who have worked with software architecture: What is your approach when implementing architecture and design into actual software?
I find it very hard to translate UML diagrams and architectural requirements into working code and I feel like there is quite a big "gap" between the two. How to you breach that gap and manage to maintain a clean and comprehensive architecture in your project folders?11
Shared home directory, different architectures, and fucking python pip.
Python allows a site-wide architecture-dependent directory, but PEP 370 presumes all the world's a vax. Or whatever machine you happen to be using at the time.
Did people look at autoconf's --exec-prefix and think, who would ever use that? So sick of software reanimating bad design decisions that were put to rest thirty years ago.2
Okay I've commented on multiple people's post already but I've decided to write a rant on it.
GOD I hate C++. For our software architecture minor we have to develop a game with only C++ and SDL and it's been one big freaking nightmare.Where almost every freaking language I've worked with has a proper way to add third party libraries most of them in C++ don't even fucking work after spending half a day. I know a lot of you guys love programming in C++, but it's been the language I've been struggling the most with in four years of university. Unbelievable. Fuck it's freaking pointers and all it's bullshit.5
Been lurking for a while and has been refreshing to see I'm not alone in some of 'interesting' issues I face day-to-day!
I am in a situation where I am a technical lead, but any architecture changes need approval by the MD, any software (free, obviously paid for is understandable!) needs signoff before installing, even if it's to see what it's all about! Essentially anything I should be responsible (no matter how minute) needs signoff before I can even attempt anything.
This is my first time that I am in a role of this level, but it seems like I am responsible for a lot but don't have much control over what I can do about it, is this normal? To me it just seems there is no trust in my judgement, which is not justified considering I'm only just being put into the role!6
1. Languages will evolve to make as short as possible in terms of lines of code. Shorter syntaxes all the way.
2. Each platform/part of architecture will have only 1-2 languages to code in. There will be convergence of languages. This is more to do with industry usage. Underground new languages will still continue to flourish.
3. Focus will be more on natural language. Both as research item for understanding humann languages better and possible movement of coding languages in the direction of natural languages. Natural syntax as much as possible.
4. Softwares will be self learning. Every interaction will result in the software to evolve as per your usage. That would mean the same software will behave differently for every user. This will be basis user's interaction.
5. Less physical interaction. More to do with what the user thinks. Intuitive.1
Is a masters in statistics worth it?
A bit of background:
I got my bachelor in actuarial math (statistics for insurance risk), then found machine learning and got a couple of gigs in software development and data engineering. I became my previous employers the go to guy for questions about data integrity and structure.
Now I am heading to a new job that specializes in ML for gambling. And while I love the math, I really see myself doing more software development and system architecture work (with some analysis). I already started this masters program, so I got less than a year to finish, but starting to feel like its a waste of my time, but also, I dont want to just quit it.1
Today we finally launched Keycloak to secure our spring cloud microservice architecture!
Great feeling after 4 month of tailoring open source software, bug fixes and so much pain 😄
Pick up and learn new tech like SignalR and Vue and many more while also focusing on design patterns and software architecture.
Get myself another promotion so I can afford more shit.
Learn rock climbing, get into boxing, and do a first aid course.
Yeah, I'm gonna be busy as hell this year.
A very long rant.. but I'm looking to share some experiences, maybe a different perspective.. huge changes at the company.
So my company is starting our microservices journey (we have a 359 retail websites at this moment)
First question was: What to build first?
The first thing we had to do was to decide what we wanted to build as our first microservice. We went looking for a microservice that can be used read only, consumers could easily implement without overhauling production software and is isolated from other processes.
We’ve ended up with building a catalog service as our first microservice. That catalog service provides consumers of the microservice information of our catalog and its most essential information about items in the catalog.
By starting with building the catalog service the team could focus on building the microservice without any time pressure. The initial functionalities of the catalog service were being created to replace existing functionality which were working fine.
Because we choose such an isolated functionality we were able to introduce the new catalog service into production step by step. Instead of replacing the search functionality of the webshops using a big-bang approach, we choose A/B split testing to measure our changes and gradually increase the load of the microservice.
Next step: Choosing a datastore
The search engine that was in production when we started this project was making user of Solr. Due to the use of Lucene it was performing very well as a search engine, but from engineering perspective it lacked some functionalities. It came short if you wanted to run it in a cluster environment, configuring it was hard and not user friendly and last but not least, development of Solr seemed to be grinded to a halt.
Elasticsearch started entering the scene as a competitor for Solr and brought interesting features. Still using Lucene, which we were happy with, it was build with clustering in mind and being provided out of the box. Managing Elasticsearch was easy since there are REST APIs for configuration and as a fallback there are YAML configurations available.
We decided to use Elasticsearch since it provides us the strengths and capabilities of Lucene with the added joy of easy configuration, clustering and a lively community driving the project.
Even bigger challenge? Which programming language will we use
What we’ve noticed during researching various languages is that almost all actions done by the catalog service will boil down to the following paradigm:
- Execute a HTTP call to fetch some JSON
- Transform JSON to a desired output
- Respond with the transformed JSON
Actions that easily can be done in a parallel and asynchronous manner and mainly consists out of transforming JSON from the source to a desired output. The programming language used for the catalog service should hold strong qualifications for those kind of actions.
Another thing to notice is that some functionalities that will be built using the catalog service will result into a high level of concurrent requests. For example the type-ahead functionality will trigger several requests to the catalog service per usage of a user.
To us, PHP and .NET at that time weren’t sufficient enough to us for building the catalog service based on the requirements we’ve set. Eventually we’ve decided to use Node.js which is better suited for the things we are looking for as described earlier. Node.js provides a non-blocking I/O model and being event driven helps us developing a high performance microservice.
The beauty of microservices and the isolation it provides, is that you can choose the best tool for that particular microservice. Not all microservices will be developed using Node.js and Elasticsearch. All kinds of combinations might arise and this is what makes the microservices architecture so flexible.
Even when Node.js or Elasticsearch turns out to be a bad choice for the catalog service it is relatively easy to switch that choice for magic ‘X’ or component ‘Z’. By focussing on creating a solid API the components that are driving that API don’t matter that much. It should do what you ask of it and when it is lacking you just replace it.
Many more headaches to come later this year ;)3
Yesterday at 1:20 am, my first docker image build worked.
- I develop my software (a service in a micro-service architecture) in symfony
- I push it to bitbucket, CircleCI pull the code
- builds a new docker image
- Runs phpunit test using docker exec (lxc-exec, their docker exec doesn't work)
- If the test are successful, CircleCI push the image to hub.docker.com.
Took me hours to fix all the bugs and issues with this process. I feel so proud, yet soooooooooo tired fuck sakes.
I'll publish the template for everything,
- the Dockerfile for the perfect symfony2 image IMO (and I'll create a public symfony2 image)
- The circle.yml I used etc.
Give back to the community.
I love my job.5
What architecture or design principle related books would you recommend? Something like the gang of four's book. I have read that. What other great books are there?5
I like the people I work with although they are very shit, I get paid a lot and I mostly enjoy the company but..
Our scrum implementation is incredibly fucked so much so that it is not even close to scrum but our scrum master doesn't know scrum and no one else cares so we do everything fucked.
Our prs are roughly 60 file hangers at a time, we only complete 50% of our work each sprint because the stories are so fucked up, we have no testers at all, team lead insists on creating sql table designs but doesn't understand normalisation so our tables often hold 3 or 4 sets of data types just jammed in.
Our software sits broken for months on end until someone notices (pre release), our architecture is garbage or practically non existent. Our front end apps that only I know the technology have approaches dictated by team lead that has no clue of the language or framework.
Our front end app is now about 50% tech debt because project management is so ineffectual and approaches are constantly changing. For instance we used to use view models for domain transfer objects... Now we use database entities, so there is no commonality between models but the system used to have shared features relying on that..sour roles and permissions are fucked since a role is a page regardless of the pages functionality so there is no ability to toggle features, but even though I know the design is fucked I still had to implement after hours of trying to convince team lead of it. Fast forward a few months and it's a huge cluster fuck to enforce.
We have no automated testing of any sort or manual testing in place.
I know of a few security vulnerabilities I can nuke our databases with but it got ignored.
Pr reviews are obviously a nightmare since they're so big.
I just tried to talk to scrum master again about story creation since any story involving front end ui as an aspect of it is crammed in under one pointed story as sub tasks, essentially throwing away any ability to calculate velocity. Been here a year now and the scrum master doesn't know what I mean by velocity... Her entire job is scrum master.
So anyway I am thinking about leaving because I like being a developer and it is slowly making me give up on doing things to a high standard and I have no chance of improving things, but at the same time the pay is great and I like the people.
A great article about scalable architecture without MAGIC and bullshit, finally!
What Software do you guys use for drawing (beautiful!) architecture diagrams (Layer Diagrams) for complex software?
I know the standard tools for UML Modelling (starUML, UMLet, even Visio/ppt etc.), but drawing components is not really sexy with them (especially, when it comes ro including logos,...)😃
Are there any good tutorials for using gimp/inkscape or even own tools for this?5
I just spent two hours in a workshop today, where the guy organizing the workshop was steamrolling everyone that we could not change anything in the software architecture.
Topic of the workshop: Architecture vision.
Well I'm back on this stupid project with this stupid Product Owner and I really hate this, it really demotivates me.
I was assigned to this project (data analytics) for like 6 months, working alone with this stupid PO that knows nothing about team management or project management.
The guy had a "methodology" where he established all task to be done daily and would not tell me what we have to do in the entire project but instead would tell me day by day all the tasks to be done in each day. This means that HE was the one making the time estimation which is plain wrong!.
Anyways, I talked to him and told him that I need to have a wide overview of the project in order to be able to make a good time estimation, and it kind of worked.
But the guy is a pain in the ass, calls me every 4 hours to "talk" about the project and texts me every hour to check "how are we doing?".
This project was killing me, I had no motivation to work on it, I hated every minute of it, I didn't like it at all to the point my boss (not him) talked to me and asked me what was wrong with me. I told him: This is not the project for me. He told me: Ok let's try to move you to another project.
After six months of agony, the project was stale (customer approval, paperwork, blah, blah) I was assigned to two other projects that I liked, more software architecture and development, not data analytics.
And last week my boss came back to me with "well, the project was approved so we need you back at it".
WHAT PART OF I'M NOT THE RIGHT GUY FOR THIS PROJECT DIDN'T YOU GET?
Now I'm again with this dude, calling me, texting me, sending me infinite emails, asking for minutely updates...
I really don't want to be working on this project.
So, I just finished a semester project on Software Project Management, and this was my self analysis and my conclusions, along with my analysis of my team. I think some of you will relate. Hope you enjoy the reading!
My main contributions to the project were helping reviewing the documents syntax, to make sure it was smooth and easy to read with a good english level, working on the systems architecture, coding the application, helping measuring problems within the project and putting people to work by distributing tasks.
I tried to help whenever I could with things that were not assigned to me, even though we are a team, everyone must do what they are assigned for, otherwise disorganization will be installed and everyone will derive from what they are doing to focus on a single thing or point and that would cost us time. I tried to avoid that to see if people could be capable enough of fixing the problems presented to them with the least help possible, making that an example for future use so they don’t always rely on others to get tasks done and to be more independent. Also, helping others figuring out what they were supposed to do helped the team wasting less human resources and consuming less time, which lead to some faster developments on specific tasks. Making the impossible possible was kinda of a weekly routine when the deadline approached because time was short and sometimes tasks were not finished when they should be, so, in a way I helped speedrunning documents to see if they were close to presentable to the client.
As the overall performance, there were highs and lows, where some members worked more than others and that is not fair for everyone because that kept happening again and again, so, my point of view performance wise is that we behaved wrongly when it came down to it. Some of us kept on pushing tasks to others and continuously criticizing over other people’s work without having a logical background to motivate those critiques neither providing solutions to the problems encountered. Well, that couldn’t end well, and it didn’t. It brought our performance down and ended up causing a lot of damage on the project itself.
I felt fucked when I look incompetent coz I took a long time to finish small task. Asshole a guy so called software architecture wrote front end that jump from function A to Z and couldn't find a event handler after an hour jumping function a till z!! U're drunk dude! Why things can be so complicated?
The other day i made a rant saying that having an index.js as entry point is misleading, in my opinion. it could have been implemented in so many and better ways but that's what we have because that's what the nodejs creator decided to do.
My previous rant wasn't well seen because everybody was saying that index js it's actually a good thing.
So I started to do some research because I've an important experience in software architecture and i was trying to understand why people couldn't get my point. Fortunately i found that even the creator of node itself regrets his choice to use a file as an entry point for modules and imports. You can have a look at the video, that is also really interesting, here: https://youtu.be/M3BM9TB-8yA3
You dipshits! Yet again...
- use contract X from team WeJustFuckUp
- WeJustFuckUps tell me I "used the contract with the wrong semantics"
- What the fuck how is that possible!? Explain to the fuck ups that if it's the wrong semantics then it shouldn't be documented. Ask what right semantics is... They do not support their own correct semantics...
Fuck you! Just say you fucked up and come to me with a new contract!
Two weeks pass, new contract breaks half the functionality... And they ask me: "is it a problem? Can't you use it as is?"
Now listen here you pile of elephant dung, you have an unresponsive system with an unscalabe architecture... You have twisted contracts and you come to me to fix them!? I have more to do then to babysit your assess!
I am so tired of your bulshit... You are a bunch of prairie dogs hitting keyboards and call yourself developers!? My dog is a better developer, he at least does not break he's own software and when he takes a massive dump he owns it...
I am this close to making a request of changing your work computers to an abacus! It's all you can handle...
Fuck off! You are waste of resources and your parents should be spanked!!
Trying to become a software developer by teaching myself with tutorials, books, etc. and then realizing that I need an idea for a project to practice my skills. I don't have a good grasp of software architecture and the tutorials on the webs on this topic suck.
Just because the language/feamework/technology is trendy doesn't mean it is suitable for you. There is no silver bullet in software engineering.
I think it was a big mistake to use microservice architecture for our project.