Category: Work

  • Apple is winning, MicroSlop is done for!

    Apple is winning, MicroSlop is done for!

    I’ve had a long-term dislike for Apple (I mean they did threaten legal action against me on 6 different occasions…), but they sure have their shit together compared to everyone else these days. MicroSlop can’t make anything usable at this point. With the exception of Office, I see no reason for them to even exist.

    Nightjob bought me an 18″ Alienware Area-51 with an nvidia 5090 – it’s a pretty nice laptop, but windows constantly has these microfreezes where the keyboard and mouse (even bluetooth) stop responding for 1 – 5 seconds. Any videos playing continue working fine. It has 3 hard drives in it (16TB total!) When I boot into Linux (any distro) there are no freezes and it is blazing fast, so I know it isn’t a hardware issue. Although in Linux I cannot control the screen brightness at all and the audio is fucked after each reboot. So, despite the microfeezing it spends most of its time in winblowz. I’ve reinstalled windows 3 times with and without all the dell shit – doesn’t seem to make any difference so I suspect the issue is with windows itself. Speaking of dell shit, their stupid fucking supportassist app frequently stops working and just has a big ‘ole spinning wheel. How hard is it to make shit that works these days? Must be more AI vibe coded shit or something…

    Dayjob bought me a 16″ MacBook Pro M5 with 128GB of RAM, but only a single 2TB drive :'( – keep in mind I’m not an Apple fan (see first paragraph) – like at all. That said, this this is fucking awesome! Everything else seems like a pile of shit after using this! The screen is amazing, the keyboard is delightful, MacOS Just-Fucking-Works-Without-All-The-Bullshit (TM) and there is no bastardized WSL – I have native terminal, real UNIX under the hood, and shit just works without having to dick around with things.

    Then I saw Apple released a new MacBook Neo in the $599 to $699 price point (depending on options) – I think MicroSlop is completely done for now. I don’t see any of the PC manufacturers being able to compete at that price point with a stable OS. Sure, there’s Linux still, but with the exception of maybe Framework, I don’t really see any serious competition here. The big names (Dell, Lenovo, etc.) that have laptops in the sub-$1K price range with Linux on them are essentially disposable garbage.

  • Software Engineering Development Cycle

    Software Engineering Development Cycle

    A typical software engineering development cycle follows these key phases:

    Planning and Requirements Gathering

    The team identifies what needs to be built by gathering requirements from stakeholders, users, and business analysts. This includes defining functional requirements (what the software should do) and non-functional requirements (performance, security, usability constraints). The scope is documented and priorities are established.

    Design and Architecture

    Engineers create the technical blueprint for the solution. This involves designing the system architecture, choosing technologies and frameworks, creating database schemas, defining APIs, and planning the overall structure. User interface mockups and user experience flows are often created during this phase.

    Implementation and Coding

    Developers write the actual code based on the design specifications. This is typically done in iterations or sprints, with different team members working on different components or features. Code is written following established coding standards and best practices for the chosen programming languages and frameworks.

    Testing and Quality Assurance

    The software undergoes various types of testing including unit tests (testing individual components), integration tests (testing how components work together), system tests (testing the complete system), and user acceptance testing. Bugs are identified, documented, and fixed. Code reviews are often conducted to ensure quality and maintainability.

    Deployment and Release

    The tested software is deployed to production environments where end users can access it. This involves setting up servers, configuring databases, and ensuring all necessary infrastructure is in place. Modern teams often use automated deployment pipelines to streamline this process.

    Maintenance and Support

    After release, the team monitors the software for issues, provides user support, and implements bug fixes. This phase also includes adding new features, performance optimizations, and security updates based on user feedback and changing requirements.

    Modern Methodologies

    Agile Development

    Rather than following these phases sequentially, Agile methodology breaks development into short iterations called sprints, typically lasting 1-4 weeks. Each sprint includes planning, design, coding, testing, and review activities. Key principles include delivering working software frequently, embracing changing requirements, and maintaining close collaboration between developers and stakeholders. Popular Agile frameworks include Scrum (with roles like Product Owner and Scrum Master) and Kanban (focusing on continuous flow and visual workflow management). Daily standups, sprint planning, and retrospectives help teams stay aligned and continuously improve their processes.

    DevOps Culture

    DevOps bridges the gap between development and operations teams, emphasizing collaboration, automation, and continuous delivery. Key practices include continuous integration (automatically testing code changes), continuous deployment (automatically releasing tested code), infrastructure as code (managing servers through configuration files), and comprehensive monitoring. DevOps teams use tools like Jenkins, Docker, Kubernetes, and cloud platforms to automate building, testing, and deploying software. This approach enables faster, more reliable releases with reduced manual errors and shorter feedback loops between development and production environments.

    These modern approaches transform the traditional linear development cycle into a more flexible, responsive process where teams can adapt quickly to user feedback and changing business needs while maintaining high quality and reliability standards.

    The Cost of Compromised Development Practices

    While the methodologies described above represent industry best practices and theoretical ideals, real-world software development often operates under significant constraints that can compromise adherence to these established processes. Time pressures, resource limitations, and competing organizational priorities frequently force development teams to make difficult tradeoffs between methodological rigor and delivery timelines.

    When proper development cycles are abbreviated or bypassed due to scheduling constraints, several predictable outcomes emerge. Requirements gathering may be reduced to informal communication channels, design phases may be truncated or eliminated in favor of emergent approaches, and testing activities may be deferred or minimized. Code review processes may become perfunctory, documentation may be postponed indefinitely, and deployment procedures may lack the formalization and automation that best practices prescribe.

    The Economics of Defect Remediation

    Research in software engineering economics has consistently demonstrated that shortcuts intended to accelerate delivery often produce counterintuitive results. Barry Boehm’s seminal work in Software Engineering Economics (1981) established that the cost of defect remediation increases exponentially as issues progress through the development lifecycle. His research, conducted on projects at TRW and IBM during the 1970s, revealed that defects discovered in production environments could cost 50-200 times more to fix than those identified during requirements or design phases (Boehm, 1981). While subsequent studies have suggested more modest ratios—particularly for smaller, non-critical systems where the cost multiplier may be closer to 5:1 (Boehm & Basili, 2001)—the fundamental principle remains: early detection and correction of defects is economically superior to deferred remediation.

    This exponential cost curve occurs because late-stage defects require disproportionate effort to diagnose, fix, test, and deploy compared to early-stage corrections. Production bugs necessitate emergency response protocols, may require rollback procedures, demand extensive regression testing, and often impact user trust and satisfaction in ways that early-phase corrections do not.

    Technical Debt and Its Compounding Effects

    The concept of technical debt—originally articulated by Ward Cunningham at the 1992 OOPSLA conference—provides a useful framework for understanding these dynamics (Cunningham, 1992). Cunningham introduced the metaphor while developing financial software at WyCash, using it to explain to stakeholders why refactoring was necessary: “Shipping first time code is like going into debt. A little debt speeds development so long as it is paid back promptly with a rewrite…The danger occurs when the debt is not repaid. Every minute spent on not-quite-right code counts as interest on that debt” (Cunningham, 1992).

    Technical debt accumulates when expedient solutions are chosen over sound engineering practices, creating future obligations that must eventually be addressed. Like financial debt, technical debt accrues compound interest: each suboptimal decision constrains future development options and increases the complexity of subsequent modifications (Kruchten, Nord, & Ozkaya, 2012). Organizations may find themselves in a cycle where teams spend disproportionate effort addressing the consequences of previous rushed implementations rather than delivering new functionality.

    Schedule Compression and Development Outcomes

    Empirical research on schedule compression reveals complex, often counterintuitive relationships between timeline pressure and development outcomes. A study by Nan and Harter (2009) examining projects at a major technology firm found U-shaped relationships between schedule pressure and both development cycle time and effort. Moderate schedule compression could yield efficiency gains, but excessive compression resulted in increased total effort and extended timelines—the opposite of the intended effect. Their research, which controlled for software process maturity, project size, complexity, and quality metrics, demonstrated that schedule pressure beyond certain thresholds produces diminishing and eventually negative returns.

    This nonlinear impact suggests that there exists an optimal range of schedule pressure that can motivate teams without triggering the quality degradation and rework cycles that ultimately extend development time. However, identifying this optimal range requires careful calibration to specific project contexts, team capabilities, and organizational factors.

    The Visibility Problem

    A critical challenge in software project management lies in the visibility of these tradeoffs. Decision-makers may observe symptoms such as schedule delays, quality issues, and user dissatisfaction without recognizing the causal relationship between compressed timelines and degraded outcomes (Abdel-Hamid & Madnick, 1991). This disconnect can perpetuate a cycle where organizational pressure for rapid delivery undermines the very practices that enable sustainable, high-quality software development.

    The literature on software process improvement emphasizes that approximately 80 percent of avoidable rework stems from 20 percent of defects, with hastily specified requirements representing a major source of this rework (Boehm & Basili, 2001). Yet the connection between compressed requirements phases and downstream quality problems often remains obscured by temporal and organizational distance between cause and effect.

    Implications for Practice and Research

    Understanding these tensions between idealized methodologies and practical constraints remains essential for both practitioners and researchers in software engineering. The gap between theory and practice highlights opportunities for further research into adaptive methodologies, risk management strategies, and organizational factors that influence development process adherence. Future work should explore how teams can better identify sustainable compression thresholds, implement early warning systems for technical debt accumulation, and communicate the long-term cost implications of schedule decisions to stakeholders.


    References

    Abdel-Hamid, T., & Madnick, S. E. (1991). Software Project Dynamics: An Integrated Approach. Prentice Hall.

    Boehm, B. W. (1981). Software Engineering Economics. Prentice Hall.

    Boehm, B. W., & Basili, V. R. (2001). Software defect reduction top 10 list. Computer, 34(1), 135-137.

    Cunningham, W. (1992). The WyCash portfolio management system. OOPSLA ’92 Experience Report. ACM.

    Kruchten, P., Nord, R. L., & Ozkaya, I. (2012). Technical debt: From metaphor to theory and practice. IEEE Software, 29(6), 18-21.

    Nan, N., & Harter, D. E. (2009). Impact of budget and schedule pressure on software development cycle time and effort. IEEE Transactions on Software Engineering, 35(5), 624-637.

  • Always Tired?

    Always Tired?

    I started a new job back in July and it is a job that I enjoy. I get to wear several hats. My official job titles are Principal DevSecOps Engineer and Head of Cybersecurity. That’s my bruce wayne job. Also back in July I was recruited to work for a gov contractor. This is my batman job. I’m the only non-military, non-intelligence guy on the team. It’s kind of funny to listen to them talk during meetings. Heavy military and intel lingo at times. For various reasons I can’t share the name of the company, but I’ve come to refer to them as the Secret Squirrel Society and I work on the Secret Squirrel Project. I’m sure some of them would be pissed if they knew that, but I think it’s funny and mean it in a fun-spirited way, not in a negative way. anyway.. I can’t say what the project is or involves. I went from junior team member assisting the lead dev as a favor to one of the founders to being the led dev in about 2 months. I’ve rewritten the backend api from scratch and I wrote a custom ui (actually I’ve written 4 completely separate ui’s from scratch – the other 3 are abandoned now in favor of my current one.) Now I have a tiny glimpse into understanding why bruce wayne stopped being batman after working two full-time jobs – not to mention all the damage he did to his body being a superhero!

    *cough*unrelated*cough* go watch the movies eagle eye (2008) and dark knight (2008) if you haven’t seen them already. Some pretty cool things in those movies involving cameras and AI. Just say’n…