Category: Appian

  • Staff Software Engineer (Java)

    Responsibilities

    Technical Leadership & Architecture

    • Lead the architecture, design, and implementation of complex backend systems and microservices
    • Drive technical decision-making and establish engineering best practices across the team
    • Evaluate and recommend new technologies and frameworks to meet product roadmap and platform goals
    • Conduct and lead design reviews and architecture discussions with cross-functional stakeholders

    Development & Delivery

    • Hands-on development of core backend services using Java and the Spring ecosystem
    • Build and maintain microservices architecture with emphasis on high availability and performance
    • Design and implement robust data integration and ETL pipelines
    • Work with technical project managers and product teams to break down features into detailed user stories and development tasks
    • Provide technical estimates and contribute to release planning and sprint commitments
    • Integrate services with external systems, manage version control, and ensure smooth deployments

    Quality & Best Practices

    • Champion engineering excellence through code reviews, design reviews, and knowledge sharing
    • Advocate for and implement DevSecOps best practices using CI/CD pipelines
    • Ensure code quality, security, and performance standards are met across all deliverables
    • Drive automation testing strategies and implementation
    • Monitor and improve engineering metrics (DORA metrics, code quality, etc.)

    Qualifications

    • Bachelor’s degree in Computer Science, Software Engineering, or related field
    • 5+ years of backend expertise in Java with deep knowledge of:
    • Spring ecosystem (Spring Boot, Spring Data, Spring Cloud)
    • Microservices architecture and design patterns
    • RESTful API design and implementation
    • Distributed systems, asynchronous and parallel processing
    • Message queues and event-driven architectures (Kafka, RabbitMQ)
    • Experience with the following is preferred but not required:
    • Integrating services with Identity & Access Management systems, OIDC providers, security token services
    • Setting up ETL pipelines for pulling data from disparate systems
    • Experience with GraphQL platforms (Hasura, Apollo)
    • Experience with handling on-call incidents

    Technical Skills

    • Strong foundation in computer science fundamentals: data structures, algorithms, and design patterns
    • Solid understanding of Java (17+), Spring ecosystem, JPA/Hibernate and ORM patterns
    • Proficiency with database technologies:
    • Relational databases (PostgreSQL)
    • Caching solutions (Redis)
    • Experience with containerization and orchestration (Docker, Kubernetes)
    • Experience designing and implementing data pipelines and ETL processes
    • Knowledge of API gateway patterns and service mesh architectures (Apigee, Istio, etc.)
    • Experience with cloud platforms (AWS, Azure, GCP)

    DevOps & Quality

    • Automated testing experience (JUnit, TestNG, integration testing)
    • Strong DevSecOps mindset with experience in:
    • CI/CD pipelines (GitHub Actions, Jenkins, GitLab CI, etc.)
    • Infrastructure as Code (Terraform)
    • Monitoring and observability (Prometheus, Grafana)
    • Experience with security best practices:
    • Static code analysis tools (SonarQube, Apiiro)
    • Dependency scanning (NexusIQ)
    • DAST scans and penetration testing concepts
    • Secure coding practices and OWASP guidelines
  • QA Test Engineer

    We are looking for a skilled and detail-oriented QA Test Engineer to join an Agile product team. The ideal candidate will take ownership of end-to-end quality assurance activities across the full SDLC, ensuring high-quality delivery in a complex distributed system environment.

    Key responsibilities

    • Work as an embedded QA engineer within Agile/Scrum teams, owning end-to-end testing for team applications
    • Participate in requirements analysis, story refinement, sprint planning, and design discussions
    • Design, execute, and maintain test cases and scenarios based on business requirements and acceptance criteria
    • Perform functional, integration, regression, exploratory, and end-to-end testing across multiple systems
    • Validate integrations and backend services using REST API testing tools (e.g. Postman)
    • Create and maintain test data across multiple environments
    • Document test results with evidence, logs, screenshots, and traceability
    • Conduct root cause analysis and work with developers to resolve defects efficiently
    • Manage defects through full lifecycle: logging, tracking, retesting, and closure
    • Support release validation and post-production verification
    • Collaborate with cross-functional teams, business users, and external vendors
    • Communicate testing progress, risks, blockers, and quality status to stakeholders
    • Contribute to automation testing initiatives using Playwright where applicable
    • Support continuous improvement of QA processes, standards, and best practices

    Mandatory skills

    • Proven experience as a QA Test Engineer, QA Analyst, or Software Test Engineer in Agile/Scrum
    • Strong hands-on manual testing and exploratory testing experience
    • Experience in test case design, execution, and defect management
    • Strong understanding of end-to-end business processes and system integration testing
    • Hands-on REST API testing using Postman or similar tools
    • Experience testing web-based applications and backend services
    • Good understanding of SDLC, STLC, and Agile methodologies
    • Strong analytical, troubleshooting, and root cause analysis skills
    • Jira experience; Xray exposure is an advantage
    • Ability to work independently with strong ownership and accountability
    • Excellent communication and stakeholder management skills

    Preferred skills

    • Experience in Banking, FinTech, or Investment Management domains
    • Exposure to Playwright or other automation frameworks
    • Knowledge of CI/CD pipelines and Git
    • Experience in DevOps environments
    • ISTQB Foundation Certification
    • Agile or Scrum certifications

    Soft skills

    • Self-driven and proactive mindset
    • Strong attention to detail and organisational skills
    • Team player with a collaborative attitude
    • Strong sense of ownership and responsibility
    • Ability to manage changing priorities effectively
    • Reliable, structured, and quality-focused approach
  • How to Answer Interview Questions with Confidence Using CAR and KSA Frameworks

    Most candidates fail interviews for one simple reason:

    They know the answer in their head, but they deliver it in a messy, unstructured way.

    One minute they’re talking about the problem, then suddenly jumping into technical details, then ending without explaining the actual result. Interviewers are left trying to connect the dots themselves.

    This is where structured frameworks become incredibly powerful.

    Two of the best frameworks I’ve used for technical and corporate interviews are:

    • CAR Framework
    • KSA Framework

    These frameworks help you:

    • Stay calm during interviews
    • Structure answers clearly
    • Sound more professional
    • Demonstrate impact confidently
    • Avoid rambling

    Whether you’re interviewing for software engineering, DevOps, Appian, QA, SRE, or data roles, these frameworks work surprisingly well.


    The CAR Framework

    The CAR framework is ideal for behavioral and experience-based questions.

    It stands for:

    LetterMeaning
    CContext
    AAction
    RResult

    The beauty of CAR is that it forces your answer into a logical narrative.


    1. Context

    Start by explaining the situation briefly.

    You are setting the stage for the interviewer.

    Good context answers:

    • What was the challenge?
    • What system/project/team was involved?
    • Why was it important?

    Keep this part short.

    Weak Example

    “So we had this issue and people were discussing things and there were many problems…”

    Strong Example

    “At GovTech, one of our citizen-facing workflow systems began experiencing slow response times during peak submission periods.”

    Clear. Specific. Professional.


    2. Action

    This is the most important section.

    Explain:

    • What YOU did
    • Your technical contribution
    • Your decision-making process
    • Tools or technologies used

    Avoid overusing “we.”

    Interviewers want to know your contribution.

    Weak Example

    “We optimized the system.”

    Strong Example

    “I analyzed backend logs, optimized database queries, redesigned several Appian process flows, and implemented asynchronous processing for high-volume tasks.”

    Now the interviewer can actually see your capability.


    3. Result

    Most candidates forget this part entirely.

    Never end an answer without measurable impact.

    Examples:

    • Performance improvements
    • Cost savings
    • Reduced incidents
    • Faster deployments
    • Better user experience
    • Increased scalability

    Strong Result Statements

    • “Improved system performance by 25%”
    • “Reduced deployment time from 2 hours to 20 minutes”
    • “Handled over 50k monthly transactions reliably”

    Numbers make your story believable.


    Full CAR Example

    Interview Question

    “Tell me about a time you solved a production issue.”

    Answer

    “At GovTech, one of our workflow systems experienced intermittent failures during peak traffic periods. I investigated application logs and traced the issue to inefficient database calls and thread contention within several backend services. I optimized the queries, adjusted thread pool configurations, and implemented monitoring alerts to detect recurrence early. As a result, system stability improved significantly and production incidents during peak periods were reduced.”

    Notice how:

    • The answer is structured
    • It flows naturally
    • It demonstrates ownership
    • It ends with impact

    That’s why CAR works.


    The KSA Framework

    KSA stands for:

    LetterMeaning
    KKnowledge
    SSkills
    AAttitude

    This framework works best for:

    • Technical competency questions
    • “Why should we hire you?”
    • Role-fit discussions
    • Leadership and collaboration questions

    1. Knowledge

    This is what you understand conceptually.

    Examples:

    • Cloud architecture
    • CI/CD practices
    • Networking fundamentals
    • BPM systems
    • Distributed systems
    • Data modeling

    Example

    “I have strong knowledge of backend architecture, REST APIs, CI/CD pipelines, and cloud migration practices.”


    2. Skills

    This is what you can actually do.

    Examples:

    • Build systems
    • Troubleshoot production issues
    • Automate deployments
    • Write code
    • Create dashboards
    • Develop APIs

    Example

    “I’ve built scalable enterprise systems using Java, React, Appian, GitLab CI/CD, and Azure AD integrations.”


    3. Attitude

    This is the most underrated section.

    Companies hire people they can trust under pressure.

    Attitude includes:

    • Ownership
    • Collaboration
    • Communication
    • Learning mindset
    • Reliability

    Example

    “I’m highly hands-on, proactive during incidents, and comfortable collaborating across engineering and business teams.”


    Full KSA Example

    Interview Question

    “Why are you suitable for this role?”

    Answer

    “I believe I’m a strong fit because I have solid knowledge of backend systems, cloud infrastructure, and enterprise workflow platforms. I’ve built and maintained scalable applications using Appian, Java, React, and GitLab CI/CD pipelines. In terms of attitude, I’m highly collaborative, adaptable, and comfortable taking ownership of both delivery and production support responsibilities.”

    Clean. Professional. Structured.


    Combining CAR + KSA

    The best interview answers often combine both frameworks.

    Example Question

    “Describe your troubleshooting experience.”

    Combined Answer

    “I have strong knowledge of distributed systems, application monitoring, and incident management practices. In my previous role, I regularly handled production troubleshooting across Appian applications and cloud infrastructure. One incident involved intermittent workflow failures after a deployment. I traced the issue to a database connection pool misconfiguration, coordinated fixes with the infrastructure team, and restored service stability within the same day. After implementing monitoring improvements, similar incidents were significantly reduced.”

    This approach:

    • Shows technical depth
    • Demonstrates experience
    • Proves real-world execution

    Why These Frameworks Work So Well

    Most interviewers are evaluating three things:

    1. Can you communicate clearly?
    2. Can you solve problems?
    3. Can you deliver impact?

    CAR and KSA naturally answer all three.

    They also help reduce nervousness because you already know the structure before answering.

    Instead of improvising everything, your brain simply fills in the framework.


    Common Interview Mistakes These Frameworks Prevent

    1. Rambling

    Without structure, candidates talk too much and lose focus.

    2. Missing Results

    Many people explain what they did but never explain why it mattered.

    3. Weak Ownership

    Saying “we” repeatedly makes your contribution unclear.

    4. Sounding Unprepared

    Structured answers automatically sound more professional.


    Practical Tips for Better Interview Answers

    Keep answers concise

    Aim for:

    • 1 to 2 minutes per answer
    • Clear beginning, middle, and end

    Use metrics whenever possible

    Examples:

    • 25% performance improvement
    • 50k+ monthly transactions
    • 40% faster deployment pipeline
    • Reduced incidents by half

    Metrics make you memorable.


    Focus on YOUR contribution

    Instead of:

    “The team built…”

    Say:

    “I designed…”
    “I implemented…”
    “I led…”


    Practice out loud

    Reading answers silently is not enough.

    The real challenge is verbal delivery.

    Practice:

    • Speaking slowly
    • Structuring naturally
    • Avoiding filler words
    • Maintaining confidence

    Final Thoughts

    Technical knowledge alone is rarely enough to succeed in interviews.

    The candidates who stand out are usually the ones who:

    • Communicate clearly
    • Structure answers well
    • Demonstrate ownership
    • Show measurable impact

    Frameworks like CAR and KSA won’t magically get you hired.

    But they dramatically improve how interviewers perceive your experience and confidence.

    And in competitive tech interviews, that difference matters more than most people realize.

  • 🕵️‍♂️ Wireshark: Seeing the Internet Beneath the Surface

    Most people use the internet every day without ever seeing what’s actually happening under the hood. We click links, send messages, stream videos—and everything just works.

    But beneath that simplicity lies a constant flow of packets: tiny chunks of data moving across networks at incredible speed.

    If you’ve ever wanted to see that invisible layer, Wireshark is where things get interesting.


    What is Wireshark?

    Wireshark is a network protocol analyzer—a tool that lets you capture and inspect the data traveling across a network in real time.

    Think of it as:

    • A microscope for network traffic
    • A debugger for connectivity issues
    • A truth-teller when systems behave strangely

    It shows you exactly what data is being sent, where it’s going, and how it’s structured.


    Why Wireshark Matters

    At first glance, Wireshark can feel overwhelming. Thousands of packets, cryptic protocols, endless columns.

    But once you understand it, it becomes incredibly powerful.

    🔍 Troubleshooting Network Issues

    When something breaks, logs don’t always tell the full story. Wireshark shows:

    • Failed connections
    • Retransmissions
    • DNS issues
    • Latency bottlenecks

    Instead of guessing, you see the problem.


    🔐 Security Analysis

    Wireshark is widely used in cybersecurity to:

    • Detect suspicious traffic
    • Identify data leaks
    • Analyze malware communication
    • Inspect unencrypted credentials

    It’s not a hacking tool—but it’s often used to understand how attacks work.


    📡 Learning How the Internet Works

    If you want to truly understand networking, there’s no better teacher.

    You can observe:

    • TCP handshakes
    • HTTP requests and responses
    • TLS encryption flows
    • DNS lookups

    It turns abstract concepts into something tangible.


    A Simple Example

    Let’s say you open a website.

    Behind the scenes, Wireshark will show something like:

    1. Your computer sends a DNS request to resolve the domain
    2. A TCP handshake is established (SYN → SYN-ACK → ACK)
    3. An HTTP or HTTPS request is sent
    4. The server responds with data packets
    5. Your browser reconstructs everything into a webpage

    What feels instant is actually a series of precise, structured steps.


    Key Features That Make Wireshark Powerful

    📊 Deep Packet Inspection

    Wireshark doesn’t just capture packets—it decodes them into human-readable formats.


    🔎 Powerful Filtering

    Instead of drowning in data, you can filter traffic like:

    http
    dns
    ip.addr == 192.168.1.1
    tcp.port == 443
    

    This turns chaos into clarity.


    ⏱️ Real-Time Capture

    You can watch traffic as it happens, which is incredibly useful for debugging live systems.


    The Learning Curve (and Why It’s Worth It)

    Let’s be honest—Wireshark is not beginner-friendly.

    The interface can feel intimidating:

    • Thousands of packets scrolling
    • Protocols you’ve never heard of
    • Hex data everywhere

    But once you learn:

    • Basic networking (TCP/IP, DNS, HTTP)
    • How to filter traffic
    • How to follow streams

    …it becomes one of the most valuable tools in your toolkit.


    Who Should Learn Wireshark?

    • Site Reliability Engineers (SREs)
    • Backend engineers
    • Security analysts
    • DevOps engineers
    • Curious developers

    If you work with systems, networks, or APIs—this tool will give you an edge.


    Final Thoughts

    Wireshark changes how you see the internet.

    It takes something invisible and makes it observable.
    It turns guesswork into evidence.
    It forces you to understand how things actually work.

    And once you’ve used it, you’ll never look at a “simple” web request the same way again.


  • Binary Gap

    A binary gap within a positive integer N is any maximal sequence of consecutive zeros that is surrounded by ones at both ends in the binary representation of N. For example, number 9 has binary representation 1001 content_copy and contains a binary gap of length 2. The number 529 has binary representation 1000010001 content_copy and contains two binary gaps: one of length 4 and one of length 3. The number 20 has binary representation 10100 content_copy and contains one binary gap of length 1. The number 15 has binary representation 1111 content_copy and has no binary gaps. The number 32 has binary representation 100000 content_copy and has no binary gaps. Write a function: function solution(N); content_copy that, given a positive integer N, returns the length of its longest binary gap. The function should return 0 if N doesn’t contain a binary gap. For example, given N = 1041 the function should return 5, because N has binary representation 10000010001 content_copy and so its longest binary gap is of length 5. Given N = 32 the function should return 0, because N has binary representation ‘100000’ and thus no binary gaps. Write an efficient algorithm for the following assumptions: N is an integer within the range [1..2,147,483,647].

    // you can write to stdout for debugging purposes, e.g.
    // console.log('this is a debug message');
    
    function solution(N) {
      const binary = N.toString(2);
      let maxGap = 0;
      let currentGap = 0;
      let counting = false;
    
      for (let char of binary) {
        if (char === "1") {
          if (counting) {
            maxGap = Math.max(maxGap, currentGap);
          }
          counting = true;
          currentGap = 0;
        } else if (counting) {
          currentGap++;
        }
      }
    
      return maxGap;
    }
    

  • Why This Fibonacci Code Is Smarter Than It Looks

    At first glance, a Fibonacci function seems like a simple coding exercise. You take a number n, and return the nth number in the Fibonacci sequence:

    0, 1, 1, 2, 3, 5, 8, 13, 21…

    Each number is the sum of the two before it.

    Many beginners write Fibonacci using recursion because it feels natural. But while recursive code looks elegant, it can hide a major performance problem.

    The Classic Recursive Version

    var yourself = {
        fibonacci : function(n) {
            if (n === 0) {
                return 0;
            } else if (n === 1) {
                return 1;
            } else {
                return this.fibonacci(n - 1) +
                    this.fibonacci(n - 2);
            }
        }
    };
    

    This works correctly, but it becomes painfully slow as n grows.

    Why?

    Because the function keeps solving the same subproblems repeatedly.

    For example, to calculate fibonacci(6), it must calculate:

    • fibonacci(5)
    • fibonacci(4)

    But inside fibonacci(5), it calculates fibonacci(4) again.

    Then deeper down, it recalculates fibonacci(3), fibonacci(2), and so on many times.

    The result is a lot of wasted work.

    A Better Approach: Memoization

    Memoization is a technique where you store previously calculated results so they can be reused instantly.

    Instead of recalculating fibonacci(4) ten times, compute it once and save it.

    Here’s the improved version:

    var yourself = {
        cache: {},
    
        fibonacci: function(n) {
            if (n === 0) return 0;
            if (n === 1) return 1;
    
            if (this.cache[n] !== undefined) {
                return this.cache[n];
            }
    
            this.cache[n] =
                this.fibonacci(n - 1) +
                this.fibonacci(n - 2);
    
            return this.cache[n];
        }
    };

    What This Code Is Doing

    The object contains two parts:

    1. A cache

    cache: {}

    This stores answers that were already computed.

    Example after running:

    {
    2: 1,
    3: 2,
    4: 3,
    5: 5
    }

    2. A Fibonacci function

    When asked for a value:

    • If it’s 0 or 1, return immediately.
    • If it already exists in the cache, use the saved answer.
    • Otherwise, calculate it, store it, and return it.

    Why It’s Faster

    The recursive version can explode into thousands or millions of repeated calls.

    The memoized version calculates each Fibonacci number once.

    That turns a slow problem into a fast one.

    Real Lesson Behind This Example

    This is not really about Fibonacci.

    It teaches an important programming principle:

    If a problem repeats the same work, store results and reuse them.

    This idea appears everywhere:

    • Dynamic programming
    • Web caching
    • Database query optimization
    • API response caching
    • Machine learning pipelines

    Final Thought

    Sometimes the smartest code is not code that does more work. It is code that avoids doing the same work twice.

    That small cache: {} line transforms a beginner exercise into a lesson in efficient thinking.

  • Senior Java Full Stack Developer (+Javascript/Typescript)

    Senior software developers collaborate with business and quality analysts, designers, project managers and more to design software solutions that will create meaningful change for our clients. They listen thoughtfully to understand the context of a business problem and write clean and iterative code to deliver a powerful end result whilst consistently advocating for better engineering practices. By balancing strong opinions with a willingness to find the right answer, senior software developers bring integrity to technology, ensuring all voices are heard. 

    For a team to thrive, it needs collaboration and room for healthy, respectful debate. Senior developers are the technologists who cultivate this environment while driving teams toward delivering on an aspirational tech vision and acting as mentors for more junior-level consultants. You will leverage deep technical knowledge to solve complex business problems and proactively assess your team’s health, code quality and nonfunctional requirements.

    • You will learn and adopt best practices like writing clean and reusable code using TDD, pair programming and design patterns.
    • You will use and advocate for continuous delivery practices to deliver high-quality software as well as value to end customers as early as possible.
    • You will drive the AI-first software delivery strategy by strategically integrating and utilizing AI tools throughout the development lifecycle to enhance productivity, ensure high-quality code and create capacity for more complex and creative problem-solving.
    • You will work in collaborative, value-driven teams to build innovative customer experiences for our clients.
    • You will create large-scale distributed systems out of microservices.
    • You will collaborate with a variety of teammates to build features, design concepts and interactive prototypes and ensure best practices and UX specifications are embedded along the way.
    • You will efficiently utilize DevSecOps tools and practices to build and deploy software, advocating devops culture and shifting security left in development.
    • You will oversee or take part in the entire cycle of software consulting and delivery from ideation to deployment and everything in between.
    • You will act as a mentor for less-experienced peers through both your technical knowledge and leadership skills. 

    This means more than just years of experience. It usually implies the person can:

    • Own features or projects end-to-end
    • Make technical decisions independently
    • Mentor junior developers
    • Review code and improve team standards
    • Debug complex production issues
    • Balance speed, quality, and scalability
    • Communicate with product managers, designers, and stakeholders

    Java

    This refers mainly to backend development using Java. Typical responsibilities include:

    • Building APIs and microservices
    • Business logic implementation
    • Integrating databases
    • Security and authentication
    • Performance tuning
    • Working with frameworks like Spring / Spring Boot

    Full Stack

    This means they work on both:

    Backend

    Server-side systems, databases, APIs, cloud infrastructure

    Frontend

    User-facing interfaces in the browser

    + JavaScript / TypeScript

    This means they are also strong in frontend technologies like:

    • JavaScript for interactive web apps
    • TypeScript for safer, scalable codebases
    • Modern frameworks such as React, Angular, Vue

    What they usually do day-to-day

    A Senior Java Full Stack Developer may:

    • Build new product features from database to UI
    • Design REST or GraphQL APIs
    • Write frontend components and dashboards
    • Review pull requests
    • Improve architecture and code quality
    • Fix production bugs quickly
    • Help plan sprints and estimate work
    • Mentor teammates

    Common Tech Stack

    Examples often include:

    • Backend: Java, Spring Boot, Hibernate
    • Frontend: JavaScript, TypeScript, React, Angular
    • Database: PostgreSQL, MySQL, MongoDB
    • DevOps: Docker, Kubernetes, CI/CD
    • Cloud: AWS, Azure, GCP

    What companies usually expect

    When hiring for this role, employers often want someone who can:

    • Work independently with minimal supervision
    • Ship production-ready code
    • Understand system design
    • Handle both frontend and backend tasks
    • Lead technical discussions
    • Improve team productivity